2013-07-22 14 views
6

Nel tentativo di adattare un'immagine a una visuale di ingrandimento, le immagini vengono scaricate e caricate dinamicamente e vi è una sola risoluzione disponibile per le app ios e Android.Regola UIImage in UIImageView

Così, devo immagini per mantenere il rapporto di aspetto e la scala alla larghezza, i impostare UIImageView modalità del contenuto di UIViewContentModeScaleAspectFill, ma centri immagine, così si va fuori dello schermo sia superiore e inferiore, le immagini vengono progettati in modo che il fondo non è necessario.

Come allineare l'immagine all'angolo in alto a sinistra?

E UIImageView può scalare anche la larghezza? o come posso farlo?

Grazie in anticipo.

EDIT:

ho provato setcliptobounds e che taglia l'immagine alla dimensione imageview, quello non è il mio problema.

UIViewContentModeTopLeft sta funzionando bene, ma ora non posso applicare UIViewContentModeScaleAspectFill o posso applicare entrambi?

+0

possibile duplicato di [UIViewContentModeScaleAspectFill non clipping] (http: // stackoverflow.it/questions/6638623/uiviewcontentmodescaleaspectfill-not-clipping) – Peres

+0

Usa UIViewContentModeTopLeft – Moxy

+0

Usa questo [imageView setClipsToBounds: YES]; –

risposta

9

Si potrebbe ridimensionare l'immagine per soddisfare la larghezza della visualizzazione dell'immagine.

È possibile utilizzare una categoria su UIImage che crea una nuova immagine con larghezza selezionata.

@interface UIImage (Scale) 

-(UIImage *)scaleToWidth:(CGFloat)width; 

@end 

@implementation UIImage (Scale) 

-(UIImage *)scaleToWidth:(CGFloat)width 
{ 
    UIImage *scaledImage = self; 
    if (self.size.width != width) { 
     CGFloat height = floorf(self.size.height * (width/self.size.width)); 
     CGSize size = CGSizeMake(width, height) 

     // Create an image context 
     UIGraphicsBeginImageContext(size); 

     // Draw the scaled image 
     [self drawInRect:CGRectMake(0.0f, 0.0f, size.width, size.height)]; 

     // Create a new image from context 
     scaledImage = UIGraphicsGetImageFromCurrentImageContext(); 

     // Pop the current context from the stack 
     UIGraphicsEndImageContext(); 
    } 
    // Return the new scaled image 
    return scaledImage; 
} 

@end 

In questo modo è possibile utilizzarlo per ridimensionare l'immagine

UIImage *scaledImage = [originalImage scaleToWidth:myImageView.frame.size.width]; 
myImageView.contentMode = UIViewContentModeTopLeft; 
myImageView.image = scaledImage; 
+0

Questa è la larghezza della scala ma non l'altezza, ho bisogno di mantenere le proporzioni. – Nanoc

+0

Ho frainteso ciò che volevi ottenere. Ho modificato -scaleToWidth :, dovrebbe essere corretto ora – Moxy

+0

Ive done me stesso ma ancora utile, grazie. – Nanoc

0

UIView che è la superclasse di UIImageView ha una proprietà contentMode. È possibile utilizzare la seguente costante per l'allineamento in alto a sinistra dell'immagine.

UIViewContentModeTopLeft 

Aligns the content in the top-left corner of the view. 

Per mantenere Aspect

UIViewContentModeScaleAspectFit 

Scales the content to fit the size of the view by maintaining the aspect ratio. Any remaining area of the view’s bounds is transparent. 
+0

Bello, la prima domanda è stata risolta, quindi come è possibile ridimensionare l'immagine in larghezza UIImageView? – Nanoc

+0

Non è possibile farlo se si desidera mantenere le proporzioni. Perché non ottieni la larghezza dell'immagine facendo image.size.width; e usalo per cambiare la larghezza di UIImageView. di quanto non devi allungare la tua immagine. –

+0

L'immagine sarà più grande dello schermo – Nanoc

0

È possibile non sia align e mantenere le proporzioni con UIImageView, tuttavia v'è una grande sottoclasse di UIImageView nome UIImageViewAligned che rende questo possibile per te. È possibile trovare questo progetto su github da here.
Quello che dovete fare è la seguente:

  1. prima copia di intestazione e implementazione da UIImageViewAligned-master/UIImageViewAligned/al progetto
  2. Inserire un oggetto ImageView dalla libreria di oggetti in IB alla vista.
  3. Cambio classe di ImageView a UIImageViewAligned in Identity Inspector dalle Utilità riquadro
  4. Allora aggiungi la tua allineamento desiderato come un percorso chiave nella User Defined Runtime Attributi sezione Identità ispettore

Questo è tutto. Esegui il tuo progetto per assicurartene.

+0

Certo che posso, la risposta di Moxy funziona perfettamente. – Nanoc

Problemi correlati