Bigger touch zones for custom keyboard buttons
This commit is contained in:
parent
e4085ee665
commit
a6bf78affe
@ -15,8 +15,13 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"color" : {
|
"color" : {
|
||||||
"platform" : "ios",
|
"color-space" : "srgb",
|
||||||
"reference" : "systemGray3Color"
|
"components" : {
|
||||||
|
"alpha" : "1.000",
|
||||||
|
"blue" : "0.290",
|
||||||
|
"green" : "0.282",
|
||||||
|
"red" : "0.282"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"idiom" : "universal"
|
"idiom" : "universal"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,39 +18,39 @@ class PNButton: UIButton {
|
|||||||
private(set) var type: PNButtonType
|
private(set) var type: PNButtonType
|
||||||
private var timer: Timer?
|
private var timer: Timer?
|
||||||
private var waitCount = 0
|
private var waitCount = 0
|
||||||
|
private var rectLayer = CAShapeLayer()
|
||||||
|
private var bgColor = UIColor(named: "KeyBackground")
|
||||||
|
|
||||||
weak var delegate: PNButtonDelegate?
|
weak var delegate: PNButtonDelegate?
|
||||||
|
|
||||||
init(letter: Character) {
|
init(letter: Character) {
|
||||||
self.type = .symbol(String(letter))
|
self.type = .symbol(String(letter))
|
||||||
super.init(frame: .zero)
|
super.init(frame: .zero)
|
||||||
|
self.setup()
|
||||||
self.titleLabel?.font = UIFont(name: "RoadNumbers", size: 36)
|
self.titleLabel?.font = UIFont(name: "RoadNumbers", size: 36)
|
||||||
let title = String(Constants.pnLettersMap[letter] ?? letter)
|
let title = String(Constants.pnLettersMap[letter] ?? letter)
|
||||||
self.setTitle(title, for: .normal)
|
self.setTitle(title, for: .normal)
|
||||||
self.setTitleColor(.label, for: .normal)
|
self.setTitleColor(.label, for: .normal)
|
||||||
self.backgroundColor = UIColor(named: "KeyBackground")
|
|
||||||
self.setup()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
init(digit: Int) {
|
init(digit: Int) {
|
||||||
self.type = .symbol(String(digit))
|
self.type = .symbol(String(digit))
|
||||||
super.init(frame: .zero)
|
super.init(frame: .zero)
|
||||||
|
self.setup()
|
||||||
self.titleLabel?.font = UIFont(name: "RoadNumbersCyr-Regular", size: 30)
|
self.titleLabel?.font = UIFont(name: "RoadNumbersCyr-Regular", size: 30)
|
||||||
let character = Character(String(digit))
|
let character = Character(String(digit))
|
||||||
let title = String(Constants.pnLettersMap[character] ?? character)
|
let title = String(Constants.pnLettersMap[character] ?? character)
|
||||||
self.setTitle(title, for: .normal)
|
self.setTitle(title, for: .normal)
|
||||||
self.setTitleColor(.label, for: .normal)
|
self.setTitleColor(.label, for: .normal)
|
||||||
self.backgroundColor = UIColor(named: "KeyBackground")
|
|
||||||
self.setup()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
init(imageName: String, type: PNButtonType) {
|
init(imageName: String, type: PNButtonType) {
|
||||||
self.type = type
|
self.type = type
|
||||||
|
self.bgColor = UIColor(named: "DarkKeyBackground")
|
||||||
super.init(frame: .zero)
|
super.init(frame: .zero)
|
||||||
self.setImage(UIImage(systemName: imageName), for: .normal)
|
|
||||||
self.backgroundColor = UIColor(named: "DarkKeyBackground")
|
|
||||||
self.tintColor = .label
|
|
||||||
self.setup()
|
self.setup()
|
||||||
|
self.setImage(UIImage(systemName: imageName), for: .normal)
|
||||||
|
self.tintColor = .label
|
||||||
}
|
}
|
||||||
|
|
||||||
required init?(coder: NSCoder) {
|
required init?(coder: NSCoder) {
|
||||||
@ -58,17 +58,26 @@ class PNButton: UIButton {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func setup(_ radius: CGFloat = 0.5) {
|
func setup(_ radius: CGFloat = 0.5) {
|
||||||
self.layer.cornerRadius = 6
|
self.rectLayer.cornerRadius = 6
|
||||||
self.layer.shadowColor = UIColor.black.cgColor
|
self.layer.addSublayer(self.rectLayer)
|
||||||
self.layer.shadowOpacity = 0.4
|
self.imageView?.layer.zPosition = 2
|
||||||
self.layer.shadowOffset = CGSize(width: 0.0, height : 1.0)
|
|
||||||
self.layer.shadowRadius = radius
|
self.rectLayer.shadowColor = UIColor.black.cgColor
|
||||||
|
self.rectLayer.shadowOpacity = 0.4
|
||||||
|
self.rectLayer.shadowOffset = CGSize(width: 0.0, height : 1.0)
|
||||||
|
self.rectLayer.shadowRadius = radius
|
||||||
|
|
||||||
self.addTarget(self, action: #selector(buttonDown), for: .touchDown)
|
self.addTarget(self, action: #selector(buttonDown), for: .touchDown)
|
||||||
self.addTarget(self, action: #selector(buttonUp), for: [.touchUpInside, .touchUpOutside])
|
self.addTarget(self, action: #selector(buttonUp), for: [.touchUpInside, .touchUpOutside])
|
||||||
self.addTarget(self, action: #selector(touchUpInside), for: .touchUpInside)
|
self.addTarget(self, action: #selector(touchUpInside), for: .touchUpInside)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override func layoutSubviews() {
|
||||||
|
super.layoutSubviews()
|
||||||
|
self.rectLayer.backgroundColor = self.bgColor?.cgColor
|
||||||
|
self.rectLayer.frame = self.layer.bounds.inset(by: UIEdgeInsets(top: 4, left: 4, bottom: 4, right: 4))
|
||||||
|
}
|
||||||
|
|
||||||
@objc func buttonDown(_ sender: PNButton) {
|
@objc func buttonDown(_ sender: PNButton) {
|
||||||
print("buttonDown")
|
print("buttonDown")
|
||||||
sender.layer.opacity = 0.3
|
sender.layer.opacity = 0.3
|
||||||
@ -92,6 +101,11 @@ class PNButton: UIButton {
|
|||||||
print("touchUpInside")
|
print("touchUpInside")
|
||||||
self.delegate?.buttonTapped(self)
|
self.delegate?.buttonTapped(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func setBacgroundColor(color: UIColor) {
|
||||||
|
self.bgColor = color
|
||||||
|
self.setNeedsLayout()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class PNKeyboard: UIView, UIInputViewAudioFeedback, PNButtonDelegate {
|
class PNKeyboard: UIView, UIInputViewAudioFeedback, PNButtonDelegate {
|
||||||
@ -130,7 +144,7 @@ class PNKeyboard: UIView, UIInputViewAudioFeedback, PNButtonDelegate {
|
|||||||
|
|
||||||
let done = PNButton(imageName: "arrow.turn.down.left", type: .done)
|
let done = PNButton(imageName: "arrow.turn.down.left", type: .done)
|
||||||
done.delegate = self
|
done.delegate = self
|
||||||
done.backgroundColor = .systemBlue
|
done.setBacgroundColor(color: .systemBlue)
|
||||||
done.tintColor = .white
|
done.tintColor = .white
|
||||||
|
|
||||||
let letterRows = [
|
let letterRows = [
|
||||||
@ -143,7 +157,7 @@ class PNKeyboard: UIView, UIInputViewAudioFeedback, PNButtonDelegate {
|
|||||||
let lettersStack = UIStackView(arrangedSubviews: letterRows)
|
let lettersStack = UIStackView(arrangedSubviews: letterRows)
|
||||||
lettersStack.axis = .vertical
|
lettersStack.axis = .vertical
|
||||||
lettersStack.distribution = .fillEqually
|
lettersStack.distribution = .fillEqually
|
||||||
lettersStack.spacing = 8
|
//lettersStack.spacing = 8
|
||||||
|
|
||||||
let digitRows = [
|
let digitRows = [
|
||||||
self.createLetterStack([digits[0], digits[1], digits[2]]),
|
self.createLetterStack([digits[0], digits[1], digits[2]]),
|
||||||
@ -155,7 +169,7 @@ class PNKeyboard: UIView, UIInputViewAudioFeedback, PNButtonDelegate {
|
|||||||
let digitsStack = UIStackView(arrangedSubviews: digitRows)
|
let digitsStack = UIStackView(arrangedSubviews: digitRows)
|
||||||
digitsStack.axis = .vertical
|
digitsStack.axis = .vertical
|
||||||
digitsStack.distribution = .fillEqually
|
digitsStack.distribution = .fillEqually
|
||||||
digitsStack.spacing = 8
|
//digitsStack.spacing = 8
|
||||||
|
|
||||||
let mainStack = UIStackView(arrangedSubviews: [lettersStack, digitsStack])
|
let mainStack = UIStackView(arrangedSubviews: [lettersStack, digitsStack])
|
||||||
mainStack.spacing = 16
|
mainStack.spacing = 16
|
||||||
@ -174,7 +188,7 @@ class PNKeyboard: UIView, UIInputViewAudioFeedback, PNButtonDelegate {
|
|||||||
func createLetterStack(_ views: [UIView]) -> UIStackView {
|
func createLetterStack(_ views: [UIView]) -> UIStackView {
|
||||||
let stack = UIStackView(arrangedSubviews: views)
|
let stack = UIStackView(arrangedSubviews: views)
|
||||||
stack.distribution = .fillEqually
|
stack.distribution = .fillEqually
|
||||||
stack.spacing = 8
|
//stack.spacing = 8
|
||||||
return stack
|
return stack
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user