Question

Je veux trouver la pression du contact. Je ne sais pas comment accomplir ce résultat avec des jailbreaking et obtenir les données tactiles brutes. Est-ce que quelqu'un sait comment je faire?

Était-ce utile?

La solution

Vous ne pouvez pas obtenir la pression du SDK ni méthodes non documentées. Cependant, vous peut détecter la taille du contact avec des méthodes non documentées.


Dans le GSEvent, qui est une représentation de niveau inférieur de UIEvent, il y a une structure connue sous le nom GSPathInfo avec les membres:

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;

On constate qu'il ya un pathPressure et pathMajorRadius. Je peux vous assurer que l'élément de pression est inutile - elle toujours donne 0. Cependant pathMajorRadius contient bien des informations significatives - il donne au grand rayon de la touche en millimètres. Vous pouvez donc donner une estimation très approximative si elle est un peu lourde ou légère touche du rayon.

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

Laissez-moi vous préviens à nouveau c'est non documentées et vous ne devriez pas l'utiliser dans les applications AppStore.


Edit: Sur 3.2 et au-dessus du pathMajorRadius d'un GSPathInfo est également disponible en tant que non documentées propriété UITouch:

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

de sorte que le code ci-dessus peut être réécrite en utilisant pur 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");
  }

Autres conseils

Au iOS 8,0, UITouch a une propriété publique majorRadius qui vous indique la taille approximative du contact.

vous pouvez dans iOS 3.2 et 4.0 obtenir la valeur plus directement comme ceci:

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

Pas encore App Store approuvé, mais à portée de main pour des trucs sur mesure.

Il est impossible avec le SDK. Il n'expose pas que les données de toute façon. Et l'écran ne pas de sens la pression, et il rend même wether toucher « taille » à l'OS est inconnue. Donc, malheureusement, ce que vous essayez de faire est impossible sur une application légitime.

Je le sais parce que j'ai demandé la même chose: peut-il iPhone détecter la taille d'une touche?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top