2012-03-16 234 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为视网膜