2017-04-23 58 views
0

我正在研究樂器類型的應用程序。當touchDown發生時,它使用像UIButtons這樣的鍵盤來觸發播放音符。該筆記基於touchUpInside或touchUpOutside事件停止播放。爲什麼在按下另一個按鈕時觸發式裏面事件沒有在uibutton上觸發?

除非嘗試播放多個音符,否則一切均按預期工作。 touchDown事件起作用,但是當按鈕被釋放時,如果繼續觸摸另一個按鈕,則不會發送touchUpInside事件。當所有按鈕被釋放時,touchUpInside被髮送到所有按鈕。

它似乎緩衝其他觸摸事件,直到鬆開按鈕。如果一個按鈕被釋放並且另一個按鈕被按下,touchDown和touchUpInside事件不會被髮送到該按鈕,直到所有其他按鈕被釋放。然後,將touchUpInside事件發送到第一個按鈕,並觸發後續事件。

該流程已通過事件的IBActions代碼進行追蹤。我已啓用多點觸控。我曾嘗試允許多個手勢識別器。似乎沒有什麼影響這種行爲。

沒有真正的代碼可以共享,因爲按鈕和事件是使用Interface Builder - Storyboard構建的。

有沒有什麼東西阻止事件的處理等待釋放先前的觸摸事件?

任何意見,將不勝感激?我搜索了其他類似的問題,但無法找到此問題。

謝謝!

+1

請勿爲此使用按鈕。使用自定義視圖,跟蹤觸摸開始,觸動結束自己。 – matt

+0

@matt,你的建議是否有理由或解釋?你知道爲什麼針對UIButtons的touchDown和touchUpInside事件發生問題嗎? – McInvale

+1

您需要考慮iOS(以及可能的*任何* OS)如何處理「觸摸」和「按鈕點擊」。 (大多數情況下,它們都是相同的。)您通常不會[通過]「多點觸控」來打開應用程序,在[物理或軟件]鍵盤上輸入等等。您只需輕點,輕觸,或一次點擊鼠標。 @matt說的是正確的 - 使用自定義視圖(甚至不像自定義按鈕,因爲它是從NSControl繼承的),並自己編寫觸摸開始/結束。 – dfd

回答

2

作爲你的鋼琴鍵,使用自定義視圖,而不是UIButtons。通過將UILongPressGestureRecognizer附加到每個視圖,您可能最容易跟蹤要檢測的觸摸類型。或者,在較低的級別上,您可以直接檢測觸摸事件。

+0

根據你的建議,我記錄使用觸摸並消除鍵的使用UIButtons。正如我先前所建議的那樣,我必須爲項目的另一個功能部分做同樣的事情。我的挫折並沒有集中在你身上。我很抱歉你不得不重複自己。謝謝! – McInvale