当双击主页按钮时,与CALayer滞后

时间:2012-06-14 14:23:17

标签: objective-c ios calayer lag

当我使用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。当我只是放置没有阴影等的图像时,一切正常。

1 个答案:

答案 0 :(得分:1)

尝试在图层上设置shadowPath。它需要是一个圆角矩形,因为你的图层上有圆角。

如果没有阴影路径,CALayer必须计算它的绘制位置以及放置阴影的位置。这对动画性能有很大影响。

使用CALayers提高性能的另一种方法是将shouldRasterize属性设置为YES。这将图层内容存储为位图,并防止它必须重新渲染所有内容。