UIView 애니메이션 블록 안에 현재 애니메이션의 지속 시간을 가져 오는 방법이 있습니까?현재 애니메이션 블록의 애니메이션 지속 시간을 확인하십시오.
[UIView animateWithDuration:1.0 animations:^{
// float duration = ?
}];
UIView 애니메이션 블록 안에 현재 애니메이션의 지속 시간을 가져 오는 방법이 있습니까?현재 애니메이션 블록의 애니메이션 지속 시간을 확인하십시오.
[UIView animateWithDuration:1.0 animations:^{
// float duration = ?
}];
블록을 사용하고 있으므로 변수를 캡처하지 않는 이유는 무엇입니까?
CGFloat duration = 1.0;
[UIView animateWithDuration:duration animations:^{
CGFloat theDuration = duration;
}];
동의 함. 우리는 이미 지속 시간을 지났고 그 이유는 우리가 다른 방법을 찾아야하는 이유입니다. – Mrug
[CATransaction animationDuration]
는 쉽게만큼 현재 애니메이션을 얻을 수 있습니다
불행하게도 작동하지 않습니다. UIView 애니메이션 블록은 분명히 CATransaction에서 직접 작동하지 않습니다. –
찾고있는 것입니다. 예를 들어, CATransaction
설정 :
CAAnimation *animation = [self.layer animationForKey:self.layer.animationKeys.firstObject];
[CATransaction begin];
[CATransaction setAnimationDuration:animation.duration];
[CATransaction setAnimationTimingFunction:animation.timingFunction];
// CALayer animation here
[CATransaction commit];
TL; DR : -animationForKey하지의 CALayer -actionForKey :, 사용
@Dimitri Bouniol의 대답은 나를 위해 작동하지 않았다을 한는에서 호출 할 때 애니메이션 블록 안에 영향을받는 설정자. UIView의 애니메이션 시스템은 실제 애니메이션을 시작하기 전에 상태를 설정하고 (실제 애니메이션을 시작하기 전에 setter를 호출하기 때문에) 이해해야합니다. 레이어에서 비슷한 -actionForKey : 메서드를 호출했지만 나에게 효과적이었습니다. 반환 된 작업에는 적절한 기간이 설정되어 있으며 답변에 그대로 사용할 수 있습니다.
CAAnimation *animation = (CAAnimation*)
[self.layer [email protected]"position"]; // or property of interest
[CATransaction begin];
[CATransaction setAnimationDuration:animation.duration];
[CATransaction setAnimationTimingFunction:animation.timingFunction];
// CALayer animation here
[CATransaction commit];
나는 애니메이션의 길이가 1.0이 아니겠습니까? –
예,하지만 기간을 알아야하는 블록 내부의 구성 요소를 사용하고 있으며 기간을 변수로 전달하지 않으려합니다. – adamsiton
좋은 질문입니다. +1 미안하지만 도움이되지 않습니다. –