我正在構建一個iOS桌面遊戲(類似於拼字遊戲或單詞),涉及到在屏幕上移動小瓷磚,我發現用戶有時很難觸摸並移動瓷磚,因爲它們太小。由於遊戲的設計,我無法增加瓷磚的尺寸,所以我不得不實施一些小技巧,使用戶更容易觸摸和移動瓷磚,並且它們很好地工作。剩下的唯一問題是用戶有時只是在瓷磚外面接觸,當用戶試圖移動瓷磚時,瓷磚會停留在原來的位置。如何在iOS設備上以滑動手勢捕捉子視圖?
我有我如何可以解決此兩種想法......
- 如果當用戶觸摸屏幕瓷磚沒有感動,我可以使用父視圖的觸摸位置找到最接近的瓷磚到觸摸位置並以某種方式將觸摸事件轉發到該視圖的視圖。
- 如果在用戶觸摸屏幕時沒有觸摸平鋪,當用戶試圖移動平鋪時,我可以以某種方式「抓住」平鋪。
我更喜歡實施解決方案#2,因爲解決方案#1有太多問題,更不用說解決方案#2是一種更現實的體驗。也就是說,如果用戶在手指上方拖動手指併發送觸摸事件以將其移動到手指位置,我怎麼能「抓住」一個瓦片?
目前,我的貼圖是作爲UIView的子類實現的,它們直接處理觸摸事件(touchesBegain,touchesMoved和touchesEnded)。因此,如果用戶僅觸摸視圖外面並將其手指拖動到視圖上,則由於它沒有收到初始的touchesBegan事件,所以它不會收到任何觸摸事件。
在此先感謝您的所有智慧!
謝謝,布萊恩,這聽起來像這裏的正確方法。快速的問題,如果我重寫板視圖中的hitTest方法,我究竟想在它裏面做什麼?我是否想要遍歷所有的瓷磚並檢查命中點是否碰到任何瓷磚?如果是這樣,重寫hitTest方法有什麼意義呢,爲什麼我不能在棋盤的觸摸事件方法中檢查它(例如touchesBegan,touchesMoved等)? – BeachRunnerFred 2010-12-13 17:42:44
更多的細節回答更多 – Brian 2010-12-13 18:19:33
謝謝,布萊恩,這對我有很大的幫助。我會給它一個!另外,由於我的棋盤視圖包含其他類型的視圖,而不僅僅是拼貼,我假設我必須檢查從[super hitTest]調用返回的對象的類型,並確保它是拼貼視圖。我應該使用[hitView isKindOfClass:[TileView類]]爲此? – BeachRunnerFred 2010-12-13 18:33:20