[英]How to create custom rectangles as shown below programatically in objective-C using UIBezierPath or any other method?
[英]How to create particular shape for Button by using UIBezierPath as shown in below Attached Image with Swift Code?
我嘗試了多種方法來繪制按鈕,如圖所示,但是我只能繪制六邊形。 無法如圖片所示繪制。 請幫助我如何繪制如圖所示。 謝謝
您可以使用UIBezierPath
和CAShapeLayer
進行此CAShapeLayer
創建一個UIButton
子類,並覆蓋layoutSubviews()
,在該處您將更新路徑,將點與線連接起來。
這是您的起點:
class AngledButton: UIButton {
var bPath = UIBezierPath()
var theShapeLayer = CAShapeLayer()
var fillColor: UIColor = UIColor.white
var borderColor: UIColor = UIColor.gray
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
func commonInit() -> Void {
layer.addSublayer(theShapeLayer)
}
override func layoutSubviews() {
super.layoutSubviews()
let p1 = CGPoint.zero
let p2 = CGPoint(x: bounds.width - bounds.height * 0.3, y: 0.0)
let p3 = CGPoint(x: bounds.width, y: bounds.height * 0.5)
let p4 = CGPoint(x: bounds.width - bounds.height * 0.3, y: bounds.height)
let p5 = CGPoint(x: 0.0, y: bounds.height)
bPath.move(to: p1)
bPath.addLine(to: p2)
bPath.addLine(to: p3)
bPath.addLine(to: p4)
bPath.addLine(to: p5)
bPath.close()
theShapeLayer.path = bPath.cgPath
theShapeLayer.fillColor = self.fillColor.cgColor
theShapeLayer.strokeColor = self.borderColor.cgColor
}
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
// only allow tap *within* the bezier path
if bPath.contains(point) {
return self
}
return nil
}
}
通過也覆蓋hitTest()
,只有在點擊位於貝塞爾曲線路徑區域內時,才會輕擊按鈕。 然后,您可以重疊按鈕,並且單擊右上角的水龍頭將“通過”下面的按鈕。
結果:
筆記:
@IBDesignable
成為Interface Builder中的布局
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.