Улучшение плавности простых анимаций
Вопрос
Я разрабатываю свое первое приложение для 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?Будет ли кэширование представления за панелью настроек перед анимацией каким-то полезным?
Для меня это новая территория, и я знаю, что должны быть способы оптимизации, которые считаются хорошей практикой.Спасибо за ваше время!
Решение
Не имеет значения, используете ли вы Core Animation «напрямую» или анимируете свойство center:это прерывисто, потому что графическому оборудованию приходится объединять прозрачное изображение с фоном в каждом кадре анимации.Вы сами сказали, что использование полностью непрозрачного PNG делает анимацию плавной.
Попробуйте запустить приложение в разделе «Инструменты». В инструменте «Базовая анимация» есть несколько флажков, которые выделяют составные области в реальном времени и могут дать вам несколько подсказок о том, как переделать рисунок.
Если прозрачными должны быть только верхние 30 пикселей, возможно, стоит разделить фон на два вида: одну полосу в 30 пикселей вверху (прозрачную) и остальную часть (непрозрачную).Если он компонует весь вид в каждом кадре, этого изменения может быть достаточно, чтобы сообщить ему, что нужно компоновать только 30 пикселей вверху.
Другие советы
Раньше у меня возникали проблемы с анимацией кадра. Попробуйте вместо этого анимировать свойство center.
И зачем вам нужна прозрачность фонового изображения?Разве вы не сможете просто использовать это изображение в качестве фона содержащего его представления и устранить необходимость в UIImageView?