2014-11-07 3 views
0

Прежде чем дискредитировать этот вопрос, как просил раньше, пожалуйста, посмотрите на детали:Objective-C-animateWithDuration Завершение блок называется ранние

У меня есть простая анимация сужая кадр вида от его нормального размера к нулевой кадр в середине надзора. В моем блоке завершения я удаляю супервизор из своего супервизора и удаляю контроллер представления из родительского контроллера представления. Блок завершения вызывается немедленно. Кроме того, параметр BOOLfinished для блока завершения равен YES. Поэтому, когда я проверяю, завершена ли анимация, он говорит, что это даже когда это не так, и представление преждевременно удалено. Вот мой код:

- (void)closeWindow { 

    [UIView animateWithDuration:0.5 
       animations:^{ 
        contentView.frame = [self getSchoolSetUpStartingFrame]; 

       } completion:^(BOOL finished){ 

        if(finished) { 
         [self.view removeFromSuperview]; 
         [self removeFromParentViewController]; 
        } 

       }]; 
} 


- (CGRect)getSchoolSetUpStartingFrame { 
    CGRect startingFrame; 
    CGRect myFrame = self.view.frame; 

    float xPos = (myFrame.origin.x + (myFrame.size.width/2)); 
    float yPos = (myFrame.origin.y + (myFrame.size.height/2)); 

    startingFrame = CGRectMake(xPos, yPos, 0, 0); 

    return startingFrame; 
} 

Есть ли что-нибудь еще, что может быть связано с этой проблемой, что я до сих пор не считается? Я ценю всю помощь.

+0

Вы должны объяснить ваши настройки контроллера. Является ли этот код в контроллере дочернего представления? Что такое contentView? – rdelmar

+0

Вы используете авто-макет? – sha

ответ

0

Я бы попробовал изменить продолжительность анимации до .5f и убедиться, что contentView не равен нулю во время блока анимации.

Кроме того, было бы легче достичь этой анимации с помощью преобразования

animations:^{ 
       contentView.transform = CGAffineTransformMakeScale(.1f, .1f); 

      } 
Смежные вопросы