如何用IOS检测Fingersize?

前端之家收集整理的这篇文章主要介绍了如何用IOS检测Fingersize?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以在 IOS应用程序中检测到fingerize?
我在文档中读到:

Notes: A finger on the screen affords a much different level of
precision than a mouse pointer. When a user touches the screen,the
area of contact is actually elliptical and tends to be offset below
the point where the user thinks he or she touched. This “contact
patch” also varies in size and shape based on which finger is touching
the screen,the size of the finger,the pressure of the finger on the
screen,the orientation of the finger,and other factors. The
underlying Multi-Touch system analyzes all of this information for you
and computes a single touch point.

资料来源:http://developer.apple.com/library/ios/#DOCUMENTATION/EventHandling/Conceptual/EventHandlingiPhoneOS/MultitouchEvents/MultitouchEvents.html

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

有任何想法吗?

解决方法

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

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

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

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,dX/2};
   float prob_y[kTestLevelTwo]={0,-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

猜你在找的iOS相关文章