|
重要: 背景Mac OS X 10.3では、Cocoaビュー用に最適化した描画モデルが導入されました。このモデルは新しい
問題点効率化のために、 -needsToDrawRect:をオーバーライドして正しく実行この問題を回避して意図したとおりに動作させるには、 ビューが一度に多数の矩形を描画するよう要求されることがめったになく、そのコンテンツを描画するのがとくに複雑または高価でない場合は、次のような リスト1:シンプルな-needsToDrawRect:の差し替え版
- (BOOL)needsToDrawRect:(NSRect)rect
{
const NSRect *rectList;
int count;
int i;
[self getRectsBeingDrawn:&rectList count:&count];
for (i = 0; i < count; i++) {
if (NSIntersectsRect(rect, rectList[i])) {
return YES;
}
}
return NO;
}
上記のアプローチには、 通常、一度に描画する矩形が多数あるビューの場合にパフォーマンスを改善するには、このメソッドでrectListの境界矩形の外側にあるオブジェクトを迅速に拒否する、別のメソッドを定義して使用することが考えられます。 リスト2:より最適化された-needsToDrawRect:の差し替え版
- (BOOL)needsToDrawRect:(NSRect)rect rectListBounds:(NSRect)rectListBounds
{
const NSRect *rectList;
int count;
int i;
if (!NSIntersectsRect(rect, rectListBounds)) {
return NO;
}
[self getRectsBeingDrawn:&rectList count:&count];
if (count == 1) {
return YES;
} else {
for (i = 0; i < count; i++) {
if (NSIntersectsRect(rect, rectList[i])) {
return YES;
}
}
return NO;
}
}
ドキュメント改訂履歴
掲載日: 2007-01-22 | ||||||||||||
|