Анимация UIView на основе блоков переходит в турбо, когда вид не виден - PullRequest
1 голос
/ 06 августа 2010

Я использую новые блочно-ориентированные методы анимации UIView для создания слайд-шоу со скользящим и исчезающим эффектом, вдохновленного тем, которое отображается на домашнем экране приложения Flickr. Все работает очень хорошо, и я больше не боюсь блоков.

Я использую это на странице моего приложения, которая находится внутри элемента управления UINavigationController. Все хорошо, и, насколько я могу судить, он работает правильно.

Дело в том, что я оставил там одну строку вывода NSLog, и когда мое представление, в котором размещено мое слайд-шоу, не является контроллером вида сверху в стеке, эта присоска выдает только тонны строк вывода NSLog. Эта штука запускается один раз каждые 8,5 секунд (когда загружается новый слайд) при нормальных обстоятельствах, но когда она не видна, это примерно 16 или около того в секунду. Он снова становится нормальным, когда его viewcontroller возвращается на поверхность, как будто ничего не произошло. Если бы я не разговаривал сам с собой на консоли, я бы никогда не узнал, что это происходит.

Моя анимация в большом цикле. Я действительно не против, если они отрываются подо мной, а я не обращаю на это внимания. Ты думаешь это проблема? Я обеспокоен тем, что он потребляет ненужные циклы, но это, похоже, не оказывает реального влияния даже на мое тестирование 3G. Мысли? Есть ли какой-нибудь универсальный способ приостановить пользовательскую анимацию UIView?

Ответы [ 3 ]

0 голосов
/ 09 августа 2010

Я решил эту проблему, добавив методы -(void)pause и -(void)resume в мой подкласс анимации UIView.В режиме паузы он устанавливает флаг, который прерывает цикл анимации и сохраняет некоторую информацию о том, где он находится в процессе.При возобновлении он отменяет этот флаг, сбрасывает состояние вещей, которые он спрятал, и возвращается в цикл методов анимации.Работа!

0 голосов
/ 18 августа 2010

Мне бы очень хотелось посмотреть, как работают ваши вещи. У меня та же проблема с другим спином.

Моя игра использует UIViews для перемещения объектов по экрану, и я решил проблему приостановки давным-давно (например, 6 месяцев назад). В iOS 4 я подумал, что это будет простой вопрос - просто поставить игру на паузу, когда приложение будет переведено в фоновый режим (в основном вызывая pause из applicationWillResignActive в моем делегате), и это сработало нормально. Но теперь, когда я возобновляю приложение, UIAnimations просто возобновляется без остановки приложения, поэтому игра продолжается, пока пауза ... огромная проблема.

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

0 голосов
/ 07 августа 2010

Мне было бы интересно узнать, каков ваш показатель для определения того, что на вашем устройстве нет «реального влияния».Не исключено, что на производительность feel это не повлияет.Я думаю, что это законно, но меня, как и вас, беспокоит, почему это происходит.Вы выполнили какое-либо профилирование, чтобы увидеть, где находятся горячие точки вашего процессора?Вероятно, было бы разумно сделать это.

Возможно, есть лучший способ сделать то, что вы делаете.Вы говорите, что ваши "анимации находятся на большой петле".Я не уверен, что вы подразумеваете под этим, но в целом вам вообще не нужно использовать цикл, кроме как добавить анимацию в массив слоев или что-то в этом роде.Можете ли вы уточнить, что вы имеете в виду?Если вы обновите свой ответ с помощью своего анимационного кода, мы можем попытаться помочь вам выяснить, в чем может быть проблема.

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

С наилучшими пожеланиями.

...