2017-09-25 86 views
1

我在Swift中開發iOS應用程序,我想用360度旋轉圖像的運動。動畫應在每輪完成後停止2秒。快速圖像旋轉360度

我需要在每次旋轉完成後2秒延遲。我如何設置延遲?我已經完成了圖像旋轉算法。

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

    if let delegate: CAAnimationDelegate = completionDelegate { 
     rotateAnimation.delegate = delegate 

    } 
    rotateAnimation.repeatCount = Float.greatestFiniteMagnitude; 

    self.layer.add(rotateAnimation, forKey: nil) 
} 

對於延遲我已經試過這樣:

let deadlineTime = DispatchTime.now() + .seconds(2) 
    DispatchQueue.main.asyncAfter(deadline: deadlineTime, execute: { 
     self.imgView.rotate360Degrees() 
    }) 

它無法正常工作。

+0

什麼不起作用?你沒有調用'rotate360Degrees',或者該方法不會導致旋轉?或旋轉工作,但旋轉之間沒有停頓? (我最好的猜測:最後一個,正確的答案涉及'CAKeyframeAnimation'因爲你正在做的是期待延遲開始動畫永遠在動畫內部) – Tommy

+0

旋轉工作,但我需要2秒延遲在每一次旋轉中該部分不工作。 – user12346

回答

0

它非常簡單。只需在身體內調用你的功能,並且一旦旋轉完成,在延遲2秒後調用相同的功能。而當你想停止時,只要停下就移除它。示例

unowned let unownedSelf = self 

let deadlineTime = DispatchTime.now() + .seconds(2) 
DispatchQueue.main.asyncAfter(deadline: deadlineTime, execute: { 
unownedSelf.functionToCall() 
}) 
+0

我試圖像這樣讓deadlineTime = DispatchTime.now()+ .seconds(2) DispatchQueue.main.asyncAfter(截止時間:deadlineTime,執行:{ VAR的AffineTransform = CGAffineTransform(rotationAngle:0.0) 的AffineTransform = affineTransform.rotated (by:CGFloat(M_PI)) let circlePath = UIBezierPath(arcCenter:CGPoint(x:100-(100/2),y:100-(100/2)),radius:CGFloat(100),startAngle:CGFloat 0),endAngle:CGFloat(M_PI * 2),順時針:true)orbit.rotationMode = kCAAnimationRotateAuto }) 但它不起作用 – user12346

+0

問題是你需要在完成旋轉後調用函數,例如它需要30秒以完成旋轉,而不是在32秒後調用它。確保當你第一次調用這個函數時,你是否給它足夠的時間在下一個週期開始之前暫停。現在更多的管理事情..你幾乎在那裏。否則,請讓我知道我可以更新我的代碼以獲得更多理解。 – cole

+0

我已經完成了它,但是當我再次用你提供給我的一段代碼調用這個函數時。動畫看起來並不平坦,這很麻煩。 – user12346