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 提高性能的另一种方法是将shouldRasterize属性设置为 YES。这会将图层内容存储为位图,并防止它必须重新渲染所有内容。

于 2012-06-14T14:28:43.560 回答