Gibt es eine Möglichkeit überhaupt, dass ich sagen kann, wie hart der Bildschirm gedrückt wird

StackOverflow https://stackoverflow.com/questions/2103447

  •  21-09-2019
  •  | 
  •  

Frage

Ich möchte den Druck der Berührung zu finden. Ich weiß nur nicht, wie dieses Ergebnis mit tun, um es Jailbreaking und die rohen Berührungsdaten zu bekommen. Wer weiß, wie ich dies tun würde?

War es hilfreich?

Lösung

Sie können den Druck nicht aus dem SDK erhalten noch undokumentierten Methoden. Jedoch Sie können erkennen die Größe der Berührung mit undokumentierten Methoden.


In der GSEvent, die eine untergeordnete Darstellung UIEvent, gibt es eine Struktur, wie GSPathInfo mit Mitgliedern:

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;

Wir stellen fest, dass es eine pathPressure und pathMajorRadius ist. Ich kann Ihnen versichern, das Druckelement ist nutzlos - es immer gibt 0. Allerdings tut pathMajorRadius aussagekräftige Informationen enthalten - es gibt den großen Radius der Berührung in Millimeter. Sie können daher eine extrem grobe Schätzung geben, wenn es aus dem Radius eine schwere Berührung oder leichte Berührung ist.

  -(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");
  }

Lassen Sie mich Sie warnen, auch dies ist ohne Papiere und Sie sollten es nicht verwenden in App Store apps.


Edit: Am 3.2 und oberhalb der pathMajorRadius eines GSPathInfo ist auch als eine ohne Papiere Immobilien in UITouch:

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

so der obigen Code neu geschrieben werden könnte, Objective-C unter Verwendung von reinem:

  -(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");
  }

Andere Tipps

Wie von iOS 8.0, UITouch eine öffentliche majorRadius Eigenschaft hat, die Sie die ungefähre Größe des Berührungs erzählt.

In iOS 3.2 und 4.0 den Wert mehr direkt wie folgt zu erreichen:

UITouch* touch = ...// get the touch object
float radius = [[touch valueForKey:@"pathMajorRadius"] floatValue];

Noch nicht App Store zugelassen, aber praktisch für benutzerdefiniertes Zeug.

Es ist nicht möglich, mit dem SDK. Es ist nicht aussetzen, dass die Daten in irgendeiner Weise. Und der Bildschirm ist nicht sinn Druck, und ob es sich sogar berühren „Größe“ der OS-Reports ist nicht bekannt. So traurig, was Sie versuchen, auf einer legit Anwendung ist nicht möglich zu tun.

Ich weiß, weil ich die gleiche Sache gestellt: Kann die iPhone erkennt die Größe eines Touch?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top