2013-02-04 44 views
2

我是iOS新手,在這方面我一直堅持一段時間。我的目標是在用戶捏住視圖中的任何位置時以編程方式縮放到特定位置。這看起來很奇怪,但它是一個不適用於App Store的內部應用程序。現在,當我縮小變焦時,沒有任何反應。iOS程序化放大UIScrollView無法正常工作

在我的視圖(這是一個單一的視圖應用程序),我有圖像,我想放大以編程方式。這是我所做的。

  1. 在界面生成器,我拖滾動視圖對象到我的視圖,改變大小以適應視圖

  2. 在滾動視圖,我設置的最小縮放= 0,最大zoom = 1000(只是爲了確保這不是問題)

  3. 我在UIScrollView上拖動了一個捏手勢識別器。

  4. 我右鍵單擊UIGestureRecognizer,然後創建一個名爲handlePinch()的操作,在此處我將代碼放置在可識別夾點時編程縮放。

  5. 實現在handlePinch變焦(如下圖所示)

    - (IBAction)handlePinch:(UIPinchGestureRecognizer *)sender { 
        CGRect zoomRect; 
    
        zoomRect.origin.x = 500; 
        zoomRect.origin.y = 500; 
        zoomRect.size.width = 512; 
        zoomRect.size.height = 384; 
    
        [scrollView zoomToRect:zoomRect animated:YES ]; 
        } 
    

已知: - 捏合手勢被識別,handlePinch被稱爲

感謝您的任何答案或提前建議!

+0

是大於滾動視圖框架的滾動視圖內容(即其頂級子視圖)? – sergio

+0

其實我的圖片都比主視圖大,比UIScrollView大。我製作的圖像比視圖和UIScrollView小,但捏手勢仍然沒有發生。我也嘗試在主視圖和UIScrollView中嵌入圖像視圖。 – corbin

回答

2

由於內置了縮放功能,因此您不需要捏手勢即可完成此操作。下面介紹如何操作。

在視圖控制器頭文件,添加滾動視圖代表:

@interface MyViewController : UIViewController <UIScrollViewDelegate> 

接下來在實現文件中,最好在您的viewDidLoad中,滾動視圖的委託設置爲self:

- (void)viewDidLoad { 
    //other stuff 
    self.scrollView.delegate = self; 
} 

然後,複製並滾動視圖的委託方法粘貼到您的實現文件:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { 
    if (scrollView == self.scrollView) { 
     return self.viewToBeZoomed; 
    } 
}  

self.viewToBeZoomed是您要放大的視圖。這個視圖是self.scrollView的子視圖。

+0

完美,是的,你需要滾動委託。我的更長的答案在這裏:http://stackoverflow.com/a/6143833/8047 –