Для надписей или видов с закругленными углами и / или цветов фона и теней при прокрутке видов решение довольно простое:
Самая большая проблема связана с параметром слоя masksToBounds.Похоже, что это значительно снижает производительность, однако метка, по-видимому, нуждается в этом включении, чтобы замаскировать цвет фона на закругленные углы.Таким образом, чтобы обойти это, вам нужно вместо этого установить цвет фона слоя надписей и отключить masksToBounds.
Вторая проблема заключается в том, что поведение по умолчанию состоит в том, чтобы по возможности перерисовывать вид, что совершенно не нужно при статических или медленных изменениях.предметы на прокрутке просмотров.Здесь мы просто устанавливаем layer.shouldRasterize = YES.Это позволит CA «кэшировать» растрированную версию вида для быстрого рисования при прокрутке (предположительно с аппаратным ускорением).
Вам необходимо убедиться, что ваш слой имеет альфа-канал, иначе растеризация повлияет на отрисовкузакругленные углы.У меня никогда не было проблем, так как у меня есть альфа-установка для моих цветов фона, но вам, возможно, придется проверить в вашей ситуации.
Вот пример UILabel, настроенный для приятной работы с scollview:
UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(4, 4, 40.0, 24.0)];
lbl.font = [UIFont fontWithName:@"Helvetica" size:14.0];
lbl.textAlignment = UITextAlignmentRight;
lbl.text = @"Hello World";
// Must set the label background to clear so the layer background shows
lbl.backgroundColor = [UIColor clearColor];
// Set UILabel.layer.backgroundColor not UILabel.backgroundColor otherwise the background is not masked to the rounded border.
lbl.layer.backgroundColor = [UIColor colorWithRed:1 green:0 blue:0 alpha:0.5].CGColor;
lbl.layer.cornerRadius = 8;
lbl.layer.borderColor = [UIColor blackColor].CGColor;
lbl.layer.borderWidth = 1;
// Huge change in performance by explicitly setting the below (even though default is supposedly NO)
lbl.layer.masksToBounds = NO;
// Performance improvement here depends on the size of your view
lbl.layer.shouldRasterize = YES;
lbl.layer.rasterizationScale = [UIScreen mainScreen].scale;
// self here is the child view in the scroll view
[self addSubview:lbl];
[lbl release];
Я могу заполнить экран iPad 1 такими же видами и по-прежнему плавно прокручивать:)