2013-09-24 153 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

我改變了加載的方式,以便只在顯示時加載項目並在滾動時加載更多項目。

這似乎已經完全解決了高內存問題,即使您滾動到兩端,它也不會使用相同的高內存量。我想我的原始代碼的工作方式存在漏洞。