2016-11-16 133 views
2

我有一個scrollView,裏面有子視圖。我想要在子視圖之外進行任何觸摸,以使scrollview像在任何其他情況下一樣滾動。但是當觸摸位於子視圖內時,我不想要滾動來註冊(所以我可以使用該觸摸來拖動)。IOS:如何僅在觸摸子視圖外部時滾動scrollview滾動?

class ViewController: UIViewController { 
    @IBOutlet weak var scrollView: UIScrollView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     scrollView.backgroundColor = UIColor.red 
     scrollView.contentSize = CGSize(width: 1000, height: 1000) 
     let view = UIView(frame: CGRect(x: 600, y: 600, width: 200, height: 200)) 
     view.backgroundColor = UIColor.blue 
     scrollView.addSubview(view) 
    } 
} 

到目前爲止,我已經嘗試了許多東西,使這項工作。在爲子視圖和滾動視圖製作海關課程方面取得了一些成功。在這些課程我覆蓋了觸摸方式,像這樣:

class MyScrollView: UIScrollView { 
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     self.isScrollEnabled = true 
    } 

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 
     self.isScrollEnabled = true 
    } 

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
     self.isScrollEnabled = true 
    } 
} 

對於滾動型customclass我轉身滾動,然後在子視圖自定義類我把它關掉。這可行,但有一個主要問題,即在isScrollEnabled更改之前,第一次觸摸仍然繼續。這意味着當滾動關閉並且您想要滾動時,您必須在框外觸摸並且沒有任何反應,然後執行相同的觸摸並開始觸摸。

我所尋求的是實現對觸摸是,改變滾動設置,然後在相同的電阻觸摸依然滾動或不滾動依賴於設置是什麼辦法。

乾杯,任何幫助表示讚賞。

回答

0

可能做到這一點最簡單的方法是將虛擬UIPanGestureRecognizer添加到這樣的藍觀點:

即使
blueView.addGestureRecognizer(UIPanGestureRecognizer()) 

沒有行動,這將做的工作,因爲觸摸將被處理子視圖第一,然後才由UIScrollView自己的UIPagGestureRecognizer處理。

+0

這確實回答我問,但實際上並沒有解決我的問題的問題。我一直在尋找(並在問題沒有提到)是讓藍景再回應我的觸摸,所以我可以拖在那裏。當我加入panGesture它停止了滾動,但它不會讓我將其拖放到藍色視圖中選擇的東西。我會怎麼做呢? –

+0

@LewisBlack好吧,所以你有藍圖內的子視圖,對吧?您可以將泛識別器添加到這些子視圖中。它們的優先級高於blueView的平移手勢。 – alexburtnik

相關問題