簡體   English   中英

ScrollView-手勢識別器-垂直滑動

[英]ScrollView - Gesture Recognizer - Swipe vertically

我有一個UIScrollView,可以在向左或向右滑動時使用,但是我減小了scrollView的大小,因此,現在的顯示區域不能完全占據超級視圖的框架,並且滑動僅在滾動視圖的框架內起作用。

我希望即使在縮小的滾動視圖的水平范圍之外向上或向下滑動時也可以垂直滾動。

建議使用手勢識別器,但這超出了我目前對iOS的了解,可以使用更具體的建議或更多指導來開始使用。

有一種更簡單的方法,然后使用手勢識別器=]

您可以設置滾動視圖的超級視圖(BIGGER ...),以將觸摸傳遞給滾動視圖。 工作正常MAGICALY =]

首先,選擇將所有接觸傳遞給滾動視圖的視圖。 如果您的父視圖已經可以,則可以使用它。 否則,您應該考慮以所需大小添加新視圖,以吸引觸摸。

現在創建一個新類(我將使用swift作為示例)

class TestView: UIView {

    @IBOutlet weak var Scroller: UIScrollView!

    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {

        let view = super.hitTest(point, with: event)

        if (view == self) {
            return Scroller
        }

        return view

    }

}

太好了! 現在,如您所見,我們添加了滾動條的出口。 因此,請使用界面生成器,選擇新視圖,然后在身份檢查器中將其類設置為“ TestView ”(或設置為您將用於自定義類的名稱)。

設置課程並仍然選擇視圖后,轉到連接檢查器,然后將“ Scroller ”連接到情節提要上的滾動視圖。 所有連接正確=]

而已!! 無需手勢識別器!! 新視圖將所有觸摸內容傳遞給滾動視圖,並且其行為就像您在其中平移一樣=]

在我的答案中,我使用了該答案

編輯:我現在改進了代碼,它不能按預期的方式工作,現在它僅在需要時才捕獲,而不是像以前一樣在應用程序中進行每一次觸摸

  1. 搜索一個名為SwipeGestureRecognizer的組件: 在此處輸入圖片說明

  2. 抓取它並將其放到View的頂部(使用層次結構確保將其放到其上,如果將其放到另一個元素上,則此代碼將不起作用):

    在此處輸入圖片說明

  3. 選擇層次結構中的SwipeGestureRecognizer之一,然后轉到其屬性頁面。 將滑動向右更改。

在此處輸入圖片說明

  1. 確保其他識別器的“向左滑動”屬性

在此處輸入圖片說明

  1. 選擇UIScrollView並取消選中已啟用滾動

在此處輸入圖片說明

  1. detectSwipe() (請參見下面的源代碼)連接到兩個識別器。

-

@IBAction func detectSwipe (_ sender: UISwipeGestureRecognizer) {
    if (currentPage < MAX_PAGE && sender.direction == UISwipeGestureRecognizerDirection.left) {
        moveScrollView(direction: 1)
    }
    if (currentPage > MIN_PAGE && sender.direction == UISwipeGestureRecognizerDirection.right) {
        moveScrollView(direction: -1)
    }
}



func moveScrollView(direction: Int) {
    currentPage = currentPage + direction
    let point: CGPoint = CGPoint(x: scrollView.frame.size.width * CGFloat(currentPage), y: 0.0)
    scrollView.setContentOffset(point, animated: true)      

    // Create a animation to increase the actual icon on screen
    UIView.animate(withDuration: 0.4) {
        self.images[self.currentPage].transform = CGAffineTransform.init(scaleX: 1.4, y: 1.4)
        for x in 0 ..< self.images.count {
            if (x != self.currentPage) {
                self.images[x].transform = CGAffineTransform.identity
            }
        }
    }
}    

有關更多信息,請參閱https://github.com/alxsnchez/scrollViewSwipeGestureRecognizer

我沒有時間詳細回答,但:

在情節提要中,在滾動視圖的超級視圖上拖動一個平移手勢識別器...將其動作與您的視圖控制器相連,並在此動作中使用手勢識別器的屬性作為參數來更改滾動視圖的位置

提示:在組合框中將動作更改參數類型從“ AnyUIPanGestureRecognizer

請不要將此答案作為在問題中使用此方法的建議,我不知道這是否是最佳方法,我只是在幫助您嘗試

暫無
暫無

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

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