的iOS触摸(自动)偏移iPad上

问题描述:

几乎没有信息,在那里这一点,所以这里是我的问题:的iOS触摸(自动)偏移iPad上

我正在一个2玩家的iPad游戏,玩家从海誓山盟对面坐“谁在另一边有一个困难的时间点击按钮...因为它似乎是苹果自动转移触摸基于设备的方向(这是常规使用或主要球员很好)。有什么方法可以重置它或告诉ipad不要那样做? (顺便说一下iPhone确实这也太)

这是我发现: 鉴于这种明显的不一致,我决定只通过打开移动部件界限'欺骗它,以便有一个区域用户可以击中零件的区域。总的来说,用户似乎低于一个对象而不是高于它 - 所以不要注意到由iOS引起的变化。

因此,如果没有简单的方法来防止偏移,是否将每个uiview(或子类)的界限转移到对手的唯一解决方案?或者,这甚至是正确的?

任何答案赞赏。

编辑: 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)。

是的,触摸偏移量确实存在,它的大小没有记录,也不能被取消(至少在公共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