0

で巻尺を作成して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];
}

数字は画面に表示されません。

したがって、私の質問は、最初の方法をより効率的にすることはできますか? そうでない場合は、機能するときに2番目の方法をより効率的にすることです.

4

1 に答える 1

0

表示されているアイテムのみをロードし、スクロールするとさらにいくつかのアイテムをロードするように、ロードの動作方法を変更しました。

これにより、高メモリの問題が完全に修正されたようで、両端までスクロールしても、同じ量のメモリを使用しません。元のコードの動作にリークがあったと思います。

于 2013-09-24T10:21:30.460 に答える