Вопрос

Я разрабатываю свое первое приложение для 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?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top