寻找touchesMoved的替代方案来检测定义区域内的任何触摸事件?

时间:2013-06-13 01:09:04

标签: ios objective-c xcode uibutton

我的应用程序中有一个带有6个键的虚拟键盘,整个事情只是用UIImageView实现的图像。我确定了与每个“键”图像对应的确切x和y坐标,并使用以下代码来响应用户与键盘交互:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch * touch = [[event allTouches] anyObject];
    CGPoint point = [touch locationInView:touch.view];
    if(point.y < 333 && point.y > 166 && point.x < 72 && point.x > 65)
    {
    NSLog(@"Key pressed");
    }
    //Repeat per key...
}

但是,我已经意识到这种方法不是很聪明,因为更改手机视角(纵向到横向)或更换设备会破坏我的x和y坐标,从而导致问题。

所以,我正在寻找一种替代方法来指定绝对的x和y值,并且通常使用touchesMoved。理想情况下,它是一个具有特定设置的按钮,如果它被点击,或者如果用户将手指拖入按钮区域(即使非常缓慢 - 我之前使用过滑动检测并且需要太多的夸张的运动)。

是否可以设置一个按钮来调用其方法,如果点击或触摸事件在按钮外部启动然后进入按钮?如果没有,我的替代方案是什么?

谢谢SE!

1 个答案:

答案 0 :(得分:0)

您需要获取winSize属性,这样可以解决屏幕尺寸问题。

CGSize size = [[CCDirector sharedDirector]winSize];

我相信你使用的是Cocos2D?如果是这样,您可以使用此size属性而不是硬编码数字。 :)

转换你的观点,使用

UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector]convertToGL:location];

要查看它是否在按钮的边界/框内,您可以尝试:

if (CGRectContainsPoint ([self.myButton boundingBox], location)
{
//Execute method 
}

这是假设您使用Cocos2DCCSprite作为按钮。 这适用于任何屏幕尺寸和纵向或横向:)