2013-09-18 4 views
3

У меня есть следующий код, чтобы анимация некоторого представления в моем приложении:IOS 7 анимации блок не называется

void (^animate)() = ^() { 
    CGRect leftFrame = centerFrame; 
    leftFrame.origin.x -= centerFrame.size.width; 
    newViewController.view.frame = centerFrame; 
    oldViewController.view.frame = leftFrame; 
}; 

if (animated) { 
    [UIView animateWithDuration:0.3f 
          delay:0.0f 
         options:nil 
        animations:animate 
        completion:^(BOOL finished){}]; 
} else { 
    animate(); 
} 

Это правильно оживляющий на IOS 6, однако на прошивке 7 нет анимации. Как ни странно, код внутри блока вызывает вызов, и представление обновляется, просто без учета продолжительности анимации.

Есть ли причина, почему этот блок не вызван?

+0

Он работает на меня как на устройстве, так и на симуляторе - как выглядит ваш анимационный блок? –

+0

Это так странно. Около 1/3 времени, когда я запускаю приложение, он работает. В остальное время он не выполняет блок с анимацией. – runmad

+0

@AshFurrow Я обновил пример кода. Это определенно не только этот блок, несколько мест он не выполняет анимации из блоков, которые были определены. И это согласовано во всем приложении: либо он делает анимирование всего, что определено в блоках, либо нет. – runmad

ответ

1

У меня была такая же проблема. Мне показалось, что мне нужно ссылаться на другую часть UITableViewCell, которую я анимировал, чем с iOS 6. Это может быть аналогичная проблема для вас.

2

У меня была такая же проблема: блок анимации, который работает как шарм в iOS6, выполняется без анимации в iOS7.

Не уверен, что это может вам помочь, но я переместил анимационный триггер на viewDidAppear: и теперь его анимируют.

Так что для вас это может выглядеть следующим образом:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    animate(); 
    // do your other stuff here... 
} 
+0

Работал для меня. Мой код был ранее в viewDidLoad, в UIViewController, который был нажат на экран. – user339946

+0

Но я не делаю анимации в 'viewDidLoad:' это родительский контроллер представления, который обрабатывает анимации для представлений контроллера детского представления. – runmad

+0

тоже работал для меня – Sanandrea

1

Это, вероятно, autolayout в прошивке 7, который дает вам неприятность. У меня была такая же проблема. Вместо анимации кадра вам необходимо анимировать ограничения.

См. Are NSLayoutConstraints animatable?, как это сделать.

+0

Я не использую автомат. – runmad

0

попытаться использовать:

[UIView setAnimationsEnabled: ДА];

2

Ваша анимация может столкнуться с другим конкурирующим блоком анимации, возможно, одним вызовом UIKit во время перехода. Вместо передачи nil в опции анимации, используйте:

UIViewAnimationOptionOverrideInheritedOptions | UIViewAnimationOptionBeginFromCurrentState

и посмотреть, если это помогает.

2

У меня была точно такая же регрессия между iOS6 и iOS7.

В моем случае это произошло из-за того, что animateWithDuration: был вызван до появления UIView.

В iOS7 кажется, что вы не должны звонить animateWithDuration: до того, как -(void)viewDidAppear:(BOOL)animated вызывается на контроле UIViewController.

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