私のテーブルビューでは、プロジェクトの各テーブルビューでviewDidLoadを呼び出すカスタムバックグラウンドビューを作成しました:
- (void)viewDidLoad{
[super viewDidLoad];
//other unrelated sutff
self.tableView.backgroundView=[[BlueStyleBackground alloc]init];
}
Quartz2D を実行することが、パフォーマンスに関して最良の選択肢であることが私の理解でした。ただし、この背景ビューは、描画されるまでに 0.45 秒 (平均) かかります。これにより、tableView 間のすべてのナビゲーションが少し遅くなりますが、それほどではありませんが、気付くには十分です。
バックグラウンド ビューは、パターンが重なったグラデーションです。グラデーションが0.12秒で描画されることがわかったので、パターン描画がボトルネックになっているようです。驚いたのは、私の視点からは、描くのは複雑なことではなく、影のある 1 本の水平線だけであるということです。
パターンの呼び出し方法は次のとおりです (recDraw 内)。
static const CGPatternCallbacks callbacks = { 0, &MyDrawColoredPattern2, NULL };
CGContextSaveGState(context);
CGColorSpaceRef patternSpace = CGColorSpaceCreatePattern(NULL);
CGContextSetFillColorSpace(context, patternSpace);
CGColorSpaceRelease(patternSpace);
CGPatternRef pattern = CGPatternCreate(NULL,
rect,//superficie que ha de cobrir CGRectMake(0, 0,self.bounds.size.width,8),
CGAffineTransformIdentity,
self.bounds.size.width, // espai entre patrons (X)
2, // espai entre patrons (Y)
kCGPatternTilingConstantSpacing,
true,
&callbacks);
これはパターンコードです:
void MyDrawColoredPattern2 (void *info, CGContextRef context) {
UIColor* __autoreleasing blauClar = [UIColor colorWithRed: 0.65 green: 0.65 blue: 0.65 alpha: 1];
UIColor* __autoreleasing blauFosc = [UIColor colorWithRed: 0.106 green: 0.345 blue:0.486 alpha:1];
CGColorRef dotColor = blauFosc.CGColor;
CGColorRef shadowColor = blauClar.CGColor;
CGContextSetFillColorWithColor(context, dotColor);
CGContextSetShadowWithColor(context, CGSizeMake(0, 1), 5, shadowColor);
CGContextFillRect(context, CGRectMake(0, 0, 480, 1));
}
以前、24+24 の正方形の中に 2 つの六角形を描くパターンを作成しました。上記のコードよりも複雑に見えますが、描画にかかる時間はわずか 0.15 秒です。
ここで何か間違ったことをしていますか?クォーツの描画に関する私の知識はそれほど大きくないので、いくつかの情報をいただければ幸いです. 前もって感謝します!