簡體   English   中英

在UIView中識別滑動手勢以使用手勢識別器滾動scrollView

[英]Recognize swipe gesture in UIView to scroll the scrollView using gesture-recognizer

我有UIScrollView並且滾動視圖框架不等於UIView框架。 因此,在滾動視圖框架外滑動時不會滾動視圖內容。 但是我希望整個屏幕對滾動視圖都響應,盡管滾動視圖不能覆蓋全屏。 我知道可以通過使滾動視圖框架等於視圖框架來實現 。但是我不想這樣做。 我嘗試了到目前為止找到的其他可能的解決方案。 但是我沒有想要的東西。 我需要使用手勢識別器執行此操作。

以下是我的代碼:

override func viewDidLoad() {
        super.viewDidLoad()
        scrollView.delegate = self

        let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
        swipeRight.direction = UISwipeGestureRecognizerDirection.right
        self.view.addGestureRecognizer(swipeRight)


        let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
        swipeLeft.direction = UISwipeGestureRecognizerDirection.left
        self.view.addGestureRecognizer(swipeLeft)

}

func respondToSwipeGesture(gesture: UIGestureRecognizer) {
        if let swipeGesture = gesture as? UISwipeGestureRecognizer {
            switch swipeGesture.direction {
            case UISwipeGestureRecognizerDirection.right:

                scrollView.panGestureRecognizer.isEnabled = true

            case UISwipeGestureRecognizerDirection.left:

                 scrollView.panGestureRecognizer.isEnabled = true


            default:
                break
            }
        }
    }

這是我的視圖控制器,藍色背景是滾動視圖。 滑動手勢僅適用於該藍色區域。 但是我希望它即使在角落也能在屏幕上顯示。 如何使用手勢識別器實現它

編輯

我實際上剛剛學習了一個更簡單的解決方案:只需將view.addGestureRecognizer(scrollView.panGestureRecognizer)添加到viewDidAppearviewDidLoad

這本質上確實是采取scrollViewUIPanGestureRecognizer ,手勢識別器識別手指拖動並滾動scrollView的內容,並將其提供給基視圖,以便它可以識別手指拖動並滾動scrollView過的內容。

因此,您不需要如下所述的所有math和scrollRectToVisible 哦,對了,我認為學習UIScrollViews的工作原理很有用又有趣!

要以編程方式使UIScrollView“滾動”,請使用UIScrollView的scrollRectToVisible

有關更多詳細信息和代碼語法,請參見以編程方式滾動UIScrollView

基本上,在任何時間點,UIScrollView的內容子視圖都會從其框架中偏移一些量。

它有助於理解UIScrollView的各個部分(尤其是內容子視圖),如下圖所示(可以隨意忽略紫色的UIImageView): 在此處輸入圖片說明

在第一個圖像中,UIScrollView的內容子視圖(紅色輪廓)根本沒有偏離UIScrollView的框架(假定與可見屏幕的大小相同):兩者在(0,0)處的左上角都相同。

在第二個/中間圖像中,UIScrollView的內容子視圖現在偏移了“上”:該內容子視圖的左上角現在位於類似(0,-200)的位置,其中(0,0)仍然是該對象的左上角UIScrollView的框架。

再次,您可以更改UIScrollView的內容子視圖偏移量,並使用scrollRectToVisible以及參數animated: true來模擬“滾動”。

提示 :例如, scrollView.contentOffset.x內容向左滾動(在用戶從右向左滑動之后),您將采用UIScrollView的當前內容偏移量的x坐標( scrollView.contentOffset.x ),然后減去 UIScrollView的寬度( scrollView.frame.size.width )。 因此,如果UIScrollView的當前內容偏移量(左上角)為(0,0),則內容偏移量(左上角)將從(0-width,0)開始移動,內容“向左”移動。

將滾動視圖移到視圖的框架,然后設置內容的插入/偏移,這樣它只會一直顯示到藍色框架

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM