Mel*_*Mel 74 cocoa-touch core-animation objective-c calayer ios
我正在尝试在iOS应用中拖动CALayer.
一旦我改变它的位置属性,它就会尝试动画到新位置,并在整个地方闪烁:
layer.position = CGPointMake(x, y)
Run Code Online (Sandbox Code Playgroud)
如何立即移动CALayers?我似乎无法理解Core Animation API.
Ben*_*ieb 161
您想在以下内容中打包您的电话:
[CATransaction begin];
[CATransaction setValue: (id) kCFBooleanTrue forKey: kCATransactionDisableActions];
layer.position = CGPointMake(x, y);
[CATransaction commit];
Run Code Online (Sandbox Code Playgroud)
Cry*_*ppo 27
Swift 3扩展:
extension CALayer {
class func performWithoutAnimation(_ actionsWithoutAnimation: () -> Void){
CATransaction.begin()
CATransaction.setValue(true, forKey: kCATransactionDisableActions)
actionsWithoutAnimation()
CATransaction.commit()
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
CALayer.performWithoutAnimation(){
someLayer.position = newPosition
}
Run Code Online (Sandbox Code Playgroud)
Bic*_*ops 20
您还可以使用便利功能
[CATransaction setDisableActions:YES]
Run Code Online (Sandbox Code Playgroud)
同样.
注意:请务必阅读Yogev Shelly的评论,以了解可能发生的任何问题.
So *_* It 14
正如其他人所建议的那样,你可以使用CATransaction
.
问题出现是因为CALayer的默认隐式动画持续时间为0.25秒.
因此,更容易(在我看来)替代方法setDisableActions
是使用setAnimationDuration
值为0.0
.
[CATransaction begin];
[CATransaction setAnimationDuration:0.0];
layer.position = CGPointMake(x, y);
[CATransaction commit];
Run Code Online (Sandbox Code Playgroud)
结合之前针对 Swift 4 的答案,可以清楚地使动画持续时间明确......
extension CALayer
{
class func perform(withDuration duration: Double, actions: () -> Void) {
CATransaction.begin()
CATransaction.setAnimationDuration(duration)
actions()
CATransaction.commit()
}
}
Run Code Online (Sandbox Code Playgroud)
用法...
CALayer.perform(withDuration: 0.0) {
aLayer.frame = aFrame
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19216 次 |
最近记录: |