2017-04-24 66 views
0

我有一個視圖drawingView用於繪圖,我使用touchesBegan,Moved,End將曲線添加到呈現它們的子視圖renderingView。我也想支持在同一屏幕上縮放和平移,所以我在的子視圖中添加了UIScrollView,並在我的scrollView代理的viewForZooming方法中返回renderingView允許單點觸摸事件通過UIScrollView

現在,所有的縮放/平移工作。 renderingView放大,還佈置了貝塞爾曲線,我可以平移放大渲染等。但是,使用drawingView的觸摸*方法實際繪製成renderingView的初始功能不再起作用,因爲滾動視圖是子視圖並正在消費觸摸事件。

我願意將滾動視圖的平移設置爲至少2指手勢,因此縮放/捏和平移將是2指手勢,爲canvasView留出空間以處理單手指觸摸*要添加的事件路徑信息。

現在,我找到了一種方法(雖然看起來像是黑客),通過遍歷其手勢並檢查其平移手勢時,將scrollview的平移手勢設置爲最少兩個手指觸摸。但是,將此設置爲最少兩個手指觸摸,不允許我的canvasView開始獲取觸摸事件。我怎樣才能做到這一點?

TL; DR

UIScrollView一個子視圖在吃的touchesBegan /移除/截止它的父的事件。我怎樣才能解決這個問題是我願意將scrollView的事件限制爲兩個手指手勢,並讓超級視圖處理單指手勢?

回答

0

考慮使用手勢識別器,它會讓你的生活更輕鬆。還可以使用單個視圖獲取觸摸事件,並將觸摸數據傳遞給其他對象。

使用UIPinchRecognizer進行縮放和平移,使用UIPanRecognizer進行實際繪製。您可以將UIPanRecognizer.maximumNumberOfTouches設置爲1.

您可能想要查看Apple的網站以瞭解實施細節。

https://developer.apple.com/reference/uikit/uigesturerecognizer

+0

用手勢的問題是,他們實際上有一點延遲的,他們「搞」了。導致繪製經驗遲滯。其次,滾動視圖看起來有3個手勢,並且很難將它們全部設置爲2個最小觸摸,使得任何1個觸摸事件乾淨地在滾動視圖中傳播。 –