2012-03-16 14 views
1

網膜ディスプレイ上のCATiledLayerのパフォーマンスを改善するためのトリックはありますか?CATiledLayer&retina display

このポスト: CATiledLayer in iPad retina simulator yields poor performance

シミュレータに問題があることを意味しますが、私も実際デバイス上でパフォーマンスの低下に気付いています。それは、網膜ディスプレイ上にもっと大きなタイルを早くロードするので、かなり明白な問題です。私ができることは、より詳細なレベルのタイル画像を再処理することだけです。

私は一つの小さなトリックを行う:

CGFloat scale = CGContextGetCTM(context).a/self.contentScaleFactor; 

規模を計算し、それがパフォーマンスの低下に対処するために十分ではないようです。私のタイルビューで

+0

はちょうど私は、ハードウェア上の同じ問題を見ていることを確認するためにあなたの最大と最小zoomScalesを変更することもできます。 CATiledLayerはiPad 2よりもiPad 2よりはるかに優れているようです。私のコードや基本的な問題のバグが原因であるかどうかは不明です。 –

+0

オーバーライド ' - (void)didMoveToWindow {[super didMoveToWindow]; self.contentScaleFactor = 1; } '。簡単な話は、CATiledLayerはすでにscreen * pixels *( "points"ではなく)に基づいて動作しているということです。もう少し議論[ここ](http://markpospesel.wordpress.com/2012/04/03/on-the-importance-of-setting-contentscalefactor-in-catiledlayer-backed-views/) –

答えて

1

- (id)initWithImageName:(NSString *)name size:(CGSize)size 
{ 

    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) { 

     size = CGSizeMake(size.width*2, size.height*2); 

    } 

    if ((self = [super initWithFrame:CGRectMake(0, 0, size.width, size.height)])) { 

     CATiledLayer *tiledLayer = (CATiledLayer *)[self layer]; 

     tiledLayer.levelsOfDetail = 4; 
     if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) { 

      tiledLayer.tileSize = CGSizeMake(512, 512); 
     } 

    } 

    return self; 
} 

は、これは私のためのiPad 2のようなiPadの3の作業を得ました。あなたが何か他のことをやっているのであれば、データを重ねるなどのように、あなたはいくつかの論争をしなければならないかもしれません。効果的にこれはあなたのコンテンツのサイズとタイルのサイズを倍増させ、網膜ディスプレイの効果を打ち消します。

また、網膜

関連する問題