Jab*_*Jab 13 iphone uitouch pressure
我想找到触摸的压力.我只是不知道如何通过越狱和获取原始触摸数据来实现该结果.有谁知道我会怎么做?
ken*_*ytm 28
您无法从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;
Run Code Online (Sandbox Code Playgroud)
我们注意到有一个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");
}
Run Code Online (Sandbox Code Playgroud)
让我再次警告你,这是没有记录的,你不应该在AppStore应用程序中使用它.
编辑:在3.2及以上版本的pathMajorRadiusGSPathInfo也可以作为UITouch中的未记录属性使用:
@property(assign, nonatomic, setter=_setPathMajorRadius:) CGFloat _pathMajorRadius;
Run Code Online (Sandbox Code Playgroud)
所以上面的代码可以使用纯Objective-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");
}
Run Code Online (Sandbox Code Playgroud)
jmi*_*nor 12
在iOS 3.2和4.0中,您可以更直接地获取值:
UITouch* touch = ...// get the touch object
float radius = [[touch valueForKey:@"pathMajorRadius"] floatValue];
Run Code Online (Sandbox Code Playgroud)
仍然没有App Store批准,但方便的自定义的东西.
| 归档时间: |
|
| 查看次数: |
9044 次 |
| 最近记录: |