나는 클릭 할 때 원래 위치에서 설정 위치로 움직이는 여러 개의 버튼을 가지고 있습니다. 객체가 움직이면 슈퍼 뷰에서 제거하고 싶습니다. 나는 (self.cellImageViewGlobal입니다) 버튼을 클릭하면CAAnimation의 "animationDidStop :"은 한 번만 호출합니다.
- (void) animationDidStop:(SKBounceAnimation *)animation finished:(BOOL)flag {
[self.cellImageViewGlobal removeFromSuperview];
NSLog(@"Animation didStop called");
}
그래서, 그것은 애니메이션 것, 다음 애니메이션 후, 그것이 수퍼에서 제거됩니다
여기 animationDidStop 내 코드입니다. 계속 진행되는 클릭 또는 탭에서 self.cellImageViewGlobal이 수퍼 뷰에서 제거되지 않습니다. 이 기능은 내 로그를 통해서만 호출된다는 사실을 알게되었습니다. 나는 또한 내 애니메이션 기능이 대리자를 설정
- (void)viewDidLoad
{
[super viewDidLoad];
self.animateProduct.delegate = self; // animateProduct is the last animation being called in the CAAanimationGroup array
}
:
는 내가있는 viewDidLoad의 대리인으로 내 자신을 설정합니다. 코드에 문제가있는 것 같지 않습니다. 버튼을 클릭 할 때마다 애니메이션 후에 "animationDidStop"함수를 호출한다고 가정합니다.그건 그렇고, 여러 가지 방법이나 해결책을 시도했습니다. 먼저 블록을 사용합니다. 블록의 애니메이션이 완료되면 다음을 수행합니다.
completion:^(BOOL finished){
[self.cellImageViewGlobal removeFromSuperview];
}
그러나이 코드는 시뮬레이터에서 애니메이션이 완료 될 때까지 기다리지 않습니다. Paul Hegarty의 강의에서 애니메이션 코드에서 코드 실행이 끝났음을 알았지 만 시뮬레이터에서 투영 된 애니메이션 자체가 끝날 때까지 기다리지 않습니다.
희망을 보내 주시면 감사하겠습니다. 감사!
프로젝트에서 ARC를 사용했습니다. 내 블록에서 애니메이션이 완료된 후 알파를 사용하여 문제를 해결할 수있었습니다. 애니메이션은 여전히 나타나지만 숨겨져 있습니다. 이것은 단지 숨겨져 있지만 내 문제를 해결했습니다. didAnimationStop 메서드를 사용할 때 해결할 수없는 것 같습니다. 그건 그렇고 행운을 빌어 요. 해결책을 주셔서 감사합니다. 아마 다음에 그것을 사용할 수 있습니다! – angelmacaraig
완료 :^(BOOL 완료) { cellImageView.alpha = 0.0000000000000000000001; [cellImageView removeFromSuperview]; }] // 여기 내 코드가 있습니다. – angelmacaraig