2015-05-18 17 views
2

這是我的第一篇文章,所以如果我錯誤地將其中任何一個字都說出來,我很抱歉。如果需要,我會很樂意澄清。(Objective-C)viewController的pageView在分頁來回時會「卡住」

我有一個pageViewController,它提供的每個viewController都包含一個scrollView,它顯示來自應用內照片庫的圖像(非常類似於在照片應用中放大照片,然後通過圖像集合進行滑動)。我通過捏手勢實現了放大和縮小,並且通常一切都正常,但是,當我從一個圖像滑動到另一個圖像時,然後回到原始圖像,然後嘗試向前或向後滑動,視圖就會「卡住」。爲了更好地說明這一點,假設您在圖庫中選擇圖像2。如果您滑動到圖像3,然後滑回到圖像2,則向圖像1或圖像3滑動,顯示您想要獲取的圖像條子,然後快速返回到圖像2.

快速捏將圖像縮小一點,並將其鎖定在屏幕寬度上,可以讓您自由地向前或向後縮放。我已經嘗試在viewDidAppear中添加一些代碼來快速縮放圖像,然後讓它回到屏幕的邊界來模擬這種手勢,但正如預期的那樣,每當新圖像放在屏幕上,我想滑動平滑。

任何想法來解決這個問題將不勝感激。我已經閱讀了關於scrollViews和pageViews以及它們相關的委託和數據源的Apple文檔,但是一直沒能找到這個問題的根源,儘管我可能忽略了一些東西。

如上所述,請讓我知道,如果我可以提供任何澄清手頭的問題。提前致謝。

回答

2

我在同一個問題上奮鬥了一段時間,並將其跟蹤到縮放,並最終出現縮放後居中內容的錯誤。我的大部分帖子都在Swift(2.1)中,但是我的主要解決方案的鏈接在Obj-C中。我有兩個答案:

您可以在您的viewDidLoad()(或您的Obj-C等價物)中設置scrollView.bouncesZoom = false。這可以防止UIScrollView能夠縮小超過最小縮放比例,從而當圖像處於最小縮放比例時,用戶無法通過捏取縮小圖像。

但是,更優雅的解決方案來自https://stackoverflow.com/a/2887298/2490299。本來,我centerScrollViewContents()(在鏈接的答案又名scrollViewDidZoom())是:

func centerScrollViewContents() { 
    let boundsSize = scrollView.bounds.size 
    var contentsFrame = imageView.frame 

    if contentsFrame.size.width < boundsSize.width { 
     contentsFrame.origin.x = (boundsSize.width - contentsFrame.width)/2.0 
    } else { 
     contentsFrame.origin.x = 0.0 
    } 

    if contentsFrame.size.height < boundsSize.height { 
     contentsFrame.origin.y = (boundsSize.height - contentsFrame.height)/2.0 
    } else { 
     contentsFrame.origin.y = 0.0 
    } 

    imageView.frame = contentsFrame 
} 

顯然爲中心,通過改變框架的內容導致出現此問題。作爲參考,雨燕等同於上面鏈接的答案是:

func scrollViewDidZoom(scrollView: UIScrollView) { 
    let offsetX = max((scrollView.bounds.size.width - scrollView.contentSize.width) * 0.5, 0.0) 
    let offsetY = max((scrollView.bounds.size.height - scrollView.contentSize.height) * 0.5, 0.0) 

    imageView.center = CGPointMake(scrollView.contentSize.width * 0.5 + offsetX, 
          scrollView.contentSize.height * 0.5 + offsetY) 
} 

希望這可以幫助你,如果你碰巧有同樣的問題,我是;這聽起來非常相似。

+0

感謝您的詳細回覆,我忘記了我在這裏發佈了這個問題。幾個月前我解決了這個問題,我的解決方案與您的解決方案類似。當我有機會時,我會挖掘代碼並編輯我的問題來展示我的方法。再次感謝您的回答。 – bluewraith