2015-11-13 2 views
1

J'ai un UIView dont la perspective je voudrais changer légèrement pendant que l'utilisateur tourne son appareil. Par exemple, lorsque l'utilisateur s'incline vers la droite, je veux que le côté gauche de la vue «augmente» tandis que la bonne taille «entre», mais seulement jusqu'à un certain point. Voici mon code à ce jour:Comment réinitialiser la position d'un UIView après un CATransform3D?

var dynamicTransform = CATransform3DIdentity 
     dynamicTransform.m34 = 1/(-500) 

     // Device Tilt 
     if motionManager.gyroAvailable { 
      motionManager.gyroUpdateInterval = 0.1/30 
      motionManager.startGyroUpdates() 
      motionManager.startGyroUpdatesToQueue(NSOperationQueue.mainQueue(), withHandler: { (gyroData, NSError) -> Void in 
       // Perspective Transform 
       dynamicTransform = CATransform3DRotate(dynamicTransform, CGFloat(Double(gyroData!.rotationRate.y) * M_PI/1080.0), 0, 0.1, 0) 
       dynamicTransform = CATransform3DRotate(dynamicTransform, -CGFloat(Double(gyroData!.rotationRate.x) * M_PI/1080.0), 0.1, 0, 0) 
       self.blueView.layer.transform = dynamicTransform 
      }) 

Tout fonctionne très bien, sauf pour quelques mises en garde:

1) Quand je retourne comme lorsque l'appareil a été lancé l'orientation initiale du dispositif, la vue est déformée (Il y a toujours une perspective appliquée). Il y a probablement quelque chose qui ne va pas dans ma logique mais je ne vois pas quoi ..

2) Parfois, la vue tourne dans le sens des aiguilles d'une montre/dans le sens inverse des aiguilles d'une montre et ne reste pas immobile. Toute aide serait grandement appréciée, merci!

Répondre

0

Avez-vous essayé d'envoyer layoutIfNeeded à la vue parente pour forcer une nouvelle mise en page après un changement d'orientation?

+0

Comment cela serait-il utile? – cyril