旋转 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 上支持图层)。
我在下面有这段代码可以将 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 上支持图层)。