IOS bringSubviewToFront блокирует анимацию UIView

У меня есть ViewController с кучей UIImageViews, которые мне нужно отправить на передний план и оживить к центру представления.

Я попытался вызвать метод bringSubviewToFront перед тем, как нарисовать анимацию UIView, и, похоже, что это происходит, так это то, что представление отправляется в верхнюю часть стека, но анимация не выполняется (даже если журнал обработчика завершения показывает, как будто анимация DID).

Во второй раз я нажимаю кнопку, которая запускает анимацию (учитывая, что на этот раз представление уже находится в верхнем индексе, анимация происходит так, как должна)

Вот мой код:

- (void)beginAnimationWithSelectedCountry:(UIView *)countryView
{
    if (!countryView) return;

    [self.view bringSubviewToFront:countryView];
    [UIView animateWithDuration:0.6f delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
        countryView.center = CGPointMake(self.view.center.x, self.view.center.y);
    } completion:^(BOOL finished) {
        NSLog(@"Animation complete");
    }];
}

Любые мысли? Я был в этом часами > . <

Спасибо

EDIT: Если комментировать outSubviewToFront, код безупречно работает с анимацией (кроме представления под некоторыми другими представлениями), поэтому я уверен, что проблема связана с линией:

[self.view bringSubviewToFront:countryView];

Вот скриншот того, что у меня есть в настоящее время, которое может пролить свет на проблему: http://d.pr/i/PKoa

Ответ 1

Вызов:

[self.view layoutSubviews];

Сразу после:

[self.view bringSubviewToFront:countryView];

Это решит вашу проблему.

Ответ 2

Когда вы вызываете

[self.view bringSubviewToFront:countryView];

вы запускаете новое событие макета представления. Вы можете проверить это, установив точку останова в 'viewDidLayoutSubviews' на вашем контроллере.

У меня была аналогичная проблема: мой собственный код в методе 'viewDidLayoutSubviews' отменил мою анимацию, сбросив фреймы объектов, которые я пытался оживить.

Ответ 3

Попробуйте добавить UIViewAnimationOptionAllowAnimatedContent к параметрам. Я почти уверен, что это случай этого варианта, но играйте с другими вариантами, если нет. Вы также можете попробовать планировать блок для выполнения своей анимации на следующей runloop, которая является благословением, которое я нашел, с анимацией.