2012-01-14 47 views
5

據我所知,this response清楚地表明,這是不可能的,沒有私人函數調用。因此,根據Apple的條款,這種方法不能用於App Store應用程序。如何獲得iOS中的觸摸大小?

然而,一些應用程序似乎已經使用這個函數調用:在注

  • Penultimate實際手掌誤觸沒有預定的退出區域像刺輥HD
  • 炫技的壓力敏感度,他們稱之爲「TrueVelocity 2"
  • GarageBand中也爲壓力靈敏度

顯然,這種方法已被廣泛應用在應用商店的應用程式DESPI te蘋果的限制。

tl; dr什麼是iOS上的私人函數調用來獲取觸摸大小?

+1

GarageBand中使用加速計用於測試觸摸速度 - 你對最終的假設是錯誤的。 – Till 2012-01-14 20:53:09

回答

5

大小和壓力是兩種不同的動物。倒數第二最有可能的測試是在某個區域進行大量觸摸(手掌有大面積,產生大量觸摸)。

觸摸「大小」不存在。當手指觸摸屏幕時會生成IOS觸摸事件。然後操作系統從觸摸中取得一箇中心點,這就是你所得到的。這不是CGRect,而是CGPoint。

雖然壓力更容易。在這裏看到一個解決辦法:Tap pressure strength detection using accelerometer

雖然我看到你在市場上的私有API的是,github上承載了許多類轉儲:http://github.com/kennytm/iphone-private-frameworkshttps://github.com/nst/iOS-Runtime-Headers

+0

太糟糕了,他們沒有.m – 2012-03-15 15:15:48

+0

我知道這是一個古老的問題,但似乎時代已經改變。見PeterKämpf的回答。 – SwiftsNamesake 2018-01-16 16:00:01

5

如果你有興趣在私營(即,不提交這對應用商店的方法,你要找的 -

@interface UITouch (Private) 
-(float)_pathMajorRadius; 
@end 

在我的(!私人)使用這個,10是一個人用自己的手指時確定一個很好的閾值/手寫筆或將手放在設備上。

希望這對某人有幫助。再次,不要在App Store中使用它。

12

隨着iOS8上,您可以訪問touch.majorRadius屬性,這是一個CGFloat,生長在10.45倍數成正比,以毫米爲觸摸區域的半徑。 touch.majorRadiusTolerance是第二個可用於iOS8的屬性,並提供了觸摸半徑信息的準確性。在我的測量中,它始終是步長的majorRadius的一半。

在iPad Pro上,觸摸屏的靈敏度提高了三倍,並從蘋果鉛筆中提取出弱信號,低於舊款iPad型號的報告閾值。鉛筆的觸摸半徑報告爲0.25,而即使是最輕微的手指接觸也會報告爲20.84或更高。

您UIView的方法中使用這樣的:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

// Regular multitouch handling. 
    [super touchesBegan:touches withEvent:event]; 

    CGPoint center = [touch locationInView:self]; 
    NSLog(@"Touch detected at %6.1f | %6.1f", center.x, center.y); 
    CGFloat radius = [touch majorRadius]; 
    NSLog(@"Radius = %5.1f; lower limit = %5.1f; upper limit = %5.1f", radius, radius-touch.majorRadiusTolerance, radius+touch.majorRadiusTolerance); 
} 
+0

這應該是真正的接受答案在這一點上... – SwiftsNamesake 2018-01-16 15:59:00

相關問題