获取相对于原始大小的UIScrollView的缩放框架

Man*_*nny 8 iphone objective-c uiscrollview

我有一个UIScrollView并在其中添加了一个UIView,当我缩放它时,是否可以获得相对于原始帧的缩放帧的CGRect?

例如,我有800x600帧,然后我缩放到{{50,60},{100,100}}是否有可能以编程方式获得缩放帧?

Vla*_*mir 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;
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*eel 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;
}
Run Code Online (Sandbox Code Playgroud)

zoomingView是一个返回viewForZoomingInScrollView:方法的视图.
bounds是scrollView的边界.


所以有两种情况:

  1. zoomingView小于时bounds,contentOffset不反映内容视图的左上角,而是相对于中心的一些奇怪的内容视图移位bounds.并且zoomingView.frame.origin具有正常值,好像zoomingView位于中心bounds.(如果您尝试缩小缩放视图,则会发生这种情况minimulScale)

  2. zoomingView比较大时bounds,zoomingView.frame.origin有这样的奇怪值:

    {-6.15367e-06,3.98168e-06}

    contentOffset展示它应该是什么.


因此,正如我在代码中展示的那样,所有这些都相互补偿.