Я создаю рулетку в UIScrollView
, у нее есть горизонтальные линии от изображения, и я хочу добавить числа программно.Добавление текста в UIScrollView
(Обратите внимание на синий цвет должен был помочь получать раскладку право)
Я попытался это:
for (NSInteger i = 0; i < self.maxUnits.integerValue; i++) {
static CGFloat labelWidth = 40;
CGFloat x = (halfScreen - (labelWidth/2)) + (i * self.widthOfOneFraction.floatValue * self.numberOfFractions.floatValue);
CGRect frame = CGRectMake(x-1, 41, labelWidth, 70);
UILabel *label = [[UILabel alloc] initWithFrame:frame];
label.text = [NSString stringWithFormat:@"%d", i];
label.textAlignment = NSTextAlignmentCenter;
label.textColor = [UIColor tlbBlueColor];
label.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:20.0];
[self addSubview:label];
}
, который работает, но использует около 40Mb оперативной памяти. Я думал, что добавление текста в CATextLayer может быть более эффективным, но я не могу заставить его работать:
for (NSInteger i = 0; i < self.maxUnits.integerValue; i++) {
CATextLayer *label = [[CATextLayer alloc] init];
[label setFont:@"HelveticaNeue-Light"];
[label setFontSize:20];
[label setFrame:frame];
[label setString:[NSString stringWithFormat:@"%d", i]];
[label setAlignmentMode:kCAAlignmentCenter];
[label setForegroundColor:[[UIColor whiteColor] CGColor]];
[self.layer addSublayer:label];
}
цифры не отображаются на экране.
Итак, мой вопрос: могу ли я сделать первый способ более эффективным, а если нет, то второй способ более эффективен, когда он работает, и если да, то как мне заставить его работать?
Надеюсь, вы могли бы обобщить свою реализацию на нечто вроде горизонтального представления таблицы. Вы можете легко повторно использовать эти числа, поскольку они прокручивают экранный экран, а не грубый, заставляя их всех в иерархию представлений одновременно. – CodaFi
Я задавался вопросом, не сделать ли это на самом деле рисовать в 3 раза ширину экрана, а затем перерисовывать по мере его прокрутки, но поскольку вы можете прокручивать очень быстро, это может ухудшить производительность. – Lewis42