@fichek是對的,沒有規律的方式來獲得指尖的大小。
但是,我用了一個「奇怪」的方式在我以前的項目做到這一點,它只是工作;-)
1.Tell我們的用戶將兩個手指在屏幕上一起,越接近更好(如在Mac兩手指滾動手勢):
2.註冊兩個CGPoints從UITouches在的touchesBegan:withEvent:方法方法;
3.Now我們CGPoint fingertip1center和fingertip2center,所以:
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;
}
希望這些能幫助!
已超高峯季
你可以只處理'(無效)touchesMoved:(NSSet中*)觸及事件:(UIEvent *)event'並檢查給定觸摸的'locationInView'。所以你會有一個遊戲手柄視圖/區域,並檢查觸摸移動哪個部分被擊中/覆蓋。 – marcus
但我只能從locationInView中檢索一個CGPoint,而不是兩個按鈕位置。所以iOS似乎只檢測到一個「blob」(不是兩個 - 大拇指不會被檢測爲2個觸摸)... – Constantin
您仍然可以在遊戲手柄視圖內對兩個按鈕都有效的區域 - 想想按鈕相互交叉。 – marcus