我想找到的压力。我只是不知道如何实现这一结果与出越狱它并得到原触数据。任何人都不会知道我怎么会做这种事?

有帮助吗?

解决方案

你不能得到的压力从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");
  }

让我再次警告你这是 无证件 你不应该用它在简单的应用程序。


编辑:在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检测触摸的大小?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top