2015-04-26 8 views
8

W aplikacji na iOS mam UIView 250x85pt. Chciałbym, żeby miał kafelkowe tło oparte na obrazie. Oryginalny obraz ma 398 x 398 pikseli. Chciałbym, żeby mój obraz się układał.Jak zrobić obrazkowe kafelki tła dla UIView, aby nie skalować?

enter image description here

Kiedy uruchomić aplikację, moje płytki obraz, ale z jakiegoś powodu wagi to w następujący sposób:

enter image description here

Użyłem poniższy kod, aby go osiągnąć:

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

Czy możesz wyjaśnić, 1. dlaczego ios skaluje mój obraz, i 2. Jak narysować kafelkowy obraz bez skalowania?

+3

Proszę nie nazwać 'var'„uicolor”.. –

Odpowiedz

6

zasadniczo obraz jest większy niż Twój UIView. gdy podasz UIColor(patternImage: image), użyje on 1x rozmiaru obrazu. Obraz zwykle laptopy są skalowane do rozmiaru okna z jego współczynnikiem proporcji.

Skaluj obraz do swoich wymagań, a następnie zastosuj go jako obraz tła.

+0

Problem polega na tym, że obrazy, które mam, są przesyłane przez użytkowników. Czy istnieje sposób, aby to zmienić w jakiś sposób z kodu? –

+0

@AlexSmolov byłoby zalecane, aby użyć 'UIImageView' i ustawić' ContentMode' na 'UIViewContentModeScaleAspectFit' – Bhargavi

+0

@AlexSmolov to pytanie i jego odpowiedzi będą pomocne dla Ciebie, myślę, że [Dopasowanie aspektu UIImageView i centrum] (http: // stackoverflow .pl/questions/15499376/uiimageview-aspect-fit-and-center) – Bhargavi

4

Aby rozwinąć odpowiedź Banto, problem polega na tym, że twój widok ma 250x85 punktów, co na urządzeniach siatkówki wynosi naprawdę 500x170 pikseli. Kiedy obraz X1 zostanie przekształcony w wzór, zostanie zastosowany na poziomie punktu. Problem można łatwo zmienić poprzez ustawienie wagi na zdjęcie, aby dopasować skalę na urządzeniu:

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

Dziękuję, David! Dowiedziałem się, że jeśli dodasz @ 3x (jak w "[email protected]") do nazwy obrazu, zadziała to doskonale na każdym urządzeniu. –

+1

Proponuję 2x w tym momencie, ale tak, to robi dokładnie to samo. –

0

Spróbuj

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