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

时间:2011-10-24 04:16:40

标签: iphone ipad bounds touches touch-event

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

我正在努力让2名玩家坐在彼此的ipad游戏对面,对面的玩家很难点击按钮......因为Apple似乎会根据设备方向(非常适合常规使用或主要播放器)。有没有办法重置它或告诉ipad不这样做? (顺便说一下iPhone也这样做)

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

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

任何答案都赞赏。

2 个答案:

答案 0 :(得分:3)

是的,触摸偏移确实存在,其大小未记录且无法取消(至少使用公共API)。

您必须对偏移本身进行反向工程。我只会在UIKit说出触摸的地方显示一个小圆圈,然后通过反复试验进行调整。如果有偏移量,可以在事件处理程序中手动应用它(-2 *偏移量),仅用于对方玩家。

我不知道感觉有多么正确,你必须尝试一下。

答案 1 :(得分:3)

编辑:哦,伙计们,我终于找到了办法!我创建了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 / moving / ends但是我已经把它全部放了出去,所以我选择了识别器(因此没有子类uiview)。