2017-04-22 72 views
0

後,我有一個關於iOS中/斯威夫特觸摸操控一個問題:轉發觸摸事件下面的UIScrollView使用它們

我的項目看起來像這樣

UIViewController 
    → UIView 
      → OverlayView (UIView) 
      → ScrollView (UIScrollView) 

的OverlayView的之上規定UIScrollView。兩者都是UIViewControllers視圖的子視圖。

我這樣做的原因是,我希望滾動視圖正常運行(平移,縮放),而覆蓋視圖不受滾動視圖可見內容中更改的影響。此外,疊加視圖應處理觸摸事件以在下面的滾動視圖中顯示內容的準則。

我面對現在的問題是,該觸摸事件(touchesBegantouchesMovedtouchesEndedtouchesCancelled)上疊加視圖不進行滾動視圖(滾動視圖不平移/縮放)。

我找到了一個解決方案,通過覆蓋point(inside point: CGPoint, with event: UIEvent?) -> Bool並返回false將觸摸事件轉發到下一個視圖。但是,覆蓋視圖上的觸摸事件不會被調用。

有沒有人知道如何實現這種行爲?我試圖在覆蓋視圖中調用下一個響應者的所有觸摸事件,但這也不起作用。

感謝您的幫助!

+0

Intstead使用上滾動型的概述,創造的UIScrollView的子類,並處理觸摸有 – Darshana

+0

。您是否找到了解決方案? –

回答

0

你最好的選擇是查找hitTestdocs) - 在你的子類(覆蓋)創建邏輯,當你想通過觸摸事件向下跌破

0

的觀點,我認爲你是在正確的決定跟蹤point(inside point: CGPoint, with event: UIEvent?) -> Bool

在您的「疊加」視圖中,檢查點是否在子視圖內。如果是這樣,則返回true以允許與子視圖進行交互。如果不是,則返回false以「傳遞觸摸」直到底層滾動視圖。

class PassThruOverlayView: UIView { 

    override func point(inside point: CGPoint, with event: UIEvent?) -> Bool { 

     for v in subviews { 

      let ptInSub = v.convert(point, from: v.superview) 
      if v.bounds.contains(ptInSub) { 
       return true 
      } 

     } 

     return false 

    } 

} 

你可以在這裏看到一個工作示例(顯示在滾動型兩種「重疊ScrollViews」和「UIView的疊加):https://github.com/DonMag/ScrollViewPassThru

+0

感謝您的回答!問題是,我需要覆蓋視圖和滾動視圖中的觸摸事件: -/ –

+0

hmmm ...因此,您想 - 例如 - 輕觸按鈕在疊加視圖中,並觸發一個動作***和***有相同的點擊觸發底層滾動視圖中的東西? – DonMag

+0

準確!這是,我在滾動視圖中有一些繪畫畫布,並希望在疊加視圖中插入精確繪圖的準則。我這樣做的原因是,我希望指南不要放大滾動視圖的內容。 –