如何用IOS检测Fingersize?

时间:2011-07-27 10:28:05

标签: ios multi-touch

是否可以在IOS应用程序中检测到fingerize? 我在文档中读到了:

  

注意:屏幕上的手指提供了不同的级别   精度比鼠标指针。当用户触摸屏幕时,   接触区域实际上是椭圆形的,并且往往偏向下方   用户认为他或她触摸的点。这个“联系方式   贴片“的大小和形状也根据手指触摸而变化   屏幕,手指的大小,手指的压力   屏幕,手指的方向和其他因素。该   底层Multi-Touch系统为您分析所有这些信息   并计算一个接触点。

来源:https://web.archive.org/web/20121120152010/http://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/MultitouchEvents/MultitouchEvents.html

那么,这是否意味着SDK无法检测到物理手指大小?我想要完成的任务:我需要在我的OpenGL ES应用程序中使用虚拟“按钮”。如果有人像游戏手柄一样拿着iPhone,他会用一根手指按两个按钮(滚动拇指)。我希望我的意思是可以理解的......

有什么想法吗?

3 个答案:

答案 0 :(得分:11)

@fichek是对的,没有常规方法来获得指尖的大小。

然而,我在之前的项目中使用了一种“奇怪”的方式来做它,它只是起作用; - )

1.告诉我们的用户将两根手指放在屏幕上,越接近越好(就像Mac上的双指滚动手势): enter image description here

2.在 touchesBegan:withEvent:方法中获取 UITouches 中的两个 CGPoints ;

3.现在我们有CGPoint fingertip1center fingertip2center ,所以:

float fingertip_Diameter=fabsf(fingertip1center.x-fingertip2center.x);

4.手指非常接近,我们可能会忽略宽度的微小差异,因此 dX = =单根手指的实际宽度

5.宽度(dX)和指尖是成比例的,我们可以简单地使用

float fingertip_Size=M_PI*(dX/2)*(dX/2);

或找到更好的算法来满足您的需求; - )

6.一旦我们得到了尺寸(实际上我们只关心直径),它很容易实现一种通过测试各种包围点来优化触摸的方法,例如:

#define kTestLevelOne 5 //Testing 5 points:origin,left,right,up,down
#define kTestLevelTwo 9 //And the other 4 corners
-(BOOL)testSurroundingPoints:(CGPoint *)pt
{
   float prob_x[kTestLevelTwo]={0,-dX/2,dX/2,0,0,-dX/2,-dX/2,dX/2,dX/2};
   float prob_y[kTestLevelTwo]={0,0,0,dX/2,-dX/2,dX/2,-dX/2,dX/2,-dX/2};

   for(int i=0;i<kTestLevelTwo;i++)
   {
      if([self gotItAtX:pt.x+prob_x[i] andY:pt.y+prob_y[i]]==YES)
       {
           NSLog(@"Got It!");
           Return YES;
           //Or break; We don't need to try more points!
       }
   }
   return NO;
}

希望这些可以提供帮助!

Yichao Peak Ji

答案 1 :(得分:5)

实际上,有一种获得触摸半径的方法:

-(void)touchesBegan:(NSSet *)touches 
      withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGFloat touchSize = [[touch valueForKey:@"pathMajorRadius"] floatValue];
    NSLog(@"touch size is %.2f", touchSize);
}

来源: http://easyplace.wordpress.com/2013/04/09/how-to-detect-touch-size-in-ios/

答案 2 :(得分:2)

iOS会在幕后进行各种手指大小/角度/位置计算,因此无法检测除触摸计算位置之外的任何内容。但是,这足以让您知道手指在游戏手柄的哪个部分。

正如@marcus提到的那样,你应该实现touchesMoved:withEvent:方法并检查触摸的位置,以确定它是在左/右/上/下/中心还是你想要的任何“按钮”。