2010-08-12 61 views
0

我有一個視圖,即能夠回到以前的視圖。iPhone - 捕捉橫向滑動 - 在子視圖

假設這是一個問卷。所以我的主要觀點是問卷調查(控制器),它有一個子視圖,它顯示了一個問題和2個可能的答案。當回答問題時,接下來會按下,問卷查看(控制器)會顯示該特定子視圖中的下一個問題。很簡單,對吧?

好吧,現在想象一下,爲了解決某個特定的問題,最多可容納10人。這將需要在子視圖中實現滾動視圖,以適應問題+所有答案。

現在我的問題:我想讓questionnaireView(控制器)接收水平滑動通知(下一個/上一個問題),但我想要所有其他觸摸(水龍頭,答案的單選按鈕和垂直滑動的滾動視圖)去...

任何想法的如何去做這件事?我嘗試了大約5種不同的方法,並在每個人的頭腦和動機上打破了最後一個(也是最簡單的一個),簡單地將另一個子視圖添加到questionnaireView(Controller),覆蓋問題+答案視圖。

這種親切的捕捉所有的觸動開始/移動/結束/取消對我來說,但即使我只是在每個方法([self nextResponder] ...)的基礎視圖(與答案和滾動視圖)將不再回應...

我有點失去了這一點,並正在考慮哪天寫我自己的滾動型,因爲UIScrollView的是面臨iPhone devvers最可怕的怪物:P

請注意,我支持iPhone OS 3.0及更高版本,所以新的手勢API是不行的。

回答

1

我不確定你的意思是「每個方法中的前沿」。我不確定nextResponder是否是將它們轉發給其中的正確的東西。

問題是觸摸應該在整個生命週期內由單個視圖「擁有」。我不確定UIScrollView或手勢識別器是如何實現的,但我確定他們做的比您應該自己做的要多。

我會重寫questionnaireView的hitTest:withEvent:return self。在touchesBegan:withEvent:中,調用[super hitTest:[touch locationInView:self] withEvent:event]並存儲「擁有」它的子視圖。在touchesMoved:withEvent:中,將觸摸轉發到相關的子視圖,但是如果檢測到手勢,則「忘記」擁有該觸摸的子視圖,而是調用touchesCancelled:withEvent :.在touchesEnded/Canceled:withEvent :,將其轉發到子視圖,然後忘記擁有子視圖。

這很噁心,但它主要是有效的。有些東西出錯了(從子視角):

  • - [UIEvent touchesForView:]將返回QuestionnaireView。
  • UITouch.view將返回QuestionnaireView
  • UITouch.phase可能無法在touchesCancelled被UITouchPhaseCancelled:withEvent:方法(如果檢測到的手勢和取消觸摸)。 *
+0

我無法得到它的工作,但這是我的代碼到目前爲止:http://pastebin.com/V4eZQj90。 我的問題是,touchesEnded患有永恆循環,即使我測試「nextResponder」UIView是不是等於自我... – StijnSpijker 2010-08-13 09:07:04

+0

它看起來對我來說沒問題。什麼循環? 另請注意,如果您要支持多點觸控,則需要分別爲每次觸摸存儲「下一個響應者」。 – 2010-08-13 11:44:10