Question

J'ai une série d'images dans un ViewController.

Je les « flottant » en transformant leurs couches:

img.layer.transform = CATransform3DMakeTranslation(0.0f, 0.0f, myZ);

Cela donne à l'effet de rendre les couches flottent au-dessus de l'écran -. Dans le simulateur, il n'y aurait pas d'effet visible (ce qui est correct)

Ce que je veux faire est d'avoir un effet où le déplacement d'un dispositif gauche / droite / avant / arrière ou ferait paraître subtilement comme les couches flottaient. Lorsque vous inclinez l'appareil vers la gauche, il angle si la vue entière à droite. Cela fera sentir comme déplacer l'appareil vous permet de voir dans les virages -.-À-dire qu'il donnera un sentiment que les images sont vraiment flotter au-dessus de l'écran, car ils se déplaçaient à des vitesses différentes (en fonction de leur z-index)

J'ai fait un projet de test (fichier de projet ) qui a un exemple de projet qui démos ce .

Mon problème est que je ne suis pas une personne de maths, donc je me bats avec la meilleure façon de simuler l'effet subtil flottant. En ce moment, j'ai un écouteur pour DeviceMotion, qui fait alors:

self.view.layer.sublayerTransform = CATransform3DMakeRotation(20.0f * M_PI / 180.0f, 2*motion.attitude.pitch, -2*motion.attitude.roll, 0);

Ceci est très proche de ce que je veux, mais ce n'est pas tout à fait exact.

Je pense que cet effet sera quelque chose qui pourrait être utilisé dans un certain nombre d'applications différentes. J'espère étendre à quelque chose d'un ami et moi travaillons avec la détection des visages (il déplacerait le point de vue des parents sur la base du mouvement du visage d'une personne - alors même qu'ils gardent le téléphone / appareil parfaitement immobile).

Je me rends compte que je vais amener les gens répondre « il suffit d'utiliser OpenGL ». Ce n'est pas la réponse I besoin - à moins que vous postez un morceau de code qui montre comment l'intégrer dans ce projet. (Je ne cherche pas de nouveaux problèmes à résoudre: -.)

Encore une fois, le projet complet est ici ( vues flottant iphone ) pour tous ceux qui aimeraient voir l'effet comme il est en ce moment. (Lorsque cela fonctionne, je quitterai l'ensemble du projet (travail) lié ici pour la postérité.)

Était-ce utile?

La solution

Je pense que j'ai ça! Utilisez ceci:

    [appDelegate.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue]
                                                   withHandler:
     ^(CMDeviceMotion *motion, NSError *error) {

         CATransform3D transform;
         transform = CATransform3DMakeRotation(motion.attitude.pitch, 1, 0, 0);
         transform = CATransform3DRotate(transform, motion.attitude.roll, 0, 1, 0);

         self.view.layer.sublayerTransform = transform;
     }];

Travaux comme un charme pour moi, si vous voulez axes à feuilles mobiles, il suffit d'ajouter le signe moins devant ces 1s.

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