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

时间:2010-10-04 08:17:28

标签: iphone objective-c uiscrollview

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

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

2 个答案:

答案 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的范围。


所以有两种情况:

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

  2. zoomingViewbounds大时,zoomingView.frame.origin有如下奇怪的值:

      

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

    contentOffset显示should


  3. 所以所有这些都在我的代码中显示出来。