我正在尝试制作多个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的速度很慢。如果我找到了更好的解决方案,我会报告回来(我猜是异步或类似的东西)解决方案
答案 0 :(得分:1)
您是否在某种动画中使用这些图像?如果没有,您可以尝试关闭光栅化以提高性能。
cardView.layer.shouldRasterize = NO;
答案 1 :(得分:1)
阴影计算量很大。如果shouldRasterize
没有这样做,请为影子设置UIImage
,如果您的观看次数可以更改尺寸,请使用resizableImageWithCapInsets
加载图片。