Фоновый режим работы
Как видите, в данный класс мы включили такую же регистрацию методов, как и прежде, только для того, чтобы вам было понятнее, где именно это происходит на консоли Xcode. Первый из этих методов просто сбрасывает признак анимации в переменной animate, а второй устанавливает этот признак, чтобы возобновить анимацию. Для того чтобы первый из этих методов начал действовать, нам придется ввести еще немного кода, где проверяется состояние признака анимации в переменной animate, которая продолжается только в том случае, если данный признак установлен.
Этот код мы ввели только в блок завершения метода rotateLabelUp, чтобы анимация останавливалась лишь после того, как текст надписи метки возвратится в исходное положение.
Еще раз скомпилируйте и запустите данное приложение на выполнение, чтобы посмотреть, что же произойдет. Скорее всего, вы увидите нечто мерцающее и маловразумительное, поскольку метка быстро переворачивается, даже не вращаясь! Причина такого поведения проста, хоте и не совсем очевидна (впрочем, намек на нее уже делался ранее). Напомним, что анимация раньше начиналась в конце метода viewDidLoad при вызове метода rotateLabelDown, а теперь метод rotateLabelDown вызывается и в методе applicationDidBscomeActive. Напомним также, что метод applicationDidBecomeActive будет вызываться не только при переходе из неактивного состояния в активное, но и в первую очередь при запуске приложения на выполнение и его переходе в активное состояние) Это означает, что мы начинаем анимацию дважды, тогда как каркас Core Animation, невидимому, неспособен справляться с несколькими видами анимации, пытаясь одновременно изменить те же самые атрибуты. В качестве выхода из данного положения достаточно удалить строку кода, введенную ранее в конце метода viewDidLoad, как показано ниже.
Вновь скомпилируйте и запустите данное приложение на выполнение, чтобы убедиться в правильности воспроизведения анимации метки. Опять отправьте сообщение SMS на свой iPhone. На этот раз при появлении системного сообщения вы должны увидеть, что анимация на заднем плане останавливается, как только текст метки возвращается в исходное положение. Постучите пальцем по кнопке Close, и анимация метки возобновится.
Теперь вы знаете, что следует делать в простом случае перехода из активного в неактивное состояние и обратно. Однако более сложная и, вероятно, важная задача возникает при переходе в фоновый режим работы приложения и обратно в приоритетный.
- Дата: 7-01-2015, 12:40