버튼을 누르고 있으면 블록이 애니메이션으로 나타나고 해제하면 애니메이션이 원래 위치로 되돌아갑니다.하지만 애니메이션을 얻을 수 없습니다. 무엇이든 상관없이 애니메이션 블록의 현재 위치.애니메이션 도중 CALayer의 현재 위치를 가져올 수 없습니다.
-(IBAction)moveDown:(id)sender{
CGRect position = [[container.layer presentationLayer] frame];
[movePath moveToPoint:CGPointMake(container.frame.origin.x, position.y)];
[movePath addLineToPoint:CGPointMake(container.frame.origin.x, 310)];
CAKeyframeAnimation *moveAnim = [CAKeyframeAnimation animationWithKeyPath:@"position"];
moveAnim.path = movePath.CGPath;
moveAnim.removedOnCompletion = NO;
moveAnim.fillMode = kCAFillModeForwards;
CAAnimationGroup *animGroup = [CAAnimationGroup animation];
animGroup.animations = [NSArray arrayWithObjects:moveAnim, nil];
animGroup.duration = 2.0;
animGroup.removedOnCompletion = NO;
animGroup.fillMode = kCAFillModeForwards;
[container.layer addAnimation:animGroup forKey:nil];
}
-(IBAction)moveUp:(id)sender{
CGRect position = [[container.layer presentationLayer] frame];
UIBezierPath *movePath = [UIBezierPath bezierPath];
[movePath moveToPoint:CGPointMake(container.frame.origin.x, position.y)];
[movePath addLineToPoint:CGPointMake(container.frame.origin.x, 115)];
CAKeyframeAnimation *moveAnim = [CAKeyframeAnimation animationWithKeyPath:@"position"];
moveAnim.path = movePath.CGPath;
moveAnim.removedOnCompletion = NO;
moveAnim.fillMode = kCAFillModeForwards;
CAAnimationGroup *animGroup = [CAAnimationGroup animation];
animGroup.animations = [NSArray arrayWithObjects:moveAnim, nil];
animGroup.duration = 2.0;
animGroup.removedOnCompletion = NO;
animGroup.fillMode = kCAFillModeForwards;
[container.layer addAnimation:animGroup forKey:nil];
}
그러나 라인
CGRect position = [[container.layer presentationLayer] frame];
는 대상 위치가 아닌 현재의 위치를 반환 : 여기 내 코드입니다. 기본적으로 버튼을 놓으면 움직이는 컨테이너의 현재 위치를 기본적으로 제공해야하므로 다음 애니메이션을 수행 할 수 있습니다. 내가 지금 가지고있는 것은 효과가 없습니다.
대단히 감사합니다. 나는 애니메이션을 처음 사용하기 때문에 톤을 도왔다. 나는 그것을 발사 할 것이다! – Matt
WWDC 2011의 [Session 421 - Core Animation Essentials] (https://developer.apple.com/videos/wwdc/2011/?id=421) 비디오를 시청하십시오. 단지 1 시간이며 ** 매우 **합니다 유익한. –
굉장한 답변 +1! – Till