Плохая производительность при просмотре с прокруткой, загруженном 3 контроллерами представления, нарисованными с помощью CALayer - PullRequest
2 голосов
/ 04 марта 2011

У меня есть вид прокрутки, загруженный с 3 контроллерами представления. каждый контроллер представления рисует свои слои с этим кодом - (там нас больше того, но я вытащил это, чтобы проверить, поможет ли это). до сих пор у меня очень дрянное скольжение. любая помощь?

Шани

CALayer *sublayer = [CALayer layer];
sublayer.backgroundColor = [Helper cardBackGroundColor:card].CGColor;
sublayer.shadowOffset = CGSizeMake(0, 3);
sublayer.shadowRadius = 5.0;
sublayer.shadowColor = [UIColor blackColor].CGColor;
sublayer.shadowOpacity = 0.8;
sublayer.frame = CGRectInset(self.view.layer.frame, 20, 20);
sublayer.borderColor = [UIColor blackColor].CGColor;
sublayer.borderWidth = 2.0;
sublayer.cornerRadius = 10.0;
[self.view.layer addSublayer:sublayer];

Ответы [ 2 ]

2 голосов
/ 04 марта 2011

Рисование с помощью CALayer часто приводит к низкой производительности. Мы обычно используем растягиваемое изображение, чтобы получить адекватную производительность. Когда вы думаете об этом, имеет смысл рендерить его заранее, а не использовать ограниченную вычислительную мощность iPhone для рендеринга в реальном времени.

Возможно, вы сможете получить адекватную производительность от CALayer, но рисование png, вероятно, все равно будет быстрее, что позволит сэкономить время работы от батареи.

РЕДАКТИРОВАТЬ: Итак, вот пример, чтобы объяснить концепцию.

Этот код фактически заменил слишком медленный рисунок CALayer.

UIImageView *shadow = [[UIImageView alloc] initWithFrame:frame];
shadow.image = [[UIImage imageNamed:@"shadow.png"] stretchableImageWithLeftCapWidth:16.0 topCapHeight:16.0];
[contentView addSubview:shadow];
[shadow release];

shadow.png имеет размер 34 на 34 пикселя и содержит затененный квадрат. Благодаря растягивающемуся изображению можно изменить размер квадрата, не растягивая тень. Для получения дополнительной информации об этом я бы предложил прочитать документацию для stretchableImageWithLeftCapWidth:topCapHeight:. Также Google поможет вам найти руководства по работе с растягиваемыми изображениями. Если у вас есть еще вопросы, я с удовольствием на них отвечу.

1 голос
/ 04 марта 2011

У вас есть маска (если вы где-нибудь скажете masksToBounds = YES) и тень на этом слое. Оба вызывают переход за пределы экрана.

Пожалуйста, смотрите сессию WWDC 2010 2010 года - Основная анимация на практике, часть 2

Что вы можете найти здесь;

http://developer.apple.com/videos/wwdc/2010/

...