Ich habe eine UIButton auf Xib, die ein Rechteck ist, ich möchte ändern Sie den Rahmen mit einem Pfeil wie Ecke, aber behalten Sie es auf der XIB (von der Schnittstelle Builder), wie kann ich das tun?Ändern UIButton rect ohne drawRect
Ich weiß, dass ich das mit UIBezierPath in DrawRect tun kann, aber das ist nur eine benutzerdefinierte Form zu erstellen und aus Code hinzuzufügen.
Gibt es einen anderen Weg?
Dies ist mein Code mit benutzerdefinierter Schaltfläche Klasse:
class ButtonContinue: UIButton {
var path: UIBezierPath!
override func awakeFromNib() {
backgroundColor = UIColor.green
addTarget(self, action: #selector(touchDown), for: .touchDown)
}
override func draw(_ rect: CGRect) {
path = UIBezierPath()
path.move(to: CGPoint(x: 32, y: 28 + (rect.size.height/2)))
path.addLine(to: CGPoint(x: 70, y: 28))
path.addLine(to: CGPoint(x: rect.size.width, y: 28))
path.addLine(to: CGPoint(x: rect.size.width, y: rect.size.height + 28))
path.addLine(to: CGPoint(x: 70, y: rect.size.height + 28))
path.close()
let shapeLayer = CAShapeLayer()
shapeLayer.strokeColor = UIColor.red.cgColor
shapeLayer.fillColor = UIColor.blue.cgColor
shapeLayer.path = path.cgPath
layer.addSublayer(shapeLayer)
}
func touchDown(button: ButtonContinue, event: UIEvent) {
if let touch = event.touches(for: button)?.first {
let location = touch.location(in: button)
if path.contains(location) == false {
button.cancelTracking(with: nil)
}
}
}
}
Warum brauchen Sie es auf diese Weise? Ist es nicht einfacher ein Bild zu verwenden? –
Möchten/müssen Sie wirklich prüfen, ob sich die Berührung innerhalb des Pfeilrahmens befindet? Ich würde nur ein Bild verwenden. –