无法更改 CAShapeLayer 的锚点 iOS Swift
Can't change AnchorPoint for CAShapeLayer iOS Swift
这是我的习惯 class 的摘录,即绘制一些图形。函数 drawTick()
将带有蓝色矩形的 CAShapeLayer
添加到我的 GameTimer
UIView
:
class GameTimer: UIView {
var tick = CAShapeLayer()
...
init(){
super.init(frame: CGRect(x: 0, y: 0, width: 200, height: 200)
}
...
func drawTick() {
tick.path = UIBezierPath(rect: CGRect(x: 0, y: 0, width: 50, height: 50)).cgPath
tick.fillColor = UIColor.blue.cgColor
self.layer.addSublayer(tick)
tick.anchorPoint = CGPoint(x: 0.5, y: 0.5)
tick.position = CGPoint(x: bounds.midX, y: bounds.midY)
tick.transform = CATransform3DMakeRotation(0.degreesToRadians, 0, 0, 1)
}
...
}
extension Double {
var degreesToRadians : CGFloat {
return CGFloat(self) * CGFloat(M_PI) / 180.0
}
}
通过
将旋转角度更改为 45 度
tick.transform = CATransform3DMakeRotation(45.degreesToRadians, 0, 0, 1)
给出下一个结果:
在这里我看到,声明的锚点不影响 tick
图层 - 它应该位于蓝色矩形的中心。旋转围绕坐标为 (x: 0, y: 0) 的点 - 蓝色矩形的左上角 - tick.position
。
问题 - 为什么声明的 anchorPoint
位置不适用于 tick
层?这里的行为很奇怪,假设 anchorPoint
的默认位置应该已经是 (x: 0.5, y: 0.5)
而没有任何手动覆盖,但是如果我删除这个覆盖 - 没有任何变化。
tick
层没有大小。它看起来正确的原因是路径没有被剪裁到边界(即绘制在边界之外)。
如果您为形状图层提供与圆的矩形相同的bounds
,那么您将能够看到围绕中心的旋转。
这是我的习惯 class 的摘录,即绘制一些图形。函数 drawTick()
将带有蓝色矩形的 CAShapeLayer
添加到我的 GameTimer
UIView
:
class GameTimer: UIView {
var tick = CAShapeLayer()
...
init(){
super.init(frame: CGRect(x: 0, y: 0, width: 200, height: 200)
}
...
func drawTick() {
tick.path = UIBezierPath(rect: CGRect(x: 0, y: 0, width: 50, height: 50)).cgPath
tick.fillColor = UIColor.blue.cgColor
self.layer.addSublayer(tick)
tick.anchorPoint = CGPoint(x: 0.5, y: 0.5)
tick.position = CGPoint(x: bounds.midX, y: bounds.midY)
tick.transform = CATransform3DMakeRotation(0.degreesToRadians, 0, 0, 1)
}
...
}
extension Double {
var degreesToRadians : CGFloat {
return CGFloat(self) * CGFloat(M_PI) / 180.0
}
}
通过
将旋转角度更改为 45 度tick.transform = CATransform3DMakeRotation(45.degreesToRadians, 0, 0, 1)
给出下一个结果:
在这里我看到,声明的锚点不影响 tick
图层 - 它应该位于蓝色矩形的中心。旋转围绕坐标为 (x: 0, y: 0) 的点 - 蓝色矩形的左上角 - tick.position
。
问题 - 为什么声明的 anchorPoint
位置不适用于 tick
层?这里的行为很奇怪,假设 anchorPoint
的默认位置应该已经是 (x: 0.5, y: 0.5)
而没有任何手动覆盖,但是如果我删除这个覆盖 - 没有任何变化。
tick
层没有大小。它看起来正确的原因是路径没有被剪裁到边界(即绘制在边界之外)。
如果您为形状图层提供与圆的矩形相同的bounds
,那么您将能够看到围绕中心的旋转。