2013-09-24 2 views
0

Я создаю рулетку в UIScrollView, у нее есть горизонтальные линии от изображения, и я хочу добавить числа программно.Добавление текста в UIScrollView

(Обратите внимание на синий цвет должен был помочь получать раскладку право)

tape measure

Я попытался это:

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]; 
} 

цифры не отображаются на экране.

Итак, мой вопрос: могу ли я сделать первый способ более эффективным, а если нет, то второй способ более эффективен, когда он работает, и если да, то как мне заставить его работать?

+0

Надеюсь, вы могли бы обобщить свою реализацию на нечто вроде горизонтального представления таблицы. Вы можете легко повторно использовать эти числа, поскольку они прокручивают экранный экран, а не грубый, заставляя их всех в иерархию представлений одновременно. – CodaFi

+0

Я задавался вопросом, не сделать ли это на самом деле рисовать в 3 раза ширину экрана, а затем перерисовывать по мере его прокрутки, но поскольку вы можете прокручивать очень быстро, это может ухудшить производительность. – Lewis42

ответ

0

Я изменил способ загрузки, чтобы загружать только объекты на дисплее и загружать еще несколько при прокрутке.

Это, похоже, полностью устраняет проблему с высокой памятью, и даже если вы прокручиваете оба конца, она не использует тот же самый большой объем памяти. Я предполагаю, что произошла утечка в том, как работает мой оригинальный код.

Смежные вопросы