我有looked into all these SO answers但似乎没有一个能解决我面临的问题。< / p>
缺点是我的滚动/缩放代码正如我期望的那样在 pre retina 设备上运行,但在4,4S&amp; 5与iOS 5.x&amp; 6.x我的代码适用于任何低于1.0的缩放值我测试过,但当zoomScale精确为1.0或更高时会中断。
此时整个视图向顶部/左侧移动
此代码:
- (void) layoutSubviews {
[super layoutSubviews] ;
::NSLog(@"x:%.02f contentOffset (%0.2f:%0.2f)"
, self.zoomScale
, self.contentOffset.x
, self.contentOffset.y) ;
}
在视网膜上产生这种情况:( 生涩的过渡,因为zoomScale从小于1.0到大于1.0)
x:0.96 contentOffset (1334.37:622.55)
x:0.98 contentOffset (1371.34:639.45)
x:1.00 contentOffset (226.45:202.26)
x:1.02 contentOffset (227.59:204.19)
x:1.03 contentOffset (228.71:206.10)
在非视网膜上产生此效果:(平滑过渡,适用于zoomScale从小于1.0到大于1.0)
x:0.95 contentOffset (2211.01:2247.41)
x:0.97 contentOffset (2257.25:2295.54)
x:0.99 contentOffset (2303.52:2343.69)
x:1.03 contentOffset (2403.40:2447.63)
x:1.05 contentOffset (2457.57:2504.00)
任何?
编辑记录滚动/缩放视图转换会产生一致(但仍然错误!)结果:
非视网膜
scale:0.98 contentOffset(29.11:40.02) transform: [0.978491, 0, 0, 0.978491, 0, 0]
scale:0.99 contentOffset(31.79:43.71) transform: [0.992378, 0, 0, 0.992378, 0, 0]
scale:1.01 contentOffset(35.71:49.11) transform: [1.01268, 0, 0, 1.01268, 0, 0]
scale:1.03 contentOffset(38.40:52.79) transform: [1.02656, 0, 0, 1.02656, 0, 0]
scale:1.04 contentOffset(41.09:56.49) transform: [1.04048, 0, 0, 1.04048, 0, 0]
视网膜
scale:0.98 contentOffset(1377.56:1511.69) transform: [0.984364, 0, 0, 0.984364, 0, 0]
scale:0.99 contentOffset(1392.50:1528.51) transform: [0.993929, 0, 0, 0.993929, 0, 0]
scale:1.02 contentOffset(227.42:300.11) transform: [1.01742, 0, 0, 1.01742, 0, 0]
scale:1.03 contentOffset(228.26:301.48) transform: [1.02922, 0, 0, 1.02922, 0, 0]
scale:1.03 contentOffset(228.48:301.84) transform: [1.03236, 0, 0, 1.03236, 0, 0]
答案 0 :(得分:0)
固定。
当我在初始化中替换
self.scrollView.contentSize = (CGSize) {CGFLOAT_MAX, CGFLOAT_MAX} ;
与
self.scrollView.contentSize = (CGSize) {1e9, 1e9} ;
然后,zoomScale和contentOffset在视网膜和非视网膜设备上变得一致。
我的猜测是,当Apple引入视网膜设备时,它们(无意中?)减少了浮点坐标空间的范围
[CGFLOAT_MIN,CGFLOAT_MAX]
到
[未定义,CGFLOAT_MAX / retina-device-scale]
...