2012-04-01 2 views
7

Я всегда думал, что Core Animation выполняет анимацию на фоне. Когда я запускаю этот код, мои взаимодействия UI не блокируются до анимации отделки:Почему -animateWithDuration: delay: options: animation: завершение: блокирование пользовательского интерфейса?

[UIView animateWithDuration:4.5 
         delay:0 
        options:options 
       animations:^{ 
        oldView.alpha = 0; 
        newView.alpha = 1; 
       } 
       completion:^(BOOL finished) { 
        if (finished) { 
         [oldView removeFromSuperview]; 
        } 
       }]; 

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

Интерфейс пользовательского интерфейса начинает блокироваться, когда начинается анимация, и заканчивается для блокировки при завершении анимации.

Есть ли способ запустить анимацию UIView одновременно, так что взаимодействия пользовательского интерфейса не блокируются?

EDIT уточнить: Я знаю, что пользовательский интерфейс блокируется, потому что я не могу взаимодействовать с любой управления на экране, почему эта анимация работает. Эти другие элементы управления не связаны с тем, что анимируется и не находятся в одной ветви иерархии представлений. Весь пользовательский интерфейс блокируется при запуске этой анимации. Когда я устанавливаю его на 10 секунд, пользовательский интерфейс блокируется в течение 10 секунд во время анимации. Проверено с прошивкой 4.2 на iPhone 4.

+0

Откуда вы знаете, что это заблокировано? Если в представлении нет альфа-нулевой точки, все представления, стоящие за ней, отключены от взаимодействия. – CodaFi

+0

Обновлен вопрос с разъяснениями. –

ответ

18

Глядя на документации для UIView, я нашел в разделе обсуждения по этому методу:

Во время анимации, взаимодействие с пользователем временно отключен для мнения анимируемых. (До iOS 5 пользовательские взаимодействия отключены для всего приложения.) Если вы хотите, чтобы пользователи могли взаимодействовать с представлениями, включите константу UIViewAnimationOptionAllowUserInteraction в параметр options.

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

5

документация является вашим другом :)

UIView Class Reference

Под animateWithDuration: анимация:

«Во время анимации, взаимодействия с пользователем временно отключены для (до iOS 5, пользовательские взаимодействия отключены для всего приложения.) «

И, конечно, для всех v под анимированным представлением.

+1

Как я мог пропустить это !!! Святая корова. Мне нужны большие очки. Благодарю. –

+0

попробуйте метод jmstone с 'UIViewAnimationOptionAllowUserInteraction' - надеюсь, что он делает трюк :) –

+1

он полностью сделал трюк. Спас мой год. Отлично. –

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