2010-10-04 70 views
8

我有一個UIScrollView並添加一個UIView裏面,當我放大它,是有可能得到縮放幀的CGRect相對於原始幀?獲取相對的UIScrollView的縮放幀原始尺寸

E.g.我有800x600的框架,然後我放大到{{50,60},{100,100}}是否有可能以編程方式獲取縮放框架?

回答

8

我通常使用以下的方法(添加到自定義的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; 
} 
+0

謝謝,預期:)如果你離開我的回答一些評論 – Manny 2010-10-04 11:46:47

+0

將不勝感激工作。 – DanSkeel 2012-05-25 18:31:08

5

溶液@Vladimir的問題是,它顯示的visibleRect錯如果viewForZoom比滾動型界限小。所以我想出了這個解決方案。

- (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. zoomingViewbounds較小,contentOffset反映的不是內容視圖的左上角,但有些奇怪的說法相對含量的轉變到bounds的中心。並且zoomingView.frame.origin具有正常值,就好像zoomingView位於bounds的中心。 (出現這種情況,如果你試圖縮小zoomingView超過minimulScale

  2. zoomingViewbounds bigget,zoomingView.frame.origin有奇怪的值是這樣的:

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

    and contentOffset顯示它是什麼should


因此,所有我在我的代碼表明,補償對方。