0

我正在 a 中创建一个卷尺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 的 RAM。我认为在 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];
}

数字不会出现在屏幕上。

所以我的问题是我是否可以让第一种方式更有效,如果不是,第二种方式在工作时效率更高,如果可以,我如何让它工作?

4

1 回答 1

0

我改变了加载的工作方式,以便只加载显示的项目并在滚动时加载更多项目。

这似乎完全解决了高内存问题,即使您滚动到两端,它也不会使用相同的高内存量。我想我的原始代码的工作方式存在泄漏。

于 2013-09-24T10:21:30.460 回答