Bro*_*die 10 ipad catiledlayer ios retina-display
我希望也许这只是模拟器的一个问题,但当然它让我担心,因为我已经提交了我的视网膜应用程序,直到16日才能测试它.
我在我的应用程序中实现了CATiledLayer来查看非常大的地图.地图的图块来自互联网,但它们也会被缓存,因此,通常它们实际上是直接从设备加载的.
在iPad 1和iPad2上,它的工作非常漂亮.您只能注意到iPad 2上呈现的图块,即使它们来自互联网也是如此.
在iPad模拟器上它工作得很漂亮.
我的问题是iPad视网膜模拟器.在视觉上,它看起来没问题.地图的大小正确,并与我用来显示数据叠加层的另一个图层对齐,但是它会慢慢加载.大部分时间我尝试了一次,直到我开始滚动它不会加载任何瓷砖的话,那么当它被装载瓷砖它在做什么,也许1每秒看起来很可怕.
我没有在视网膜上运行的代码比标准分辨率屏幕不同,所以我希望这只是模拟器的问题......但我仍然担心.
有没有其他人在自己的应用程序中看到过这个
小智 14
更大的瓷砖尺寸对我来说很有用,但是当我调整CATiledLayer的levelsOfDetailBias属性时,它会回到制作小瓷砖并且需要永远加载.关闭细节偏差是不可接受的,因为放大视图需要看起来很清晰,所以我看了一些Apple的文档 - https://web.archive.org/web/20120323033735/http://developer.apple.com/library /ios/samplecode/ZoomingPDFViewer/Listings/Classes_PDFScrollView_m.html - 他们的一个建议是覆盖你的平铺视图的layoutSubviews方法,以便始终设置contentScaleFactor = 1.我之后唯一需要做的就是每次都调用setNeedsLayout scrollViewDidEndZooming已解雇.这假设您使用的是UIScrollView.我在我的iPad(第三代)和iPad2上进行了测试,两者似乎都运行良好.希望有所帮助.
示例代码 - 假设您正在为UIView创建子类并使用CATiledLayer覆盖视图的后备层 -
-(void)layoutSubviews{
[super layoutSubviews];
/*
EDIT: After some additional experimentation,
I Have found that you can modify this number to .5 but you need
to check to make sure you are working on a 3rd gen iPad. This
seems to improve performance even further.
*/
// Check if app is running on iPad 3rd Gen otherwise set contentScaleFactor to 1
self.contentScaleFactor = .5;
}
Run Code Online (Sandbox Code Playgroud)
然后假设您的View Controller设置为UIScrollViewDelegate -
-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale{
//do any other stuff you may need to do.
[view setNeedsLayout];
}
Run Code Online (Sandbox Code Playgroud)