2013-06-13 96 views
1

我在我的应用程序中有一个虚拟键盘,带有6个键,整个事物只是一个用UIImageView实现的图像。我确定对应于每个“关键”的图像的准确的x和y坐标,并且用下面的代码来与键盘交互的用户响应:寻找替代touchesMoved来检测定义区域内的任何触摸事件?

- (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

你可能想'转换'你的'点'为GL' – LAMBORGHINI

+0

看到我的答案,我把转换点在那里。你需要将手指拖到按钮上才能做什么? – LAMBORGHINI

回答

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为您的按钮。 这应该适用于任何屏幕大小和肖像或风景:)

+0

感谢@CodeBandits的回答,但如果可能的话,我想nix整个当前的方法,我已经去设置一个专门的按钮reposond类似。很显然,按钮区域内的轻按事件会触发该方法,但是如何添加用户触摸被拖入按钮区域时的触发器? – jake9115

+0

我搜索了你想要的东西,并且我看到你在过去问过这样的问题[这里]。使用这种方法有问题吗? (http://stackoverflow.com/questions/16661496/using-uicontroleventtouchdragenter-to-trigger-a-buttons-method-but-doesnt-w) – LAMBORGHINI

+0

它运作良好的一个非常具体的目的,但总体来说不是一个友好的在其他地方可移植地使用相同的代码。如果我能找到一种只使用UIButton属性的方法,它会更有帮助!我在这里发布我的规格:http://stackoverflow.com/questions/17077889/triggering-a-uibuttons-method-when-user-drags-finger-into-buttons-area – jake9115