【发布时间】:2010-10-04 08:17:28
【问题描述】:
我有一个 UIScrollView 并在其中添加了一个 UIView,当我对其进行缩放时,是否可以获得缩放帧相对于原始帧的 CGRect?
例如我有 800x600 帧,然后我缩放到 {{50, 60}, {100, 100}} 是否可以以编程方式获取缩放帧?
【问题讨论】:
标签: iphone objective-c uiscrollview
我有一个 UIScrollView 并在其中添加了一个 UIView,当我对其进行缩放时,是否可以获得缩放帧相对于原始帧的 CGRect?
例如我有 800x600 帧,然后我缩放到 {{50, 60}, {100, 100}} 是否可以以编程方式获取缩放帧?
【问题讨论】:
标签: iphone objective-c uiscrollview
我通常使用以下方法(添加到自定义的 UIScrollView 类别中):
- (CGRect) visibleRect{
CGRect visibleRect;
visibleRect.origin = self.contentOffset;
visibleRect.size = self.bounds.size;
visibleRect.origin.x /= self.zoomScale;
visibleRect.origin.y /= self.zoomScale;
visibleRect.size.width /= self.zoomScale;
visibleRect.size.height /= self.zoomScale;
return visibleRect;
}
【讨论】:
@Vladimir 解决方案的问题是,如果 viewForZoom 小于 ScrollView 边界,它会显示 visibleRect 错误。所以我想出了这个解决方案。
- (CGRect) zoomedFrame{
CGRect zoomedFrame;
zoomedFrame.origin = self.contentOffset;
zoomedFrame.origin.x -= zoomingView.frame.origin.x;
zoomedFrame.origin.y -= zoomingView.frame.origin.y;
zoomedFrame.size = self.contentSize;
return zoomedFrame;
}
zoomingView 是一个返回 viewForZoomingInScrollView: 方法的视图。bounds 是 scrollView 的边界。
所以有两种情况:
当zoomingView 小于bounds 时,contentOffset 反映的不是内容视图的左上角,而是内容视图相对于bounds 中心的一些奇怪移动。并且zoomingView.frame.origin 具有正常值,就好像zoomingView 在bounds 的中心一样。 (如果您尝试缩小 zoomingView 超过minimulScale,就会发生这种情况)
当zoomingView 比bounds 大时,zoomingView.frame.origin 具有如下奇怪的值:
{-6.15367e-06, 3.98168e-06}
而contentOffset 显示了它should 的内容。
因此,正如我在代码中显示的那样,所有这些都相互补偿。
【讨论】: