Почему -animateWithDuration: задержка: параметры: анимация: завершение: блокирование интерфейса? - PullRequest
7 голосов
/ 01 апреля 2012

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

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

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

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

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

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

Ответы [ 2 ]

19 голосов
/ 01 апреля 2012

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

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

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

5 голосов
/ 01 апреля 2012

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

Ссылка на класс UIView

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

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

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

...