Domanda

Ho una serie di immagini all'interno di un ViewController.

Sono "galleggiante", trasformando i loro strati individuali:

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

Questo dà l'effetto di rendere gli strati galleggiare sopra lo schermo -. Nel simulatore, non ci sarebbe effetto visibile (che è corretto)

Quello che voglio fare è di avere un effetto in cui lo spostamento di un dispositivo di sinistra / destra / avanti / indietro o farebbe sembrare sottile come gli strati sono flottanti. Quando si inclina il dispositivo verso sinistra, si deve l'angolo l'intera vista verso destra. Questo farà sentire come spostare il dispositivo permette di vedere dietro gli angoli -. Vale a dire che vi darà una sensazione che le immagini in realtà sono flottanti sopra lo schermo, perché avrebbero muoversi a velocità diverse (in base alla loro z-index)

Ho fatto un progetto di test ( file di progetto qui ), che ha un progetto di esempio che questo demo .

Il mio problema è che io non sono una persona per la matematica, così sto lottando con il modo migliore per simulare l'effetto di galleggiamento sottile. In questo momento, ho un listener per DeviceMotion, che poi fa:

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

Questo è molto vicino a quello che voglio, ma non è esattamente a destra.

Credo che questo effetto sarà qualcosa che potrebbe essere utilizzato in un certo numero di applicazioni diverse. Spero di estendere questo a qualcosa di un amico e io stiamo lavorando su con riconoscimento dei volti (quindi sarebbe spostare la vista padre in base al movimento del volto di una persona - anche quando tengono il telefono / dispositivo perfettamente immobile).

mi rendo conto mi metterò persone che rispondono "basta usare OpenGL". Questa non è la necessità risposta che - a meno di pubblicare un pezzo di codice che mostra come integrare all'interno di questo progetto. (Io non sono alla ricerca di nuovi problemi da risolvere: -).

Anche in questo caso, il progetto completo è qui (vista galleggianti iphone ) per tutti coloro che vorrebbero vedere l'effetto come è adesso. (Quando questo è in funzione, lascerò il progetto completo (di lavoro) collegato qui per i posteri.)

È stato utile?

Soluzione

credo di aver ottenuto questo! Utilizzare questa:

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

funziona come fascino per me, se si vuole assi a fogli mobili, è sufficiente aggiungere il segno meno di fronte a quelle 1s.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top