Man*_*nny 8 iphone objective-c uiscrollview
我有一个UIScrollView并在其中添加了一个UIView,当我缩放它时,是否可以获得相对于原始帧的缩放帧的CGRect?
例如,我有800x600帧,然后我缩放到{{50,60},{100,100}}是否有可能以编程方式获得缩放帧?
我通常使用以下方法(添加到自定义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;
}
Run Code Online (Sandbox Code Playgroud)
@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;
}
Run Code Online (Sandbox Code Playgroud)
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展示它应该是什么.
因此,正如我在代码中展示的那样,所有这些都相互补偿.