2011-10-24 119 views
6

幾乎沒有信息,在那裏這一點,所以這裏是我的問題:的iOS觸摸(自動)偏移iPad上

我正在一個2玩家的iPad遊戲,玩家從海誓山盟對面坐「誰在另一邊有一個困難的時間點擊按鈕...因爲它似乎是蘋果自動轉移觸摸基於設備的方向(這是常規使用或主要球員很好)。有什麼方法可以重置它或告訴ipad不要那樣做? (順便說一下iPhone確實這也太)

這是我發現: 鑑於這種明顯的不一致,我決定只通過打開移動部件界限'欺騙它,以便有一個區域用戶可以擊中零件的區域。總的來說,用戶似乎低於一個對象而不是高於它 - 所以不要注意到由iOS引起的變化。

因此,如果沒有簡單的方法來防止偏移,是否將每個uiview(或子類)的界限轉移到對手的唯一解決方案?或者,這甚至是正確的?

任何答案讚賞。

回答

3

編輯: Omg你們我終於找到了一種方法!我製作了UIView的一個子類,並使我的遊戲視圖(包含所有UIScrollViews,UIButtons等)使用該子類。然後,這是我加入到子類中的唯一代碼:

-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    CGPoint touchSpot = point; 
    if (![[[UIDevice currentDevice] model] isEqualToString:@"iPad Simulator"] && touchSpot.y < 512) 
    { 
     touchSpot = CGPointMake(touchSpot.x, touchSpot.y+10); 
    } 

    UIView *hitView = [super hitTest:touchSpot withEvent:event]; 

    if (hitView == self) 
     return self; // you can return nil here if you want touches to go through this view (ie transparent space in a HUD overlay or w/e) 

    return hitView; 
} 

到目前爲止,這已經很好地工作......坐在另一端的人擁有良好的觸感的反應,就像在「家」的一面玩家。當心這個觀點雖然...一切都將通過該方法的頂部呈現看法...

老溶液(之前我發現了^):

好了,現在我的解決方案有一直是繼承uigesturerecognizer,轉發任何觸摸(即對識別器沒有限制),然後將其添加到我的遊戲視圖。然後,只有在狀態爲Ended時,響應任何觸摸的方法纔會運行,如果是,則繼續遍歷每個子視圖(不是很多),以查看觸摸是否與其中一個相交。同樣,對於相反的玩家,它比較矩陣的偏移量(對於每個子視圖)。

我會看看我能否找到更有效的方法......但目前爲止沒關係。

我本來可以讓我的遊戲視圖成爲一個uiview子類,並覆蓋touchesbegan /移動/結束,但我已經把它放在了外面,所以我去了識別器(因此不需要子類uiview)。

3

是的,觸摸偏移量確實存在,它的大小沒有記錄,也不能被取消(至少在公共API中)。

您必須反向設計偏移本身。我只會在UIKit顯示的觸摸位置顯示一個小圓圈,然後通過反覆試驗來調整它。當你有偏移量時,你可以手動將它應用於(-2 *偏移量)事件處理程序中僅用於相反的玩家。

我不知道它會多麼正確感覺,你必須試驗一下。

+0

觸摸我自己的權利我可以做到這一點,但對於UIButtons或在tableview上的東西,這不是我的控制權?他們已經剔除了錯過的接觸。對此有何建議?謝謝。 – cclogg

+0

爲了影響所有觸摸,您必須在UIWindow/UIApplication級別重寫'sendEvent:',但無論如何您都不能修改UITouches。這裏的問題是,爲了「修復」蘋果的觸摸調整設備(這很可能發生在驅動程序級別)*無處不在*您必須使用如下所述的私有API:http://cocoawithlove.com/2008/10/綜合 - touch-event-on-iphone.html,但我不會推薦它,因爲它是非常非常危險的黑客攻擊。 – Costique

+0

補償沒關係。那麼我正在研究一個視圖的界限......我想知道是否可以關閉剪裁,然後將視圖的邊界偏移-10像素,然後將視圖的幀偏移+10像素(第二個球員的幀)。雖然我不得不記得檢查框架上的-10個像素的碰撞/位置的東西。 – cclogg