2011-07-27 25 views
7

是否有可能在IOS應用程序中檢測fingerize? 我讀過的文檔中:如何使用IOS檢測Fingersize?

注:在屏幕上的手指,得到一個非常不同的電平的比鼠標指針 精度。當用戶觸摸屏幕時,接觸面積 實際上是橢圓形的,而且往往在用戶認爲他或她感動在下面 偏移點。該「接觸 補丁」的大小和形狀也根據手指觸摸屏幕,手指大小,手指在屏幕上的壓力,手指的方向以及其他因素而變化。底層多點觸控系統 爲您分析所有這些信息,並計算出單個觸摸點。

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

那麼,這是否意味着孤單與SDK不可能檢測物理fingersize?我想要實現的是:我需要在我的OpenGL ES應用程序中使用虛擬的「按鈕」。如果有人拿着iPhone像遊戲手柄,他會用一根手指按兩個按鈕(從拇指滾下來)。我希望它可以理解我的意思......

任何想法?

+0

你可以只處理'(無效)touchesMoved:(NSSet中*)觸及事件:(UIEvent *)event'並檢查給定觸摸的'locationInView'。所以你會有一個遊戲手柄視圖/區域,並檢查觸摸移動哪個部分被擊中/覆蓋。 – marcus

+0

但我只能從locationInView中檢索一個CGPoint,而不是兩個按鈕位置。所以iOS似乎只檢測到一個「blob」(不是兩個 - 大拇指不會被檢測爲2個觸摸)... – Constantin

+2

您仍然可以在遊戲手柄視圖內對兩個按鈕都有效的區域 - 想想按鈕相互交叉。 – marcus

回答

11

@fichek是對的,沒有規律的方式來獲得指尖的大小。

但是,我用了一個「奇怪」的方式在我以前的項目做到這一點,它只是工作;-)

1.Tell我們的用戶將兩個手指在屏幕上一起,越接近更好(如在Mac兩手指滾動手勢): enter image description here

2.註冊兩個CGPointsUITouches的touchesBegan:withEvent:方法方法;

3.Now我們CGPoint fingertip1centerfingertip2center,所以:

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

4.手指非常接近,我們可以忽略寬度的微小差異,因此DX的==真實手指的真實寬度

5。寬度(DX)和fingertipsize是成比例的,我們可以簡單地使用

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; 
} 

希望這些能幫助!

已超高峯季

+0

有趣的方式!非常有用 - 謝謝! – Constantin

2

iOS會在幕後進行各種手指大小/角度/位置計算,所以除了計算出的觸摸位置之外,沒有辦法檢測到任何東西。但是,這些信息足以讓您知道手指放在手柄的哪一部分。

正如@marcus提到的,你應該實現touchesMoved:withEvent:方法並檢查觸摸的位置,以確定它是否在左/右/上/下/中或任何你想要的「按鈕」。