나는 오프 스크린 애니메이션을 적용한 후에 슈퍼 뷰에서 뷰를 제거하려고합니다. 그러나 애니메이션이 끝나야 할 때 removeFromSuperview
호출을 추가하면보기가 전혀 움직이지 않고 화면에서 즉시 사라집니다.
[[self pickerView] removeFromSuperview];
을 아래 메소드에 추가 할 때 애니메이션이없는 이유는 무엇입니까?슈퍼 뷰에서 뷰를 제거하면 뷰가 애니메이션으로 표시되지 않습니다.
- (void) slidePickerOutView
{
[UIView beginAnimations:@"slidePickerOutView" context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.2];
[UIView setAnimationDidStopSelector:@selector(slidePickerOutViewEnded:finished:context:)];
CGRect r = CGRectMake(0, 480, 320, 244);
[[self pickerView] setFrame:r];
[UIView commitAnimations];
}
- (void) slidePickerOutViewEnded:(NSString *)id finished:(BOOL) finished context:(void *) context
{
//Stop observing the 'Done' button
[[self pickerView] removeObserver:self forKeyPath:@"valueSelectDone"];
[[self pickerView] removeObserver:self forKeyPath:@"selectedValue"];
[[self pickerView] removeFromSuperview];
[self setPickerView:nil];
}
은 당신이 말하는 당신은 "removeFromSuperview"으로 라인을 주석 경우 그러면 애니메이션이 작동합니까? 그것은 매우 이상 할 것입니다. 시도해 보셨습니까? 더 긴 animationDuration을 설정하거나 대리자 메서드에서 "finished"값을 확인 하시겠습니까? 이들 중 어느 것도 실제로 당신이 묘사하는 문제를 야기하지는 않지만 더 많은 정보를 얻을 수 있습니다. – Felixyz
실제로 'removeFromSuperview'행을 주석 처리하면 애니메이션이 제대로 작동합니다. 애니메이션이 시작되기 전에보기가보기에서 즉시 제거 된 것처럼 보입니다. 애니메이션보기 KVO, 따라서 removeObserver 라인을 통해 관찰되고 있지만, 그 라인 문제로 중요하다고 생각하지 않습니다. – Oysio