Frage

Ich habe eine Reihe von Bildern in einem ViewController.

Ich "schweben" sie, indem ich ihre individuellen Schichten verwandele:

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

Dies gibt den Effekt, dass die Schichten über dem Bildschirm schweben - im Simulator würde es keinen sichtbaren Effekt geben (was korrekt ist).

Ich möchte einen Effekt haben, wenn das Bewegen eines Geräts links/rechts/vorwärts/oder hinten auf subtile Weise so aussieht, als würden die Schichten schweben. Wenn Sie das Gerät nach links neigen, sollte es die gesamte Ansicht nach rechts winkeln. Dadurch wird es so anfühlt, als würde Sie das Gerät bewegen, wenn Sie die Ecken herum sehen-dh es wird das Gefühl haben, dass die Bilder wirklich über dem Bildschirm schweben, weil sie sich mit unterschiedlichen Raten bewegen (basierend auf ihrem Z-Index).

Ich habe ein Testprojekt gemacht (Projektdatei hier) das ein Beispielprojekt hat, das dies demonstriert.

Mein Problem ist, dass ich keine mathematische Person bin, daher kämpfe ich mit dem besten Weg, um den subtilen schwimmenden Effekt zu simulieren. Im Moment habe ich einen Zuhörer für Devicemotion, was dann:

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

Dies ist sehr nahe an dem, was ich will, aber es ist nicht genau richtig.

Ich denke, dieser Effekt wird etwas sein, das in einer Reihe verschiedener Anwendungen verwendet werden könnte. Ich hoffe, dass ich dies auf etwas ausdehnen kann, an dem ein Freund und ich mit der Gesichtserkennung arbeiten (damit die Elternansicht basierend auf der Bewegung des Gesichts einer Person bewegen - auch wenn sie das Telefon/Gerät perfekt halten).

Mir ist klar, dass ich Leute dazu bringen werde, "einfach OpenGL zu benutzen". Das ist nicht die Antwort, die ich brauche - es sei denn, Sie veröffentlichen einen Code -Stück, der zeigt, wie Sie ihn in dieses Projekt integrieren können. (Ich suche nicht nach neuen Problemen zu lösen. :-)

Auch hier ist das vollständige Projekt hier (iPhone schwimmende Ansichten) für alle, die den Effekt so sehen möchten, wie er gerade ist. (Wenn dies funktioniert, werde ich das vollständige (funktionierende) Projekt hier für die Nachwelt verknüpft lassen.)

War es hilfreich?

Lösung

Ich glaube, ich habe das! Benutze das:

    [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;
     }];

Funktioniert wie Charme für mich, wenn Sie Achsen umdrehen möchten, fügen Sie einfach ein minus Zeichen vor diesen 1s hinzu.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top