与CATiledLayer一起使用时,UIView的"contentScaleFactor"背后的秘密是什么?

Bas*_*Ben 17 uiscrollview uiview catiledlayer ios4

问候,

我正在开发一个受iOS SDK附带的"ZoomingPDFViewer"示例启发的应用程序.在某些时候,我发现了以下代码:

// to handle the interaction between CATiledLayer and high resolution
// screens, we need to manually set the tiling view's 
// contentScaleFactor to 1.0. (If we omitted this, it would be 2.0 
// on high resolution screens, which would cause the CATiledLayer 
// to ask us for tiles of the wrong scales.)
pageContentView.contentScaleFactor = 1.0;
Run Code Online (Sandbox Code Playgroud)

我试图了解更多关于contentScaleFactor它的信息.在阅读了提到它的Apple文档的所有内容之后,我搜索了Google并且从未找到确切的答案.

以下是我很好奇的一些事情:

  1. contentScaleFactor当绘制UIView的/ CALayer的内容时,似乎对图形上下文有某种影响.这似乎与高分辨率显示器(如Retina显示器)有关.contentScaleFactor真正有什么样的影响和什么?

  2. 当使用a UIScrollView并将其设置为缩放时,比方说,我的contentView ; contentView的所有子视图也正在缩放.这是如何运作的?哪些属性可以UIScrollView修改,甚至视频播放器变得模糊和扩大?

TL; DR:UIScrollView的缩放功能如何在"引擎盖下"工作?我想了解它是如何工作的,所以我可以编写正确的代码.

任何提示和解释都非常感谢!:)

Lui*_*uis 7

坐标以点而非像素表示.contentScaleFactor定义点和像素之间的关系:如果它是1,则点和像素是相同的,但如果它是2(如视网膜显示),则意味着每个点都有两个像素.

在普通绘图中,使用点意味着您不必担心分辨率:在iphone 3(scaleFactor 1)和iphone4(scaleFactor 2和2x分辨率)中,您可以使用相同的坐标和绘图代码.但是,如果您正在绘制图像(直接,作为纹理......)并且只使用法线坐标(点),则您不能相信像素到点的地图是1到1.如果您这样做,那么每个像素都是如果scaleFactor为2(x方向为2,y方向为2),图像将对应1点但4像素,因此图像可能会变得有点模糊

有工作CATiledLayer你可以有比例因子2.一些意想不到的结果我想,具有UIView一个contentScaleFactor==2与层contentScale==2混淆系统,有时乘以规模.Scrollview可能会发生类似的事情.

希望这能澄清一下