2015-05-16 2 views
1

У меня есть этот код для вращения UIView на 360 градусов. Это файл расширения UIView.Вращайте NSView 360 градусов

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, но он, похоже, не работает с использованием приведенного выше кода. Благодаря

ответ

2

Это работает, но вы должны изменить две вещи:

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 для зрения, чтобы заставить вид быть слой спинками (вид не автоматически слой поддерживаемых ОС ИКС).
Смежные вопросы