2011-08-24 14 views
7

Ho un UIImageView che si trova all'interno di un altro UIView.UIImageView "schiacciato" dopo CGAffineTransformMakeRotation

ho ruotare l'UIImageView con qualcosa di simile:

object.transform=CGAffineTransformMakeRotation(angle) 

Quando l'UIView esterno non viene ruotato, e può utilizzare CGAffineTransformMakeRotation per ruotare l'UIImageView, e funziona correttamente.

Tuttavia, quando l'UIView esterno viene ruotato e quindi ruoto UIImageView ("angolo" diverso da zero sopra) - UIImageView appare "schiacciato" o "appiattito".

Questo sembra costantemente peggiorare e peggiorare poiché viene ruotato da diverse angolazioni.

Perché sta succedendo? L'UIView esterno modifica la matrice di trasformazione che sto modificando di nuovo in base alla sua esplicita impostazione?

Come ruotare un UIImageView in un UIView ruotato e farlo ruotare correttamente?

risposta

15

Magari il tuo UIIamgeView è autorizzato dalla sua superview.

Si può provare a disabilitare la capacità ridimensionamento automatico impostando:

imageView.autoresizingMask = UIViewAutoresizingNone;

o se semplicemente non si vuole iOS per cambiare automaticamente la dimensione del vostro ImageView, ma ancora voglia per impostare automaticamente la posizione per voi , è possibile chiamare:

imageView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin;

Ditemi se avete ancora problemi.

+0

Ah ... pensiero intelligente! Potrebbe essere "squishing" non quando viene necessariamente ruotato, ma piuttosto dopo un cambiamento di orientamento, che in effetti ridimensiona l'UIView [esterno]! Ci proverò stasera! Grazie! – Brad

+0

+1 risposta ha dato i suggerimenti che dovevo ricordare per disattivare il layout automatico nella vista di livello superiore. – Olie

3

L'antialiasing è il processo mediante il quale i bordi di una vista si fondono con i colori del livello sottostante. L'antialiasing per i bordi delle viste può essere abilitato a livello di sistema impostando il flag UIViewEdgeAntialiasing nel file info.plist dell'app, ma come avverte la documentazione, questo può avere un impatto negativo sulle prestazioni (perché richiede Core Animation per campionare i pixel dal buffer di rendering sotto il livello per calcolare la miscelazione).

Renders con antialisasing bordo = YES