簡體   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