gpt4 book ai didi

iphone - 有什么方法可以让我知道按屏幕的力度有多大

转载 作者:行者123 更新时间:2023-12-03 18:25:17 26 4
gpt4 key购买 nike

我想找到触摸的压力。我只是不知道如何在不越狱并获取原始触摸数据的情况下实现该结果。有谁知道我会怎么做?

最佳答案

您无法从 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;

我们注意到有一个pathPressurepathMajorRadius。我可以向您保证压力构件是无用的 - 它总是给出 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");
}

让我再次警告您,这是未记录的,您不应该在 AppStore 应用中使用它。

<小时/>

编辑:在 3.2 及更高版本中,GSPathInfo 的 pathMajorRadius 也可以作为 UITouch 中的未记录属性:

@property(assign, nonatomic, setter=_setPathMajorRadius:) CGFloat _pathMajorRadius;

所以上面的代码可以使用纯 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");
}

关于iphone - 有什么方法可以让我知道按屏幕的力度有多大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2103447/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com