2014-02-24 79 views
2

在Xcode中5我已經創建a universal app,與含有UIImageView(這裏fullscreen)一個UIScrollView比例縮小的UIImageView放置在一個UIScrollView

Xcode screenshot

自從我在界面生成器設置的所有UI屬性(要顯示的圖像,1000×1000個像素的UIImageView尺寸和UIImageView模式設置爲「縮放以填充」),在ViewController.m實際的源代碼是很短:

- (void)viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 

    /* 
    if (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad) { 
     _imageView.frame = CGRectMake(_imageView.frame.origin.x, 
             _imageView.frame.origin.y, 
             800, 800); 
    } 
    */ 

    _scrollView.contentSize = _imageView.bounds.size; 

    NSLog(@"%s: _scrollView %@ %@", 
      __PRETTY_FUNCTION__, 
      NSStringFromCGPoint(_scrollView.frame.origin), 
      NSStringFromCGSize(_scrollView.frame.size)); 

    NSLog(@"%s: _imageView %@ %@", 
      __PRETTY_FUNCTION__, 
      NSStringFromCGPoint(_imageView.frame.origin), 
      NSStringFromCGSize(_imageView.frame.size)); 
} 

在iPhone和iPad上,這個功能令人驚訝(適用於我的iOS新手),而且應用程序甚至可以旋轉。

不過,對於iPhone顯示的圖像是有點過大,需要按比例縮小爲更舒適的遊戲:

app screenshot

我希望,即由於UIImageView模式是「規模要填寫」 ,我只需要更改它的frame(或bounds?我已經嘗試了兩種) - 就像上面顯示的註釋代碼一樣。

但這不起作用 - 滾動中斷(無法滾動到圖像底部了)。

有什麼建議嗎?

(我也希望稍後添加一個雙擊和雙擊手勢識別器,並且也可以在其中縮放UIImageView)。

UPDATE:

我已經試過以下安德烈的建議通過添加以下代碼到viewDidLayoutSubviews,但圖像沒有縮小(謝謝!):

if (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad) { 
    _scrollView.maximumZoomScale = 1.2; 
    _scrollView.minimumZoomScale = .8; 
    _scrollView.zoomScale = .8; 
} 

回答

1

UIScrollView中能爲你處理縮放,以及捏手勢。

您只需要在「minimumZoomScale」和「maximumZoomScale」屬性中設置適當的值,並且它可以讓用戶捏在這些限制之間。 您還需要實現從UIScrollViewDelegate的

- (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView 

方法。它應該只是返回imageView。

您還可以使用「zoomScale」屬性設置縮放級別。

對於雙擊,您需要將自己的雙擊手勢識別器添加到滾動視圖中,並在發生雙擊時增加縮放級別。

更新與委託方法和雙輕拍手勢。

+0

+1謝謝,但是當我設置'_scrollView.zoomScale = .8'時,圖像不會縮小(請參閱更新後的問題)。 –

+1

是的,我的壞,因爲Legoless狀態,你還需要實現從UIScrollViewDelegate的方法 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { }方法。 它應該只是返回imageView。 我也更新了我的答案。 – Andrei

1

您一定要閱讀AutoLayout。如果打開AutoLayout,則無法更改框架和邊界。您當然可以關閉整個Storyboard。

您的問題的解決方案是約束條件。使用它們可以定義視圖的相關方式,例如:UIScrollView與其父視圖相關的方式以及UIImageViewUIScrollView相關的方式。

瞭解更多關於限制在下面的鏈接:

雖然UIScrollView可以處理捏你縮放,則必須實現正確的委託方法:viewForZoomingInScrollView:。當然,您必須爲minimumZoomScalemaximumZoomScale設置正確的屬性值。以下鏈接

的更多信息:

兩個網站有足夠的信息和示例,你能夠做到這一點的。首先嚐試使用這些網站上的代碼,然後發佈另一個更具體的問題,如果遇到問題。

相關問題