81

CALayeriOS アプリでをドラッグしようとしています。

位置プロパティを変更するとすぐに、新しい位置にアニメーション化しようとし、あちこちでちらつきます。

 layer.position = CGPointMake(x, y)

どうすればCALayers瞬時に移動できますか? Core Animation API について理解できないようです。

4

5 に答える 5

173

呼び出しを次のようにラップします。

[CATransaction begin]; 
[CATransaction setValue: (id) kCFBooleanTrue forKey: kCATransactionDisableActions];
layer.position = CGPointMake(x, y);
[CATransaction commit];
于 2008-10-22T17:22:12.883 に答える
36

スウィフト 3 拡張機能:

extension CALayer {
    class func performWithoutAnimation(_ actionsWithoutAnimation: () -> Void){
        CATransaction.begin()
        CATransaction.setValue(true, forKey: kCATransactionDisableActions)
        actionsWithoutAnimation()
        CATransaction.commit()
    }
}

使用法 :

CALayer.performWithoutAnimation(){
    someLayer.position = newPosition
}
于 2015-11-27T16:59:47.583 に答える
23

便利機能も使える

[CATransaction setDisableActions:YES] 

同じように。

注: 発生する可能性のある落とし穴を理解するために、Yogev Shelly によるコメントを必ずお読みください。

于 2011-09-13T23:20:26.660 に答える
15

他の人が提案したように、使用できますCATransaction
この問題が発生するのは、CALayer のデフォルトの暗黙的なアニメーション期間が 0.25 秒であるためです。

したがって、より簡単な (私の意見では) の代替手段は、 の値でsetDisableActions使用することです。setAnimationDuration0.0

[CATransaction begin];
[CATransaction setAnimationDuration:0.0];
layer.position = CGPointMake(x, y);
[CATransaction commit];
于 2013-05-05T04:04:42.863 に答える