我的应用程序中有一个带有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!
答案 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
}
这是假设您使用Cocos2D
和CCSprite
作为按钮。
这适用于任何屏幕尺寸和纵向或横向:)