私は 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 にも依存しています。非同期描画 (一度に 1 つのスタック) はオプションですか?
編集 2; とにかく、100個のUIViewを作成するのは遅いと思います。より良い解決策を見つけたら報告します(非同期かそのようなものだと思います)