2012-01-14 12 views
5

Entiendo que this response indica claramente que esto no es posible sin una llamada de función privada. Por lo tanto, de acuerdo con los términos de Apple, este enfoque no se puede utilizar en una aplicación App Store.¿Cómo obtener el tamaño táctil en iOS?

Sin embargo, algunas aplicaciones ya parecen utilizar esta función llamada:

  • Penultimate de rechazo real de palma, sin una zona de rechazo predefinido como en Note Taker HD
  • Virtuoso de sensibilidad a la presión, lo que ellos llaman "TrueVelocity 2"
  • GarageBand también para sensibilidad a la presión

Claramente, este enfoque ya se usa ampliamente en la App Store de aplicaciones Despi las restricciones de Apple.

tl; dr ¿Cuál es la función privada llamada en iOS para obtener el tamaño táctil?

+1

GarageBand utiliza el acelerómetro para la velocidad de la prueba táctil - el supuesto en que al final es incorrecto. – Till

Respuesta

5

El tamaño y la presión son dos animales diferentes. Penúltima prueba más probable para una gran cantidad de toques en un área determinada (las palmas tienen un área grande después de todo, generan toneladas de toques).

Touch "size" no existe. Los eventos táctiles IOS se generan cuando un dedo entra en contacto con la pantalla. El sistema operativo toma un punto central del toque y eso es lo que obtienes. No es un CGRect, es un CGPoint.

Sin embargo, la presión es 'más fácil'. Vea aquí una solución: Tap pressure strength detection using accelerometer

Y mientras veo que está en el mercado para la API privadas, github alberga una serie de vertederos de clase: http://github.com/kennytm/iphone-private-frameworks y https://github.com/nst/iOS-Runtime-Headers

+0

Lástima que no tienen .m –

+0

Sé que esta es una vieja pregunta, pero parece que los tiempos han cambiado. Ver la respuesta de Peter Kämpf. – SwiftsNamesake

5

Si estás interesado en el sector privado (es decir, , no envíe esta al método tienda de aplicaciones, que está buscando -

@interface UITouch (Private) 
-(float)_pathMajorRadius; 
@end 

En mi uso (! privada) de este, 10 fue un buen umbral para determinar cuando una persona estaba usando su dedo/lápiz o apoyando la mano en el dispositivo.

Espero que esto sea útil para alguien. De nuevo, no lo use en App Store.

12

Con iOS8, puede acceder a la propiedad touch.majorRadius, que es un CGFloat, crece en múltiplos de 10,45 y es proporcional al radio de la zona tocada en milímetros. touch.majorRadiusTolerance es la segunda propiedad que se puede usar con iOS8 y brinda la precisión de la información del radio táctil. En mis mediciones, siempre fue la mitad del tamaño del paso majorRadius.

En el iPad Pro, la pantalla táctil es tres veces más sensible y capta la señal débil del lápiz de Apple, que está por debajo del umbral de generación de informes en los modelos de iPad antiguos. El radio de toque del Lápiz se informa como 0.25, mientras que incluso el menor contacto con los dedos se reportará como 20.84 o más.

utilizar de esta manera dentro de su método de UIView:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

// Regular multitouch handling. 
    [super touchesBegan:touches withEvent:event]; 

    CGPoint center = [touch locationInView:self]; 
    NSLog(@"Touch detected at %6.1f | %6.1f", center.x, center.y); 
    CGFloat radius = [touch majorRadius]; 
    NSLog(@"Radius = %5.1f; lower limit = %5.1f; upper limit = %5.1f", radius, radius-touch.majorRadiusTolerance, radius+touch.majorRadiusTolerance); 
} 
+0

Esto realmente debería ser la respuesta aceptada en este punto ... – SwiftsNamesake

Cuestiones relacionadas