2010-05-02 9 views
6

Questa è proprio la parodia dell'iPhone. Sto lavorando su una libreria, ma ho ristretto il mio problema a un codice molto semplice. Ciò che questo codice fa è creare una vista 50 x 50, applica una trasformazione di rotazione di alcuni gradi, quindi sposta il riquadro verso il basso alcune volte. Il risultato è che la vista 50x50 ora è molto più grande.Ruota usando una trasformazione, quindi cambia l'origine della trama e la vista si espande?

Ecco il codice:

// a simple 50x50 view 
UIView *redThing = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 50, 50)]; 
redThing.backgroundColor = [UIColor redColor]; 

[self.view addSubview:redThing]; 

// rotate a small amount (as long as it's not 90 or 180, etc.) 
redThing.transform = CGAffineTransformRotate(redThing.transform, 0.1234); 

// move the view down 2 pixels 
CGRect newFrame = CGRectMake(redThing.frame.origin.x, redThing.frame.origin.y + 2, redThing.frame.size.width, redThing.frame.size.height); 
redThing.frame = newFrame; 

// move the view down another 2 pixels 
newFrame = CGRectMake(redThing.frame.origin.x, redThing.frame.origin.y + 2, redThing.frame.size.width, redThing.frame.size.height); 
redThing.frame = newFrame; 

// move the view down another 2 pixels 
newFrame = CGRectMake(redThing.frame.origin.x, redThing.frame.origin.y + 2, redThing.frame.size.width, redThing.frame.size.height); 
redThing.frame = newFrame; 

// move the view down another 2 pixels 
newFrame = CGRectMake(redThing.frame.origin.x, redThing.frame.origin.y + 2, redThing.frame.size.width, redThing.frame.size.height); 
redThing.frame = newFrame; 

Quindi, cosa diavolo sta succedendo? Ora, se sposto la vista applicando una trasformazione di traduzione, funziona perfettamente. Ma questo non è quello che voglio fare e questo dovrebbe funzionare ugualmente.

Qualche idea?

+0

Forse la trasformazione viene applicata dopo i turni? – Artelius

risposta

14

Dalla documentazione UIView:

Se la trasformata di proprietà è anche impostato, utilizzare i limiti e le proprietà del centro, invece; in caso contrario, l'animazione delle modifiche alla proprietà frame non riflette correttamente la posizione effettiva della vista.

Avviso: se la proprietà di trasformazione non è la trasformazione dell'identità, il valore di questa proprietà non è definito e pertanto deve essere ignorato.

In altre parole, sarebbe diffidare della proprietà frame quando un transform è impostato.

+1

Wow. Grazie ... non l'ho visto nei documenti. Sorprendente. – ZaBlanc

+0

@ZaBlanc, se questa è la risposta corretta dovresti contrassegnarla come tale. –

+0

Fatto. Ho appena imparato 5 minuti fa circa il segno di spunta. Rimediare a tutti i miei vecchi messaggi ora. ;-) – ZaBlanc

Problemi correlati