阴影和旋转的多个视图变得非常慢

时间:2013-05-23 20:40:18

标签: ios objective-c

我正在尝试制作多个uiview的堆栈。每个UIView都带有阴影,轻微旋转和缩放。作为测试,我正在制作10个10个视图的堆栈。绘制这一切非常慢..是否有一种优化方法?我尝试从图像中制作阴影和背景,但这很丑陋,同样慢。我将这些堆栈放在UIScrollView

   for (int k = 0; k < 9; k++) {

    for (int i = 0; i < 9; i++) {

        UIView *stack = [[UIView alloc] initWithFrame:CGRectMake((i * 106), (k * 106), 110, 110)];

        for (int i = 0; i < 10; i++) {

            CardView *cardView = [[CardView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];

            //cardView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"card_background.png"]];

            cardView.layer.shadowOffset     = CGSizeMake(0, 0);
            cardView.layer.shadowOpacity    = 0.3f;
            cardView.layer.shadowPath       = [UIBezierPath bezierPathWithRect:(CGRect){CGPointZero, cardView.layer.bounds.size}].CGPath; // Set shadow path, without this the performance is *really* bad
            cardView.transform              = CGAffineTransformMakeRotation(((arc4random() % 20) - 10.0f) / 100.0f);
            cardView.transform              = CGAffineTransformScale(cardView.transform, 0.35, 0.35);
            cardView.layer.shouldRasterize  = YES;
            cardView.layer.rasterizationScale = 0.5;

            cardView.center = CGPointMake(55, 55);

            [stack addSubview:cardView];
        }

        [_backgroundView addSubview:stack];
    }

}

编辑1;尝试了一些东西,禁用光栅化并没有多大帮助,禁用阴影也没有多大帮助,旋转和缩放是追求密集的,这也是uiview的。异步绘图(当时是一个堆栈)是一个选项吗?

编辑2;无论如何,猜猜制造100 UIView的速度很慢。如果我找到了更好的解决方案,我会报告回来(我猜是异步或类似的东西)解决方案

2 个答案:

答案 0 :(得分:1)

您是否在某种动画中使用这些图像?如果没有,您可以尝试关闭光栅化以提高性能。

cardView.layer.shouldRasterize  = NO;

答案 1 :(得分:1)

阴影计算量很大。如果shouldRasterize没有这样做,请为影子设置UIImage,如果您的观看次数可以更改尺寸,请使用resizableImageWithCapInsets加载图片。