2015-04-26 10 views
8

Nell'applicazione iOS, ho 250x85pt UIView. Mi piacerebbe avere uno sfondo piastrellato basato su immagini. L'immagine originale è 398x398 px. Vorrei che la mia immagine tessera.Come creare uno sfondo affiancato basato su immagine per UIView in modo che non venga ridimensionato?

enter image description here

Quando eseguo l'applicazione, le piastrelle di immagine, ma per qualche motivo scale come segue:

enter image description here

ho usato il seguente codice per realizzarla:

var image = UIImage(contentsOfFile: "myfilepath.png")! 
var uicolor = UIColor(patternImage: image) 
uiview.backgroundColor = uicolor 

Puoi spiegare 1. perché ios ridimensiona la mia immagine e 2. Come si disegna un'immagine affiancata senza ridimensionamento?

+3

Si prega di non nominare il vostro 'var' "UIColor" .. –

risposta

6

in pratica l'immagine è più grande del tuo UIView. quando assegni a UIColor(patternImage: image) utilizza la dimensione 1x dell'immagine. L'immagine di solito i laptop sono ridimensionati alle dimensioni della finestra con le proporzioni.

Quindi ridimensionare l'immagine in base alle proprie esigenze e quindi applicarla come immagine di sfondo.

+0

Il problema è che le immagini che ho sono caricate dall'utente. C'è un modo per regolarlo in qualche modo dal codice? –

+0

@AlexSmolov si consiglia di utilizzare 'UIImageView' e impostare' ContentMode' su 'UIViewContentModeScaleAspectFit' – Bhargavi

+0

@AlexSmolov questa domanda e le sue risposte saranno utili per voi immagino [UIImageView aspect fit and center] (http: // stackoverflow .com/questions/15499376/uiimageview-aspect-fit-and-center) – Bhargavi

4

Per espandere la risposta di Banto, il problema è che la vista è di 250x85 punti, che, sui dispositivi retina è in realtà di 500x170 pixel. Quando l'immagine x1 viene trasformata in un motivo, viene applicata al livello del punto. Il problema può essere facilmente modificato impostando la scala sulla immagine in base alla scala del dispositivo:

let view = UIView(frame: CGRect(x: 0, y: 0, width: 250, height: 85)) 

let image = UIImage(named: "myfilepath.png")! 
let scaled = UIImage(CGImage: image.CGImage, scale: UIScreen.mainScreen().scale, orientation: image.imageOrientation) 

view.backgroundColor = UIColor(patternImage: scaled!) 
+0

Grazie, David! Ho scoperto che se aggiungi @ 3x (come in "[email protected]") al nome dell'immagine, funzionerà perfettamente su ogni dispositivo. –

+1

Suggerirei 2x a quel punto, ma sì, è praticamente la stessa cosa. –

0

Prova questa

self.mainView.layer.contents = (id)[UIImage imageNamed:@"CROPNET.png"].CGImage; 
Problemi correlati