2015-11-25 84 views
11

我想在contentOffset在兩點之間時用編程方式設置scrollview的contentOffset(請參見下圖)。Contentoffset的平滑移動UIScrollView Swift

問題是,我想爲移動添加一個平滑的過渡,但我沒有找到這方面的文檔。我試圖做一個循環,以逐漸減少內容偏移量,但結果不太好。

在此示例中,如果內容偏移量在滾動結束時小於150像素,則平滑過渡(動畫持續時間爲1秒)到偏移量等於100的點。最多150 px,它會變成200px。

如果您可以提供我的指導(文檔或快速示例),該怎麼做會很棒:)謝謝!

enter image description here

回答

17

您可以使用UIView.animations

func goToPoint() { 
    dispatch_async(dispatch_get_main_queue()) { 
     UIView.animateWithDuration(2, delay: 0, options: UIViewAnimationOptions.CurveLinear, animations: { 
     self.scrollView.contentOffset.x = 200 
     }, completion: nil) 
    } 
    } 
+0

非常感謝,我用你的代碼來製作Swift 3版本。 編輯 - 我會張貼它作爲這個答案,因爲代碼在這裏混亂。 – user3739902

+1

@fatihyildizhan所以使用這個代碼,像我的魅力一樣工作,謝謝!我試圖做同樣的事情,但不是'dispatch_async(dispatch_get_main_queue())',它不能正常工作,因爲在動畫期間contentOffset設置回0.0。你能解釋一下爲什麼我們需要在dispatch_async(dispatch_get_main_queue())中做這個make來正常工作嗎? – Mette

8

這裏是斯威夫特3版fatihyildizhan的代碼。

 DispatchQueue.main.async { 
     UIView.animate(withDuration: 0.2, delay: 0, options: UIViewAnimationOptions.curveEaseOut, animations: { 
      self.myScrollView.contentOffset.x = CGFloat(startingPointForView) 
      }, completion: nil) 
    }