2012-02-23 10 views
6

Ho cercato tutti i post su google e stackoverflow ma non riesco a risolvere questo puzzle. Sto cercando di ricreare l'effetto che l'ormai famosa app todo 'Cancella' fa quando si aggiunge una nuova attività. Hanno una specie di animazione che dall'alto appare una nuova attività in una sorta di effetto cubo 3D. La cosa speciale che hanno è che quando si guarda da vicino gli angoli inferiori sinistro e destro rimangono sempre nello stesso punto.UIView 3DCube come Clear-app

In questo momento ho il seguente: un UIView di 320x460 impostato al punto 0,0 e un UIView di 320x460 impostato al punto (0, -460). Quello che voglio è che il primo UIView scenda nello stesso effetto cubico di Clear dall'alto. Questo è quello che ho finora:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    //startLoc is defined globally to remember the first position 
    startLoc = [[touches anyObject] locationInView:self]; 
} 

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    CGPoint location = [[touches anyObject] locationInView:self]; 
    float difference = location.y-startLoc.y;   

    if(diff > 0 && diff < 90) 
    { 
     //Init the transform 
     CATransform3D transform = CATransform3DIdentity; 
     transform.m34 = perspective; 
     //Rotate (radians is a degree-to radians function) 
     transform = CATransform3DRotate(transform, radians(90-diff), 1.0f, 0.0f, 0.0f); 
     //Also translate the view down   
     transform = CATransform3DTranslate(transform, 0.0f, 230+diff, 0.0f); 
     //the 230 is necessary I think for the Anchorpoint but I'm not sure 
     secondView.layer.transform = transform; 
}  

}

Esso funziona in qualche modo, ma non in modo corretto, non appena faccio la rotazione della vista diventa più grande e gli angoli in basso a sinistra e bottomright sono fuori vista. Se faccio la visualizzazione più piccola e poi faccio una scala 3D, è anche incasinata. Ho già risolto il problema di metà dell'immagine scomparendo impostando correttamente la zPosition dei livelli, ma questo è il massimo che ho. Ho provato a utilizzare il codice di altri progetti, ma tutti i loro effetti cubo 3D non sono uguali all'app "Cancella". L'unico che si avvicina è il progetto iCarousel, ma non sono in grado di utilizzare il codice corretto dall'app, non riesco a farlo funzionare. Qualcuno può aiutarmi?

risposta

2

Ecco alcuni link che riguardano specificamente il tema delle trasformazioni prospettiche UIView 3D:

http://www.sunsetlakesoftware.com/2008/10/22/3-d-rotation-without-trackball

http://watchingapple.com/2008/04/core-animation-3d-perspective/

Questo post è anche rilevante: How do I apply a perspective transform to a UIView?

+0

Ciao Adam, grazie per i link ma sfortunatamente li ho visti tutti ieri durante la ricerca. Come ho detto nel mio post, hanno fatto qualcosa di più speciale nell'app Clear e quei post non spiegano come hanno fatto. –

+0

Non c'è nulla di terribilmente speciale in ciò che Clear fa. Hai solo bisogno di capire la giusta combinazione di rotazione/traslazione/ancoraggio/posizione z, ecc. Mi sembra che il punto di ancoraggio sia il centro inferiore della vista, che viene inizialmente ruotato di 90 gradi attorno all'asse x (cioè verso "l'interno" del telefono). Quindi, quando la vista tabella viene spostata verso il basso, la nuova vista viene tradotta in modo che corrisponda alla parte superiore del contenuto esistente e venga nuovamente ruotata per essere parallela allo schermo. – UIAdam

+0

Bene, grazie per il tuo consiglio, in realtà ho usato una scrollview ora e ho impostato il punto di ancoraggio come hai detto e ha funzionato all'improvviso. Quando non si utilizza una vista a scorrimento l'immagine è sempre diventata più grande o qualcosa e ora non più! Grazie comunque! –