0

CALayer でシャドウなどを配置すると、ホーム ボタンをダブルタップして実行中のタスクを確認すると、アプリが遅くなります。ダブルタップするだけで、他のラグはありません。

このメソッドを 20 回呼び出して、20 個の画像を配置します。

- (UIView *)createImage:(CGFloat)posX posY:(CGFloat)posY imgName:(NSString *)imgName
{   
    UIView *myView = [[UIView alloc] init];

    CALayer *sublayer = [CALayer layer];
    sublayer.backgroundColor = [UIColor blueColor].CGColor;
    sublayer.shadowOffset = CGSizeMake(0, 3);
    sublayer.shadowRadius = 5.0;
    sublayer.shadowColor = [UIColor blackColor].CGColor;
    sublayer.shadowOpacity = 0.8;
    sublayer.frame = CGRectMake(posX, posY, 65, 65);
    sublayer.borderColor = [UIColor blackColor].CGColor;
    sublayer.borderWidth = 2.0;
    sublayer.cornerRadius = 10.0;

    CALayer *imageLayer = [CALayer layer];
    imageLayer.frame = sublayer.bounds;
    imageLayer.cornerRadius = 10.0;
    imageLayer.contents = (id) [UIImage imageNamed:imgName].CGImage;
    imageLayer.masksToBounds = YES;
    [sublayer addSublayer:imageLayer];

    [myView.layer addSublayer:sublayer];

    return myView;
}

これを除くすべてのコードにコメントを付けたので、ラグはここから来ていると確信しています。また、割り当てツールで確認しましたが、アプリが 1Mo を超えたことはありません。影などのない画像を入れているだけの場合、すべて正常に動作します。

4

1 に答える 1

1

shadowPathレイヤーにもa を設定してみてください。レイヤーの角が丸くなっているため、丸みを帯びた四角形にする必要があります。

CALayer は、描画している場所と、シャドウ パスがない場合はどこにシャドウを配置するかを計算する必要があります。これは、アニメーションのパフォーマンスに大きな影響を与えます。

CALayers でパフォーマンスを向上させるもう 1 つの方法は、shouldRasterizeプロパティを YES に設定することです。これにより、レイヤーのコンテンツがビットマップとして保存され、すべてを再レンダリングする必要がなくなります。

于 2012-06-14T14:28:43.560 に答える