繁体   English   中英

从SuperView中删除视图后,该视图不具有动画效果

[英]View is not animated when it's removed from superView

我尝试在屏幕外动画后从其超级视图中删除视图。 但是似乎当动画结束时我添加了removeFromSuperview调用时,视图根本没有动画,而是立即从屏幕上消失了。
那么,为什么当我添加[[self pickerView] 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];
}

好的,我最终找到了导致动画无法开始的原因。 在观察pickerView时,只要一个实例变量的值发生变化,就会通知父视图并启动动画以将pickerview滑出屏幕。 但是由于parentView同时观察了旧值和新值,因此它得到了两次通知,首先是针对旧值,然后是针对新的更改值。 因此,parentView也在紧接彼此之后两次启动了动画,这显然导致了动画完全无法开始。

像这样固定,只需注释掉第一行,该行在每次ValueSelectDone更改值时都将旧值发送给其观察者:

//[self willChangeValueForKey:@"valueSelectDone"];

valueSelectDone = flag;

[self didChangeValueForKey:@"valueSelectDone"]; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM