Calayer를 즉시 이동하는 방법 (애니메이션없이)
-
03-07-2019 - |
문제
드래그하려고합니다 CALayer
iOS 앱에서.
위치 속성을 변경하자마자 새로운 위치에 애니메이션을 시도하고 모든 곳에서 깜박 거립니다.
layer.position = CGPointMake(x, y)
어떻게 움직일 수 있습니까? CALayers
곧? 핵심 애니메이션 API를 둘러 볼 수없는 것 같습니다.
해결책
당신은 다음에 전화를 마무리하고 싶습니다.
[CATransaction begin];
[CATransaction setValue: (id) kCFBooleanTrue forKey: kCATransactionDisableActions];
layer.position = CGPointMake(x, y);
[CATransaction commit];
다른 팁
Swift 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의 의견을 읽고 발생할 수있는 모든 gotchas를 이해하십시오.
다른 사람들이 제안한 것처럼 사용할 수 있습니다 CATransaction
.
Calayer의 기본 암시 적 애니메이션 지속 시간은 0.25 초로 문제가 발생합니다.
따라서 내 의견으로는 더 쉬운 대안 setDisableActions
사용하는 것입니다 setAnimationDuration
값이 있습니다 0.0
.
[CATransaction begin];
[CATransaction setAnimationDuration:0.0];
layer.position = CGPointMake(x, y);
[CATransaction commit];
Swift 4의 이전 답변을 결합하여 애니메이션 지속 시간을 명확하게 만듭니다 ...
extension CALayer
{
class func perform(withDuration duration: Double, actions: () -> Void) {
CATransaction.begin()
CATransaction.setAnimationDuration(duration)
actions()
CATransaction.commit()
}
}
용법...
CALayer.perform(withDuration: 0.0) {
aLayer.frame = aFrame
}
제휴하지 않습니다 StackOverflow