旋转 NSView 360 度

Rotate NSView 360 degrees

我在下面有这段代码可以将 UIView 旋转 360 度。 是UIView的扩展文件。

extension NSView {
func rotate360Degrees(duration: CFTimeInterval = 0.5, completionDelegate: AnyObject? = nil) {
    let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation")
    rotateAnimation.fromValue = 0.0
    rotateAnimation.toValue = CGFloat(M_PI * 2.0)
    rotateAnimation.duration = duration

    if let delegate: AnyObject = completionDelegate {
        rotateAnimation.delegate = delegate
    }
    self.layer.addAnimation(rotateAnimation, forKey: nil)

}
}

单击按钮后,我会使用 refreshButton.rotate360Degrees() 启动动画。

我想为 NSView 重新创建它,但使用上面的代码似乎无法正常工作。 谢谢

有效,但您必须更改两点:

extension NSView {
    func rotate360Degrees(duration: CFTimeInterval = 0.5, completionDelegate: AnyObject? = nil) {
        let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation")
        rotateAnimation.fromValue = 0.0
        rotateAnimation.toValue = CGFloat(M_PI * 2.0)
        rotateAnimation.duration = duration
        if let delegate: AnyObject = completionDelegate {
            rotateAnimation.delegate = delegate
        }
        // `addAnimation` will execute *only* if the layer exists
        self.layer?.addAnimation(rotateAnimation, forKey: nil)
    }
}
  • self.layer 之后添加 ? 以允许在层不可用时有条件地执行。

如果您愿意,可以使用 if let ...

    if let theLayer = self.layer {
        theLayer.addAnimation(rotateAnimation, forKey: nil)
    } 
  • 将视图的 wantsLayer 设置为 true,以强制视图支持图层(视图不会自动在 OS X 上支持图层)。