“背后的秘密是什么?”;contentScaleFactor“;与CATiledLayer一起使用时的UIView?
您好 我正在开发一个受iOS SDK附带的“ZoomingPDFViewer”示例启发的应用程序。在某个时刻,我发现了以下代码:“背后的秘密是什么?”;contentScaleFactor“;与CATiledLayer一起使用时的UIView?,uiview,ios4,uiscrollview,catiledlayer,Uiview,Ios4,Uiscrollview,Catiledlayer,您好 我正在开发一个受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
// 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;
我试图了解更多关于contentScaleFactor
及其功能的信息。在阅读了所有提到它的苹果文档之后,我搜索了谷歌,却没有找到它实际功能的确切答案
以下是一些我很好奇的事情:
contentScaleFactor
似乎对图形上下文有某种影响。这似乎与高分辨率显示器(如视网膜显示器)有关。contentScaleFactor
真正有什么样的影响,对什么有影响UIScrollView
并将其设置为缩放时,比如说,我的contentView;contentView的所有子视图也正在缩放。这是怎么回事?UIScrollView
修改了哪些属性以使视频播放器变得模糊并放大任何提示和解释都将不胜感激!:) 坐标以点而不是像素表示
contentScaleFactor
定义点和像素之间的关系:如果为1,则点和像素相同,但如果为2(如视网膜显示),则表示每个点都有两个像素
在普通绘图中,使用点意味着您不必担心分辨率:在iPhone3(scaleFactor 1)和iphone4(scaleFactor 2和2x分辨率)中,您可以使用相同的坐标和绘图代码。但是,如果您正在绘制图像(直接,作为纹理…),并且仅使用法线坐标(点),则不能相信像素到点的贴图是1:1。如果这样做,则图像的每个像素将对应于1个点,但如果scaleFactor为2(x方向为2,y方向为2),则对应于4个像素,因此图像可能会变得有点模糊
使用CATiledLayer
使用scalefactor 2可能会产生一些意外的结果。我猜,如果使用UIView
acontentScaleFactor==2
和层acontentScale==2
会混淆系统,有时会使比例成倍增加。Scrollview可能也会发生类似的情况
希望这能澄清一点苹果在iOS开发文档的“支持高分辨率屏幕”页面上有一个关于这一点的章节 页面上写着: 更新自定义绘图代码 在应用程序中进行任何自定义绘图时,大多数情况下 您不需要关心基础架构的解决方案 屏幕。本机绘图技术自动确保 在逻辑坐标空间映射中正确指定的坐标 在基础屏幕上显示像素。然而,有时候,您可能需要 要知道当前比例因子是什么,以便渲染 内容正确。对于这些情况,UIKit、核心动画和 其他系统框架提供了绘制图形所需的帮助 没错 如果需要,可以通过编程方式创建高分辨率位图图像 当前使用UIGraphicsBeginImageContext函数创建 位图,您可能需要调整代码以考虑比例因子 账户UIGraphicsBeginImageContext函数始终创建 比例因子为1.0的图像。如果基础设备具有 在高分辨率屏幕上,使用此功能创建的图像可能不会 渲染时显示为平滑。创建具有比例因子的图像的步骤 除1.0之外,请使用UIGraphicsBeginImageContextWithOptions 相反使用此功能的过程与 UIGraphicsBeginImageContext函数:
请参见此处:注意,将0.0作为刻度传递将导致UIGraphicsBeginImageContextWithOptions:使用设备主屏幕的contentScaleFactor。在我看来,这是最容易的选择,以充分利用您所使用的任何分辨率设备。这将自动为“正常”设备使用1.0,为视网膜设备使用2.0。很好,不容易!很好的回答,这里是一个最新的总结和要点,比例因子和分辨率
UIGraphicsBeginImageContextWithOptions(CGSizeMake(100.0,100.0), NO, 2.0);