1

我的应用程序中有一个带有 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!

4

1 回答 1

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 
}

这一切都假设您正在使用Cocos2D和 aCCSprite为您的按钮。这应该适用于任何屏幕尺寸和纵向或横向:)

于 2013-06-13T01:15:08.333 回答