是否有任何方式在所有这一切,我可以告诉多难的画面是被压
题
我想找到的压力。我只是不知道如何实现这一结果与出越狱它并得到原触数据。任何人都不会知道我怎么会做这种事?
解决方案
你不能得到的压力从SDK 也不 无证件的方法。但是你 可以 检测的大小与无证件的方法。
在GSEvent,这是一个低级别的代表UIEvent,有一种结构称为 GSPathInfo 与成员:
typedef struct GSPathInfo {
unsigned char pathIndex; // 0x0 = 0x5C
unsigned char pathIdentity; // 0x1 = 0x5D
unsigned char pathProximity; // 0x2 = 0x5E
CGFloat pathPressure; // 0x4 = 0x60
CGFloat pathMajorRadius; // 0x8 = 0x64
CGPoint pathLocation; // 0xC = 0x68
GSWindowRef pathWindow; // 0x14 = 0x70
} GSPathInfo;
我们注意到,有一个 pathPressure
和 pathMajorRadius
.我可以向你保证压力件是没有用的–它 总是 给0.然而 pathMajorRadius
不会含有有意义的信息–它提供了主要的半径的触摸以毫米为单位。你可以因此得到一个非常粗略的估计,如果它是一个沉重的触摸或者轻轻一触从该半径。
-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
GSEventRef gsevent = [event _gsEvent];
GSPathInfo first_touch = GSEventGetPathInfoAtIndex(gsevent, 0);
if (first_touch.pathMajorRadius >= 9)
NSLog(@"huge (heavy) touch");
else
NSLog(@"little (light) touch");
}
让我再次警告你这是 无证件 你不应该用它在简单的应用程序。
编辑:在3.2和上 pathMajorRadius
一GSPathInfo也可作为一个 无证件 酒店UITouch:
@property(assign, nonatomic, setter=_setPathMajorRadius:) CGFloat _pathMajorRadius;
所以上述代码可以被改写使用纯客观-C:
-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
UITouch* any_touch = [touches anyObject];
if (any_touch._pathMajorRadius >= 9)
NSLog(@"huge (heavy) touch");
else
NSLog(@"little (light) touch");
}
其他提示
作为的8.0, UITouch
有一个公共的 majorRadius
酒店告诉你的近似大小的接触。
在的iOS 3.2和4.0可以更直接地得到的值是这样的:
UITouch* touch = ...// get the touch object
float radius = [[touch valueForKey:@"pathMajorRadius"] floatValue];
还没App Store的批准,但方便的自定义的东西。
这是不可能的SDK。它不以任何公开的数据。而且屏幕不感压力,而阉甚至报道触摸“大小”的OS是未知的。那么可悲的是,你正在试图做的是不可能在合法的应用程序。
我知道,因为我问了同样的事情:能否iPhone检测触摸的大小?
不隶属于 StackOverflow