【发布时间】:2019-02-02 19:06:10
【问题描述】:
我正在尝试使用 UIBezierPath 创建自定义平行四边形视图,但没有得到一个完美的视图。
以下是我的自定义视图代码
class CustomView: UIView {
override func draw(_ rect: CGRect) {
let offset = 60.0;
let path = UIBezierPath()
path.move(to: CGPoint(x: self.frame.origin.x + CGFloat(offset), y: self.frame.origin.y))
path.addLine(to: CGPoint(x: self.frame.width + self.frame.origin.x , y: self.frame.origin.y))
path.addLine(to: CGPoint(x: self.frame.origin.x + self.frame.width - CGFloat(offset) , y: self.frame.origin.y + self.frame.height))
path.addLine(to: CGPoint(x: self.frame.origin.x, y: self.frame.origin.y + self.frame.height))
// Close the path. This will create the last line automatically.
path.close()
UIColor.red.setFill()
path.fill()
let shapeLayer = CAShapeLayer()
shapeLayer.path = path.cgPath
self.layer.mask = shapeLayer;
}
}
我创建视图使用
let customView = CustomView()
customView.frame = CGRect(origin: CGPoint(x: 10, y: 20), size: CGSize(width: 250, height: 250))
self.view.addSubview(customView)
但我得到了这样的视图,它不是一个完美的平行四边形。
【问题讨论】:
-
这很简单——你从
offset开始你的顶线,并希望它和你的视图一样长width——这意味着它超出了你的视图范围。您可以检查设置clipsToBounds = false是否可以解决问题或更改您的数学以便offset + parallelogramWidth <= viewWidth。 -
@Losiowaty 我试过 self.clipsToBounds = false 但还是不行。
标签: ios swift uiview swift4 uibezierpath