はそれを行うことができますCADisplayLinkでアニメーションを作り、実行ループとそのcommonModesを使用する必要があり、スクロールの影響を避けるために:
self.displayLinkForRotation.isPaused = false
はそれを破壊する:
private var _displayLinkForRotation:CADisplayLink?
var displayLinkForRotation:CADisplayLink {
get{
if _displayLinkForRotation == nil {
_displayLinkForRotation = CADisplayLink(target: self, selector: #selector(excuteAnimations))
_displayLinkForRotation?.add(to: RunLoop.current, forMode: RunLoopMode.commonModes)
}
return _displayLinkForRotation!
}
}
func excuteAnimations() {
//This function will be called 60 times per second.
//According to your question, you have 2 seconds to rotate the view to 180 angle. So we rotate 90 angle per second here.
//self.view could be replaced by another view you want to rotate.
self.view.transform = self.view.transform.rotated(by: 90.0/60.0/180.0 * CGFloat.pi)
let angle = atan2(self.view.transform.b, self.view.transform.a) * (45.0/atan(1.0))
if (round(angle) >= 180.0) { //Stop when rotated 180 angle
self.displayLinkForRotation.isPaused = true
}
}
は、アニメーションを開始するには:
self.displayLinkForRotation.invalidate()
_displayLinkForRotation = nil
を役に立てば幸い?あなたのコードはより多くのコンテキストを必要とします。 – jrturton
func collectionView(_ collectionView:UICollectionView、cellForItemAt indexPath:IndexPath) - > UICollectionViewCellに追加します。 – Xie