【问题标题】:Can't change AnchorPoint for CAShapeLayer iOS Swift无法更改 CAShapeLayer iOS Swift 的 AnchorPoint
【发布时间】:2017-03-27 13:14:28
【问题描述】:

这是从我的自定义类中提取的,用于绘制一些图形。函数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) 没有任何手动覆盖,这是奇怪的行为,但是如果我删除此覆盖 - 没有任何变化。

【问题讨论】:

    标签: cashapelayer anchorpoint catransform3drotate


    【解决方案1】:

    tick 层没有大小。它看起来正确的原因是路径没有被裁剪到边界(即绘制在边界之外)。

    如果你给形状层提供与圆的矩形相同的bounds,那么你将能够看到围绕中心的旋转。

    【讨论】:

    • 谢谢!完全按照您提到的那样工作。
    • 你能举个例子吗
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 2023-04-03
    • 2021-02-12
    • 2021-05-11
    • 2017-01-31
    相关资源
    最近更新 更多