当我增加视图大小时,我正在UIView
上形成锯齿形状。
func zigZagShape() {
let width = self.frame.size.width
let height = self.frame.size.height
let givenFrame = self.frame
let zigZagWidth = CGFloat(6)
let zigZagHeight = CGFloat(4)
var yInitial = height-zigZagHeight
let zigZagPath = UIBezierPath(rect: givenFrame)
zigZagPath.move(to: CGPoint(x:0, y:0))
zigZagPath.addLine(to: CGPoint(x:0, y:yInitial))
var slope = -1
var x = CGFloat(0)
var i = 0
while x < width {
x = zigZagWidth * CGFloat(i)
let p = zigZagHeight * CGFloat(slope)
let y = yInitial + p
let point = CGPoint(x: x, y: y)
zigZagPath.addLine(to: point)
slope = slope*(-1)
i += 1
}
zigZagPath.addLine(to: CGPoint(x:width,y: 0))
yInitial = 0 + zigZagHeight
x = CGFloat(width)
i = 0
while x > 0 {
x = width - (zigZagWidth * CGFloat(i))
let p = zigZagHeight * CGFloat(slope)
let y = yInitial + p
let point = CGPoint(x: x, y: y)
zigZagPath.addLine(to: point)
slope = slope*(-1)
i += 1
}
let shapeLayer = CAShapeLayer()
shapeLayer.path = zigZagPath.cgPath
self.layer.mask = shapeLayer
}
答案 0 :(得分:1)
当您使用UIBezierPath
初始化框架时,我已经更正了代码。还
@IBDesignable
class ZigZiagView: UIView {
override func draw(_ rect: CGRect) {
super.draw(rect)
zigZagShape()
}
func zigZagShape() {
let width = self.frame.size.width
let height = self.frame.size.height
//let givenFrame = self.frame
let zigZagWidth = CGFloat(6)
let zigZagHeight = CGFloat(4)
var yInitial = height-zigZagHeight
let zigZagPath = UIBezierPath()
zigZagPath.move(to: CGPoint(x:0, y:0))
zigZagPath.addLine(to: CGPoint(x:0, y:yInitial))
var slope = -1
var x = CGFloat(0)
var i = 0
while x < width {
x = zigZagWidth * CGFloat(i)
let p = zigZagHeight * CGFloat(slope)
let y = yInitial + p
let point = CGPoint(x: x, y: y)
zigZagPath.addLine(to: point)
slope = slope*(-1)
i += 1
}
zigZagPath.addLine(to: CGPoint(x:width,y: 0))
// draw the line from top right to Bottom
zigZagPath.addLine(to: CGPoint(x:width,y:height))
yInitial = 0 + zigZagHeight
x = CGFloat(width)
i = 0
while x > 0 {
x = width - (zigZagWidth * CGFloat(i))
let p = zigZagHeight * CGFloat(slope)
let y = yInitial + p
let point = CGPoint(x: x, y: y)
zigZagPath.addLine(to: point)
slope = slope*(-1)
i += 1
}
// Now Close the path
zigZagPath.close()
let shapeLayer = CAShapeLayer()
shapeLayer.path = zigZagPath.cgPath
self.layer.mask = shapeLayer
}
}
试试这个,让我知道这是否有效?