2017-03-20 3 views
0

私はscrollViewsで少し作業をしようとしています。だから私はバウンスが有効になっている私のコントローラ上のScrollViewを持っています。だから今私は私がしたいようにページの最後にビューのバウンスをスクロールします。スウィフト:スクロールビューでバウンスする「フリーズ」

しかし、今私はバウンスをフリーズしたいです。私はもう少しそれを説明しようとします:

私は私のScrollViewでスクロールアップします。ページの終わりが始まります。これでバウンスが始まり、スクロールが少し上がります。それから、私はスクロールを解く。ビューがバウンスする。しかし、私はscrollViewがこの位置にとどまることを望みます(私はビューを遠ざけるため、私が押している間にそのバウンスすると奇妙に見えます)。

物事は私が試した:

1.Set現在バウンド位置までスクロールビューのフレーム。これはフレームを編集するだけですが、依然としてscrollViewをバウンスします。

v2.view.frame = CGRect(x: CGFloat(0), y: CGFloat(CURRENTBOUNCING), width: width, height: height) 

2.ターンオフします。これは現在のバウンスを終了させ、あなたがもはやバウンスできなくなった後に終了します。だから私はそれが戻って跳ねるようにしたくない場合、これは動作しません。

scrollView.bounces = false 

3.コンテンツオフセットを手動で設定します。

scrollView.contentOffset.y -= 100 // Or something like this 

4.私は、初期化後にそれを書いても私のために何も変わりません。これは、制約のために私が考えるものは何も変わりません。

scrollView.contentSize = CGSize(width: self.view.frame.width, height: self.view.frame.height - 200) 

5.常に垂直に跳ね返っています。同じような2。

scrollView.alwaysBounceVertical = false 

6.ページング。私は手動でページを作成するので、これを試しました。しかし、その後、私はページングする前に何も跳ね返りません。ページングを使用すると、最後にスクロールしながら次のページを見ることができます。しかし、次のページはドラッグ後に読み込まなければなりません。誰かが私を助けることができる

希望:)

EDIT

scrollview上で、私の画面に表示するために私の現在のscrollviewの絵を7.Taking。これは、適切なタイミングで映像遅延ではなくかかります(ので、バウンスがキャプチャまたはすでに行われ、その後の半分である。

let renderer = UIGraphicsImageRenderer(size: scrollView.bounds.size) 
pufferImage.image = renderer.image { ctx in 
     scrollView.drawHierarchy(in: scrollView.bounds, afterScreenUpdates: true) } 

答えて

0

同じ問題に遭遇した。解決内容オフセットや変更を記録することですその値へのスクロールビューの垂直オフセット。同時にスクロールをオフにします。

private var dismissTriggerd = false 
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 
    if keyPath == "contentOffset" { 

     if scrollView.contentOffset.y < -70 && dismissTriggerd == false { 
      scrollViewTop.constant = scrollView.contentOffset.y * -1 
      scrollView.isScrollEnabled = false 
      dismissTriggerd = true 
      dismiss(animated: true) 
     } 
    } 
} 


deinit { 
    scrollView.removeObserver(self, forKeyPath: "contentOffset") 
} 
関連する問題