我有一个UIScrollView并在其中添加了一个UIView,当我缩放它时,是否可以获得相对于原始帧的缩放帧的CGRect?
E.g。我有800x600帧,然后我缩放到{{50,60},{100,100}}是否有可能以编程方式获得缩放帧?
答案 0 :(得分:9)
我通常使用以下方法(添加到自定义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;
}
答案 1 :(得分:5)
@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
的中心。 (如果您尝试缩小缩放视图而不是minimulScale
),则会发生这种情况
当zoomingView
比bounds
大时,zoomingView.frame.origin
有如下奇怪的值:
{ - 6.15367e-06,3.98168e-06}
contentOffset
显示should。
所以所有这些都在我的代码中显示出来。