当前位置:  开发笔记 > IOS > 正文

你如何立即移动CALayer(没有动画)

如何解决《你如何立即移动CALayer(没有动画)》经验,为你挑选了4个好方法。

我正在尝试在iOS应用中拖动CALayer.

一旦我改变它的位置属性,它就会尝试动画到新位置,并在整个地方闪烁:

 layer.position = CGPointMake(x, y)

如何立即移动CALayers?我似乎无法理解Core Animation API.



1> Ben Gottlieb..:

您想在以下内容中打包您的电话:

[CATransaction begin]; 
[CATransaction setValue: (id) kCFBooleanTrue forKey: kCATransactionDisableActions];
layer.position = CGPointMake(x, y);
[CATransaction commit];


是的,6年半以后.仍然有帮助.:d
7年零7个月,17天后:仍然有帮助.谢谢!

2> CryingHippo..:

Swift 3扩展:

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

用法:

CALayer.performWithoutAnimation(){
    someLayer.position = newPosition
}



3> Biclops..:

您还可以使用便利功能

[CATransaction setDisableActions:YES] 

同样.

注意:请务必阅读Yogev Shelly的评论,以了解可能发生的任何问题.


重要的是,这会影响所有CALayer,因此您希望在完成后重新启用操作,即[CATransaction setDisableActions:YES]

4> So Over It..:

正如其他人所建议的那样,你可以使用CATransaction.
问题出现是因为CALayer的默认隐式动画持续时间为0.25秒.

因此,更容易(在我看来)替代方法setDisableActions是使用setAnimationDuration值为0.0.

[CATransaction begin];
[CATransaction setAnimationDuration:0.0];
layer.position = CGPointMake(x, y);
[CATransaction commit];

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有