Приложение работает медленно из-за UIImageViews - PullRequest
3 голосов
/ 18 марта 2012

У меня есть три больших UIImageView, отображающих изображения в моем приложении для iPad (каждое размером почти с экран, и у них есть специальные эффекты, такие как вращение, тени и т. Д., Чтобы они выглядели как стопка новостей).Когда отображаются эти изображения, приложение запускается ОЧЕНЬ МЕДЛЕННО .UIAlertViews буквально выглядят так, как будто у них есть только два кадра, когда они представлены, и анимации даже не запаздывают ... они хуже!Но когда я не представляю UIImageViews, все работает быстро и элегантно.Очевидно, что я делаю что-то неправильно, поскольку iOS, безусловно, может обрабатывать три изображения.Любые предложения о том, как заставить приложение работать быстрее?Спасибо.

PS Я даже не хочу знать, что произойдет, когда я удваиваю разрешение изображений для нового iPad хаха

Редактировать : Воткод, который я использую, чтобы установить тени.Это использует каркас QuartzCore.

page2.layer.shadowColor = [UIColor blackColor].CGColor;
page2.layer.shadowOpacity = 1.0;
page2.layer.shadowRadius = 10.0;
page2.layer.shadowOffset = CGSizeMake(0, 4);

Редактировать 2 (Ответ) : Похоже, что задержка происходит из-за того, как я устанавливаю тени. Если вы установите для свойства shadowPath значение UIBezierPath границ UIImageViews, рендеринг будет выполняться быстрее и плавнее, а приложение значительно ускоряется. Вот мой окончательный код:

page2.layer.shadowColor = [UIColor blackColor].CGColor;
page2.layer.shadowOpacity = 1.0;
page2.layer.shadowRadius = 10.0;
page2.layer.shadowOffset = CGSizeMake(0, 4);
page2.layer.masksToBounds = NO;
UIBezierPath *path2 = [UIBezierPath bezierPathWithRect:page2.bounds];
page2.layer.shadowPath = path2.CGPath;

Ответы [ 3 ]

3 голосов
/ 18 марта 2012

Мы можем только догадываться, не видя фактического кода.

  • Тени могут быть очень дорогими. Становится ли быстрее, если вы выключите их или уменьшите значение shadowRadius?
  • Установка свойства shadowPath может привести к огромному улучшению, если вы сможете использовать его для получения нужного эффекта.
  • В противном случае: запекать тени на изображениях или использовать другую технику, чтобы подделать тени по краям ваших изображений.
2 голосов
/ 18 марта 2012

Лучшее решение - визуализировать ваши тени в виде изображения.Тем не менее, я ожидаю, что производительность с использованием CALayer shadowRadius будет значительно улучшена, если вы установите shadowPath вручную.

В противном случае он должен рассчитываться системой для каждого кадра.Установка этого параметра увеличит производительность анимации до смешного.

2 голосов
/ 18 марта 2012

Если вы используете CALayer теней, это может быть серьезной проблемой производительности для любого вида анимации.Они запускают программный рендерер, который очень сильно вредит анимации.Если у вас есть прямоугольные тени, лучше всего нарисовать тень, скажем, в Photoshop и использовать ее как растягиваемое изображение в отдельных видах / слоях.Если ваши представления имеют неправильные формы, вы можете нарисовать их с помощью Core Graphics, и это все равно будет намного быстрее, когда будут происходить анимации.

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