tiene taptic sensibilidad presion plus personaliza pantalla funciona engine como calibrar aumentar activar ios9 3dtouch

ios9 - taptic - ios 9 iphone 6S Juega retroalimentación háptica o vibra



taptic engine iphone 7 (5)

A partir de iOS 10 , hay una nueva API pública para manejar la retroalimentación háptica: UIFeedbackGenerator .

let generator = UINotificationFeedbackGenerator() generator.notificationOccurred(.success)

Se sugiere llamar a .prepare() antes de usar el generador y enviar la retroalimentación ya que hay un ligero retraso entre los dos debido a que el hardware de retroalimentación requiere una "activación". Esto se puede hacer en viewDidLoad() o algo comparable si está esperando que la retroalimentación se dé poco después.

Consulte este blog para obtener una buena explicación de la nueva API y los comentarios disponibles:
https://www.hackingwithswift.com/example-code/uikit/how-to-generate-haptic-feedback-with-uifeedbackgenerator

Para iOS 9 y versiones anteriores , puede usar AudioToolBox como se describe en las otras publicaciones.

import AudioToolbox private let isDevice = TARGET_OS_SIMULATOR == 0 func vibrate() { if isDevice { AudioServicesPlaySystemSound(kSystemSoundID_Vibrate) } }

Una vez que el usuario fuerza el toque, quiero que el teléfono vibre como el comportamiento predeterminado.

¿Es háptico? Si es así, ¿cómo voy a hacer?


Creo que estás hablando del nuevo motor Taptic.

Desde apple.com: iPhone 6s le brinda comentarios en tiempo real tanto en pantalla como en forma de toques sutiles desde el motor Taptic . Estas respuestas corresponden a la profundidad con la que presiona la pantalla y le permiten saber qué acciones está realizando y qué puede esperar que ocurra.

Como sé, en realidad no hay una API pública para eso. Solo he encontrado este tutorial para implementar los comentarios de Taptic a través de la API privada.

//ATTENTION: This is a private API, if you use this lines of code your app will be rejected id tapticEngine = [[UIDevice currentDevice] performSelector:NSSelectorFromString(@"_tapticEngine") withObject:nil]; [tapticEngine performSelector:NSSelectorFromString(@"actuateFeedback:") withObject:@(0)];


Ejemplo en Swift (para iPhone 6S)

import AudioToolbox AudioServicesPlaySystemSound(1519) // Actuate `Peek` feedback (weak boom) AudioServicesPlaySystemSound(1520) // Actuate `Pop` feedback (strong boom) AudioServicesPlaySystemSound(1521) // Actuate `Nope` feedback (series of three weak booms)

Por si acaso, aquí hay ejemplos para iPhone 7/7 + .

En cuanto al toque de fuerza, primero debes detectar si está disponible:

func is3dTouchAvailable(traitCollection: UITraitCollection) -> Bool { return traitCollection.forceTouchCapability == UIForceTouchCapability.available }

y luego en eventos táctiles, estará disponible como touch.force

func touchMoved(touch: UITouch, toPoint pos: CGPoint) { let location = touch.location(in: self) let node = self.atPoint(location) //... if is3dTouchEnabled { bubble.setPressure(pressurePercent: touch.force / touch.maximumPossibleForce) } else { // ... } }

Aquí está mi blog con un ejemplo más detallado con ejemplos de código:
http://www.mikitamanko.com/blog/2017/02/01/swift-how-to-use-3d-touch-introduction/


Hay diferentes tipos de comentarios. Pruebe cada uno de ellos para descubrir qué es mejor para sus necesidades:

// 1, 2, 3 let generator = UINotificationFeedbackGenerator() generator.notificationOccurred(.error) generator.notificationOccurred(.success) generator.notificationOccurred(.warning) // 4 let generator = UIImpactFeedbackGenerator(style: .light) generator.impactOccurred() // 5 let generator = UIImpactFeedbackGenerator(style: .medium) generator.impactOccurred() // 6 let generator = UIImpactFeedbackGenerator(style: .heavy) generator.impactOccurred() // 7 let generator = UISelectionFeedbackGenerator() generator.selectionChanged()


Puedes usar lógica personalizada para lograr esto:

  • Detecte una fuerza aplicada en la pantalla por un usuario, usando las propiedades force y maximumPossibleForce de la clase UITouch .
  • Dependiendo de la cantidad de fuerza, puede vibrar el dispositivo después de un nivel particular.

Ejemplo:

- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [super touchesMoved:touches withEvent:event]; UITouch *touch = [touches anyObject]; CGFloat maximumPossibleForce = touch.maximumPossibleForce; CGFloat force = touch.force; CGFloat normalizedForce = force/maximumPossibleForce; NSLog(@"Normalized force : %f", normalizedForce); if (normalizedForce > 0.75) { NSLog(@"Strong"); // Vibrate device AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); } else { NSLog(@"Weak"); } }

  • Además, puede intentar establecer diferentes duraciones de vibración para diferentes niveles de fuerza con lógica personalizada.

Ejemplo:

// Vibrate device NSTimer * vibrationTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(vibrateDevice) userInfo:nil repeats:YES]; - (void) vibrateDevice { if(duration == 2) // duration is a public variable to count vibration duration { // Stop the device vibration [vibrationTimer invalidate]; return; } duration++; AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); }