2012-03-16 174 views
1

有沒有人有任何提升視網膜顯示器上CATiledLayer性能的技巧?CATiledLayer&視網膜顯示屏

這篇文章: CATiledLayer in iPad retina simulator yields poor performance

意味着有與模擬器的問題,但我的實際設備注意到上表現不佳,以及。這是一個非常明顯的問題,因爲它在視網膜顯示器上加載較大的瓷磚。我唯一能做的就是重新處理平鋪圖像和更多層次的細節。

我做一個小竅門:

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

計算規模時,但似乎並沒有足夠的應對錶現不佳。

+0

只是確認我看到在硬件相同的問題。 CATiledLayer似乎在我的iPad 2上比在iPad 3上運行得更好。不知道這是由於我的代碼中的錯誤還是某些潛在的問題。 – 2012-03-19 23:55:26

+0

覆蓋' - (void)didMoveToWindow {[super didMoveToWindow]; self.contentScaleFactor = 1; }'。簡言之,CATiledLayer已經基於屏幕*像素*(不是「點」)工作。多一點討論[here](http://markpospesel.wordpress.com/2012/04/03/on-the-importance-of-setting-contentscalefactor-in-catiledlayer-backed-views/) – 2012-10-29 16:17:20

回答

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 3的工作像iPad 2對我來說。如果你正在做其他事情,比如覆蓋數據等,那麼你可能需要做更多的爭論。實際上,這隻會使您的內容大小和瓷磚大小加倍,從而抵消視網膜顯示的影響。

你也可以改變你的最大值和最小值zoomScales爲視網膜