iphone objective - CABasicAnimation을 일시 중지 할 수있는 방법이 있습니까?




3 Answers

최근에 나온 Apple의 기술 노트 QA1673 에서는 레이어의 애니메이션을 일시 중지 / 다시 시작하는 방법을 설명합니다.

애니메이션을 일시 중지했다가 다시 시작하는 방법은 다음과 같습니다.

-(void)pauseLayer:(CALayer*)layer
{
    CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
    layer.speed = 0.0;
    layer.timeOffset = pausedTime;
}

-(void)resumeLayer:(CALayer*)layer
{
    CFTimeInterval pausedTime = [layer timeOffset];
    layer.speed = 1.0;
    layer.timeOffset = 0.0;
    layer.beginTime = 0.0;
    CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
    layer.beginTime = timeSincePause;
}

편집 : iOS 10에는 새로운 API 인 UIViewPropertyAnimator가 추가되었습니다. UIViewPropertyAnimator를 사용하면 애니메이션을 더 대화식으로 처리 할 수 ​​있습니다. 예를 들어 애니메이션을 일시 중지했다가 다시 시작하거나 특정 진행률 값을 '찾기'쉽습니다.

ios animationwithkeypath

iPhone의 기본 회전 애니메이션이 있습니다. 뷰의 위치가 유지되도록 애니메이션을 "일시 중지"할 수있는 방법이 있습니까? 이 작업을 수행하는 한 가지 방법은 애니메이션에서 "제거"를 호출하는 대신 "완료"애니메이션을 발생시키는 것입니다. 어떻게 수행합니까?

CABasicAnimation* rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2];
rotationAnimation.duration = 100;
rotationAnimation.cumulative = YES;
rotationAnimation.repeatCount = HUGE_VALF;
rotationAnimation.removedOnCompletion = NO;
rotationAnimation.fillMode = kCAFillModeForwards;
[myView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];



presentationLayer 의 상태와 일치하도록보기 레이어의 현재 상태를 설정 한 다음 애니메이션을 제거합니다.

CALayer *pLayer = [myView.layer presentationLayer];
myView.layer.transform = pLayer.transform;
[myView.layer removeAnimationForKey:@"rotationAnimation"];



가장 간단한 것

self.viewBall.layer.position = self.viewBall.layer.presentationLayer().position



Related