Улучшение плавности простых анимаций - PullRequest
4 голосов
/ 02 марта 2009

Я занимаюсь разработкой своего первого приложения для iPhone, и оно прошло через "механизм", и теперь я заканчиваю детали соответствия и отделки.

У меня есть вид, который скользит снизу экрана для моей панели настроек. Само представление имеет непрозрачность 0 и имеет представление UIImageView внутри него с PNG, создающим фактический фон для представления позади элементов управления. Я использую встроенные вызовы анимации для UIView, как в;

[self.view addSubview:settingsViewController.view];

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

frame.origin.y = 200.0;
settingsViewController.view.frame = frame;

[UIView commitAnimations];

К сожалению, анимация на устройстве прерывистая. PNG, который я использую в качестве фона, прозрачен только в самых верхних 30 пикселях по ширине. Если я использую PNG без прозрачности, анимация плавная.

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

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

Возможно, мне нужно использовать Core Animation напрямую? Будет ли выгодным кэширование представления за панелью настроек перед анимацией?

Это новая территория для меня, и я знаю, что должны быть способы оптимизации, которые считаются хорошей практикой. Спасибо за ваше время!

Ответы [ 2 ]

2 голосов
/ 03 марта 2009

Не имеет значения, используете ли вы Core Animation «напрямую» или анимируете свойство center: оно нестабильно, потому что графическое оборудование должно объединять прозрачное изображение с фоном в каждом кадре анимации. Вы сами сказали, что использование полностью непрозрачного PNG делает анимацию плавной.

Попробуйте запустить приложение в разделе «Инструменты», в инструменте Core Animation есть несколько флажков, которые выделяют составные области в режиме реального времени, и это может дать вам несколько советов о том, как заново сделать чертеж.

Если только верхние 30 пикселей должны быть прозрачными, возможно, стоит разделить фон на два вида: одну 30-пиксельную полосу сверху (прозрачная) и остальные (непрозрачные). Если он объединяет весь вид в каждом кадре, этого изменения может быть достаточно, чтобы он знал, что ему нужно только объединить только 30 пикселей вверху.

1 голос
/ 02 марта 2009

В прошлом у меня были некоторые проблемы с анимацией фрейма, попробуйте вместо этого анимировать свойство center.

Кроме того, для чего вам нужна прозрачность в фоновом изображении? Разве вы не сможете просто использовать это изображение в качестве фона содержащего представления и устранить необходимость в UIImageView?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...