【发布时间】:2019-09-07 06:47:27
【问题描述】:
我正在使用 BezierPath,可以成功地在视图中制作基本的星形,效果很好。但是,视图的大小可以更改。当视图大小改变时,我无法将这条贝塞尔路径居中,我设法对其进行了缩放,但居中对我来说很难。
private func pointFrom(_ angle: CGFloat, radius: CGFloat, offset: CGPoint) -> CGPoint {
return CGPoint(x: radius * cos(angle) + offset.x, y: radius * sin(angle) + offset.y)//CGPointMake(radius * cos(angle) + offset.x, radius * sin(angle) + offset.y)
}
private func generateStar(width:CGFloat, height:CGFloat, radius:CGFloat) -> CAShapeLayer{
let path = UIBezierPath()
var scale = width / height
if width > height{
scale = height / width
}
let starExtrusion:CGFloat = 60.0
let center = CGPoint(x: width / 2.0, y: height / 2.0)
let pointsOnStar = 5
var angle:CGFloat = -CGFloat(.pi / 2.0)
let angleIncrement = CGFloat(.pi * 2.0 / Double(pointsOnStar))
let radius = width / 2.0
var firstPoint = true
for _ in 1...pointsOnStar {
let point = pointFrom(angle, radius: radius, offset: center)
let nextPoint = pointFrom(angle + angleIncrement, radius: radius, offset: center)
let midPoint = pointFrom(angle + angleIncrement / 2.0, radius: starExtrusion, offset: center)
if firstPoint {
firstPoint = false
path.move(to: point)
}
path.addLine(to: midPoint)//addLineToPoint(midPoint)
path.addLine(to: nextPoint)//addLineToPoint(nextPoint)
angle += angleIncrement
}
path.apply(CGAffineTransform(scaleX: scale, y: scale))
path.close()
let maskLayer = CAShapeLayer()
maskLayer.path = path.cgPath
return maskLayer
}
我怎样才能做到这一点?谢谢!
【问题讨论】:
标签: ios swift uibezierpath