문제

드래그하려고합니다 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
        }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top