Objective c 双击home(主页)按钮时滞后于CALayer

Objective c 双击home(主页)按钮时滞后于CALayer,objective-c,ios,calayer,lag,Objective C,Ios,Calayer,Lag,当我在CALayer上放置阴影等时,当我双击home按钮查看任务运行时,我的应用程序会滞后。我没有任何其他滞后,就在我双击的时候 我调用此方法20次以放置20个图像: - (UIView *)createImage:(CGFloat)posX posY:(CGFloat)posY imgName:(NSString *)imgName { UIView *myView = [[UIView alloc] init]; CALayer *sublayer = [CALaye

当我在CALayer上放置阴影等时,当我双击home按钮查看任务运行时,我的应用程序会滞后。我没有任何其他滞后,就在我双击的时候

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

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

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


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

我试图添加以下内容:UIBezierPath*path=[UIBezierPath-bezierpath-withrect:sublayer.bounds];sublayer.shadowPath=path.CGPath;但这并没有改变任何事情。我做错什么了吗?不,我就是这个意思。对不起,这没用。您使用添加到视图现有层的两个层,而不是创建UIImageView并更改其层的属性,这有什么原因吗?这可能会有更好的表现。没有任何理由,我只是按照一个教程。我会用UIImageView试试,然后告诉你。谢谢你的帮助。好的,我记得为什么。因为当我使用UIImageView时,我有一个关于cornerRadius的bug。我的半径角周围都是白色的矩形部分。如果你不明白我的意思,我可以加入截图。所以我在我的图像周围做了一个“容器”,以获得一个合适的半径。不管怎样,我尝试了UIImageView(我有一个拐角半径错误),当我评论这行时:imgView.layer.cornerRadius=10.0;我的程序不再滞后了。所以滞后不是来自阴影,而是来自我的怪虫子。有什么想法吗?我肯定是因为层次的复杂性。尝试“应光栅化”,请参见编辑后的答案。