Вид не анимируется при удалении из superView - PullRequest
1 голос
/ 23 февраля 2010

Я пытаюсь удалить вид из его суперпредставления после анимации за кадром. Но, кажется, когда я добавляю вызов 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];
}

1 Ответ

0 голосов
/ 24 февраля 2010

Хорошо, в конце концов я обнаружил, что заставляет анимацию не запускаться. Наблюдение за pickerView и всякий раз, когда переменная экземпляра изменяет значение, родительское представление получает уведомление и запускает анимацию, чтобы сдвинуть представление выбора за пределы экрана. Но поскольку parentView наблюдал как старое, так и новое значение, он получал уведомления два раза: сначала для старого, а затем для нового измененного значения. Таким образом, parentView также запускал анимацию два раза сразу друг за другом, по-видимому, это приводило к тому, что анимация вообще не запускалась.

исправлено так, просто закомментировав первую строку, которая отправляла старое значение своему наблюдателю каждый раз, когда ValueSelectDone изменял значение:

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

valueSelectDone = flag;

[self didChangeValueForKey:@"valueSelectDone"]; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...