2010-08-16 2 views
16

Sto cercando di ruotare la proprietà imageView di un UIBUtton senza ridimensionarlo. L'immagine in questione è 24x18 - più larga di quanto sia alta - ma una volta ruotata in posizione l'immagine viene ridimensionata per mantenere quelle dimensioni - lasciandomi un'immagine molto schiacciata. Come posso evitare questo?Come ruotare imageView in un UIButton e NON ridimensionarlo

Qui di seguito è il mio codice ..

-(IBAction)rotateButton 
{ 
NSLog(@"Rotating button"); 

[UIView beginAnimations:@"rotate" context:nil]; 
[UIView setAnimationDuration:.5f]; 
if(CGAffineTransformEqualToTransform(button.imageView.transform, CGAffineTransformIdentity)) 
{ 
    button.imageView.transform = CGAffineTransformMakeRotation(M_PI/2); 
} else { 
    button.imageView.transform = CGAffineTransformIdentity; 
} 
[UIView commitAnimations]; 
} 

Questo non accade se applico la trasformazione al pulsante, invece di button.imageView, quindi immagino che sia una proprietà di ImageView che ho Non sto preparando bene.

I suoi indizi & fischi sono i benvenuti

M.

+0

FWIW, ho la schiacciata risultato anche quando la trasformazione viene applicata al pulsante. E non succede sul simulatore, solo sul dispositivo. – rounak

risposta

1

Ho visto la proprietà UIImageView di UIButtons si comportano in modo molto strano - sembra che alcune delle loro proprietà sono di sola lettura, tra cui l'UIViewContentMode ambientazione è di questo che stai parlando qui.

La soluzione migliore che ho trovato è quella di imitare l'installazione del "pulsante contenente un'immagine" con un UIImageView separato e un UIButton vuoto personalizzato in cima ad esso. Ti dà molta più flessibilità per gestire l'immagine.

+1

Ho avuto un problema simile con le normali UIImageViews e il contenuto diventava folle quando ruotate (NON ciò che dovrebbe accadere) che è stato risolto impostando contentMode su "Center" - grazie per questa intuizione! – Adam

47

Applicare il seguente codice sull'inizializzazione della vista da qualche parte in vista è stato caricato. Questo aiuterà. La risposta che hai di cui sopra non è una vera risposta :)

button.imageView.clipsToBounds = NO; 
button.imageView.contentMode = UIViewContentModeCenter; 
+2

Questo ha risolto il problema per me! –

+0

Funziona perfettamente! –

+1

grazie @Nikita questo funziona per me! – Desmond

1

ho trovato che sottoclasse UIButton per rimuovere la trasformazione durante layoutSubviews lavorato, in questo modo:

class RotatableImageButton: UIButton { 
    override func layoutSubviews() { 
     let originalTransform = imageView?.transform 
     imageView?.transform = CGAffineTransformIdentity 
     super.layoutSubviews() 
     if let originalTransform = originalTransform { 
      imageView?.transform = originalTransform 
     } 
    } 
} 
+0

funziona bene per me! – Mete