尝试旋转它时,时钟分针会消失

时间:2016-06-24 23:11:13

标签: calayer cgaffinetransform swift3

Modus Operandi:
1)使用基本时钟图像的UIImageView。
2)添加MinuteHand& HourHand子图层(包含其各自的图像)到UIImageView图层。

问题:尝试执行旋转变换时,两个子图层消失

注意:
1)我已删除了“小时”'代码和辅助弧度计算以简化代码。
2)'中心'是时钟的中心。我调整了坐标以实际将指针固定在时钟的中心。
3)ViewDidLayoutSubviews()似乎没问题。我得到了时钟+手。

class ClockViewController:UIViewController {

    private let minuteLayer = CALayer()

    @IBOutlet weak var clockBaseImageView: UIImageView!
    @IBOutlet weak var datePicker: UIDatePicker!

    override func viewDidLayoutSubviews() {

        guard var minuteSize = UIImage(named: "MinuteHand")?.size,
              var hourSize = UIImage(named: "HourHand")?.size
        else {
            return
        }

        var contentLayer:CALayer {
            return self.view.layer
        }

        var center = clockBaseImageView.center

        // Minute Hand:
        minuteLayer.setValue("*** Minute Hand ***", forKey: "id")
        minuteSize = CGSize(width: minuteSize.width/3, height: minuteSize.height/3)
        minuteLayer.contents = UIImage(named: "MinuteHand")?.cgImage

        center = CGPoint(x: 107.0, y: 40.0)
        var handFrame = CGRect(origin: center, size: minuteSize)
        minuteLayer.frame = handFrame
        minuteLayer.contentsScale = clockBaseImageView.layer.contentsScale
        minuteLayer.anchorPoint = center

        clockBaseImageView.layer.addSublayer(minuteLayer)

    }

这是我的问题:尝试通过0.01弧度旋转分针:

func set(_ time:Date) {
        minuteLayer.setAffineTransform(CGAffineTransform(rotationAngle: .01))   // random value for test.
}

在轮换尝试之前:
enter image description here

试图旋转分针后:
enter image description here

手横向向右移动vs旋转。
为什么?也许是由于支点?

2 个答案:

答案 0 :(得分:0)

我认为这可以解决您的问题,看看并告诉我。

     import GLKit // Importing GLKit Framework

     func set(_ time:Date) {
       minuteLayer.transform = CGAffineTransformMakeRotation(CGFloat(GLKMathDegreesToRadians(0.01)))
     }

答案 1 :(得分:0)

注意:此解决方案无法解决旋转 CALayer 的问题。
相反,它通过用子视图替换图层并通过以下方式旋转子视图来绕过问题:

 func set(_ time:Date) {
        minuteView.transform = CGAffineTransform(rotationAngle: 45 * CGFloat(M_PI)/180.0)
 }

结果如下:
enter image description here

不过,知道如何旋转CALayer会很高兴。