編輯: 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)。
觸摸我自己的權利我可以做到這一點,但對於UIButtons或在tableview上的東西,這不是我的控制權?他們已經剔除了錯過的接觸。對此有何建議?謝謝。 – cclogg
爲了影響所有觸摸,您必須在UIWindow/UIApplication級別重寫'sendEvent:',但無論如何您都不能修改UITouches。這裏的問題是,爲了「修復」蘋果的觸摸調整設備(這很可能發生在驅動程序級別)*無處不在*您必須使用如下所述的私有API:http://cocoawithlove.com/2008/10/綜合 - touch-event-on-iphone.html,但我不會推薦它,因爲它是非常非常危險的黑客攻擊。 – Costique
補償沒關係。那麼我正在研究一個視圖的界限......我想知道是否可以關閉剪裁,然後將視圖的邊界偏移-10像素,然後將視圖的幀偏移+10像素(第二個球員的幀)。雖然我不得不記得檢查框架上的-10個像素的碰撞/位置的東西。 – cclogg