2017-04-02 187 views
-5

如何將其轉換爲Swift 3?我試過,但我不斷收到動畫.fromValue和animation.toValue錯誤(這是隻有2條線,我需要)轉換爲Swift 3

extension UIView { 

    func shake() { 
     let animation = CABasicAnimation(keyPath: "position") 
     animation.duration = 0.07 
     animation.repeatCount = 3 
     animation.autoreverses = true 

     // This line produces error 
     animation.fromValue = NSValue(CGPoint: CGPointMake(self.center.x - 10, self.center.y)) 
     // And this line produces error 
     animation.toValue = NSValue(CGPoint: CGPointMake(self.center.x + 10, self.center.y)) 

     self.layer.addAnimation(animation, forKey: "position") 
    } 
} 
+3

什麼是錯誤? –

回答

1

哇。它花了一些時間來讓編譯器不會抱怨,但這裏是你的第一線,做正確:

animation.fromValue = NSValue(cgPoint: CGPoint(x: self.center.x - 10, y: self.center.y)) 

我說「哇」,因爲相對於你的斯威夫特2行:

animation.fromValue = NSValue(CGPoint: CGPointMake(self.center.x - 10, self.center.y)) 

你基本上停留斯威夫特2和雨燕3之間事物之間:

  • CGPointMake現在簡直是CGPoint。這很小,我想你會找到它的。
  • NSValue使用cgPoint的Swift 3語法,但是然後*定義該點意味着使用CGPoint

這種構建。但只有經過幾次嘗試,並讓Xcode抱怨。我很驚訝升級到目前的語法沒有抓住這個 - 但也許是因爲有兩個問題需要升級。

您可以將它用於第二次構建錯誤。如果那是完全錯誤的 - 語法 - 那麼我相信你很好走。

+0

很多時候,升級並沒有發現那些初始化改變。我注意到它幾乎從來沒有捕捉到像CGRectMake到CGRect和CGVectorMake到CGVector的東西 – TheValyreanGroup

+0

是的,但它是*組合*拋出我--NSValue需要「cgPoint」和CGRectMake需要「CGRect」。當然,一旦你看到它,沒有什麼大不了 - 但結合? (順便說一下,我同意升級沒有捕捉CGRectMake與CGRect,沒有升級工具是完美的。) – dfd

+0

我曾嘗試過,但我仍然得到這兩行的箭頭。 (我正在使用遊樂場) –