我想创建一个类似圆形进度条的东西,在UIView中绘制贝塞尔路径,但它会以PI/2的角度旋转。所以我需要将其旋转PI/2。问题是,它围绕着一些非常奇怪的点旋转,我不知道如何处理。
我尝试按照这些说明进行操作,但它没有帮助,因为我想围绕中心旋转。
这是我的代码:
required init(coder aDecoder: NSCoder) {
ringLayer = CAShapeLayer()
ringLayerBackground = CAShapeLayer()
super.init(coder: aDecoder)
ringLayer.lineCap = kCALineCapButt
ringLayer.fillColor = nil
ringLayerBackground.lineCap = kCALineCapButt
ringLayerBackground.fillColor = nil
ringLayerBackground.strokeColor = UIColor(white: 0.5, alpha: 0.1).CGColor
}
override func layoutSubviews() {
layer.addSublayer(ringLayer)
layer.addSublayer(ringLayerBackground)
addSubview(imageView)
let rectForRing = CGRectInset(bounds, lineWidth/2, lineWidth/2)
//ringLayer.setAffineTransform(CGAffineTransformMakeRotation(5))
ringLayer.transform = CATransform3DRotate(ringLayer.transform, CGFloat(-M_PI/20), 0.0, 0.0, 1.0)
//Tried both ways
ringLayer.path = CGPathCreateWithEllipseInRect(rectForRing, nil)
ringLayerBackground.path = CGPathCreateWithEllipseInRect(rectForRing, nil)
super.layoutSubviews()
}
我知道有很多类似的问题,但它们并没有帮助。 谢谢!
更新 找到了一个适用于iPhone 6的魔数:140
let o = 140.0
ringLayer.transform = CATransform3DTranslate(ringLayer.transform, CGFloat(o), CGFloat(o), 0)
ringLayer.transform = CATransform3DRotate(ringLayer.transform, CGFloat(-M_PI/2), 0.0, 0.0, 1.0)
ringLayer.transform = CATransform3DTranslate(ringLayer.transform, CGFloat(-o), CGFloat(-o), 0)
功能正常,但我无法猜测那个数字是从哪里来的。
更新
问题已解决。是在ringLayer.position
中的一个东西,需要将其设置为视图中心。之后,我为贝塞尔路径制作了一个矩形,使其中心与ringLayer.position
相同。因此代码变得复杂,@chrisco的解决方案更加适用。