如何获得iOS的触摸大小?
我明白, 这个回应清楚地表明,这是不可能的,没有私人函数调用。 因此,根据苹果的条款,这种方法不能用于App Store应用程序。
但是,一些应用程序似乎已经使用这个函数调用:
- 倒数第二的实际手掌拒绝没有预先定义的拒绝区域,像在笔记本高清
- Virtuoso的压力敏感度,他们称之为“TrueVelocity 2”
- GarageBand也用于压力敏感度
显然,尽pipe苹果受到限制,但这种方法已经在App Store应用程序中广泛使用。
tl; dr什么是iOS上的私人函数调用来获取触摸大小?
大小和压力是两种不同的动物。 倒数第二最有可能的testing是在某个区域进行大量的触摸(手掌毕竟有大面积的触摸)。
触摸“尺寸”不存在。 当手指触摸屏幕时会产生IOS触摸事件。 然后操作系统从触摸中取得一个中心点,这就是你得到的。 这不是CGRect,而是CGPoint。
虽然压力“更容易”。 请参阅此处了解变通方法: 使用加速计轻敲压力强度检测
虽然我看到你在私人API的市场,github承载了一些类转储: http : //github.com/kennytm/iphone-private-frameworks和https://github.com/nst/iOS-运行时,头
使用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); }
如果您对私有产品感兴趣(即不要将其提交给app store方法,那么您正在寻找 –
@interface UITouch (Private) -(float)_pathMajorRadius; @end
在我的(私人!)使用这个, 10
是一个很好的门槛,以确定一个人何时使用他们的手指/手写笔或手放在设备上。
希望这对某人有帮助。 再一次, 不要在App Store中使用它。
FYI看起来像iOS 8引入了一些估计UITouch
的半径的属性: majorRadius
和majorRadiusTolerance
。
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITouch_Class/index.html