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

ccl*_*ogg 6 iphone bounds ipad touches touch-event

几乎没有关于此的信息,所以这是我的问题:

我正在努力让2名玩家坐在彼此的ipad游戏对面,对面的玩家很难点击按钮......因为看起来Apple会根据设备方向自动移动触控(这对于经常使用或主要玩家来说非常棒).有没有办法重置它或告诉ipad不这样做?(顺便说一下iPhone也这样做)

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

因此,如果没有简单的方法来阻止偏移,那么唯一的解决办法就是为相对的玩家移动每个uiview(或子类)的界限吗?或者这是否正确?

任何答案都赞赏.

ccl*_*ogg 4

编辑:天哪,你们我终于找到了办法!我创建了 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;
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,效果很好……坐在另一端的人有良好的触摸响应,就像“主”侧的玩家一样。不过,请注意在此视图之上呈现视图...一切都将通过该方法进行...

旧的解决方案(在我发现之前^):

好吧,现在我的解决方案是子类化 uigesturerecognizer,转发任何触摸(即对识别器没有限制),然后将其添加到我的游戏视图中。然后,响应任何触摸的方法仅在状态为 Ended 时运行,如果是,则它会继续循环遍历每个子视图(不多)以查看触摸是否与子视图相交。同样,对于相反的玩家,它会比较稍微偏移的矩形(对于每个子视图)。

我会看看是否能找到更有效的方法...但到目前为止还可以。

我还可以将我的游戏视图设为 uiview 子类并覆盖 Touchbegan/移动/结束,但我已经将其全部放置出来,所以我使用了识别器(因此不必子类化 uiview)。