CALayer
iOS アプリでをドラッグしようとしています。
位置プロパティを変更するとすぐに、新しい位置にアニメーション化しようとし、あちこちでちらつきます。
layer.position = CGPointMake(x, y)
どうすればCALayers
瞬時に移動できますか? Core Animation API について理解できないようです。
CALayer
iOS アプリでをドラッグしようとしています。
位置プロパティを変更するとすぐに、新しい位置にアニメーション化しようとし、あちこちでちらつきます。
layer.position = CGPointMake(x, y)
どうすればCALayers
瞬時に移動できますか? Core Animation API について理解できないようです。
呼び出しを次のようにラップします。
[CATransaction begin];
[CATransaction setValue: (id) kCFBooleanTrue forKey: kCATransactionDisableActions];
layer.position = CGPointMake(x, y);
[CATransaction commit];
スウィフト 3 拡張機能:
extension CALayer {
class func performWithoutAnimation(_ actionsWithoutAnimation: () -> Void){
CATransaction.begin()
CATransaction.setValue(true, forKey: kCATransactionDisableActions)
actionsWithoutAnimation()
CATransaction.commit()
}
}
使用法 :
CALayer.performWithoutAnimation(){
someLayer.position = newPosition
}
便利機能も使える
[CATransaction setDisableActions:YES]
同じように。
注: 発生する可能性のある落とし穴を理解するために、Yogev Shelly によるコメントを必ずお読みください。
他の人が提案したように、使用できますCATransaction
。
この問題が発生するのは、CALayer のデフォルトの暗黙的なアニメーション期間が 0.25 秒であるためです。
したがって、より簡単な (私の意見では) の代替手段は、 の値でsetDisableActions
使用することです。setAnimationDuration
0.0
[CATransaction begin];
[CATransaction setAnimationDuration:0.0];
layer.position = CGPointMake(x, y);
[CATransaction commit];