2012-03-01 22 views
5

mam UIImageView jako subview z UIView (rozmiar ramki 300 x 300). Mój UIImage może być portretem, krajobrazem lub niektórymi dziwnymi rozmiarami. Jak wypełnić UIImage w ramach rozmiaru ramki UIView bez rozciągania obrazu do 300 x 300?UIImageView wypełnienie UIView

Celem tego, będę dodawać kolejne UIImageView jako obramowanie obrazu. Proszę o pomoc.

Dzięki.

Odpowiedz

13

Spróbuj

[img setContentMode:UIViewContentModeScaleAspectFit];

UIViewContentModeScaleAspectFit: zmniejszy zawartość do rozmiaru widoku od zachowaniu proporcji. Każdy pozostały obszar widoczności jest przezroczysty.

lub [img setContentMode:UIViewContentModeScaleAspectFill];

UIViewContentModeScaleAspectFill: Wagi zawartości do wypełnienia rozmiaru widoku. Część zawartości może być obcięta w celu wypełnienia granic widoku.

jeśli wycinek subviews, to trzeba zrobić

[imgView clipToBounds:YES]; 
+0

Próbowałem użyć powyższych 2 trybów, mój obraz nie mieści się w 300 x 300 – RockBaby

+0

ivEditImage = [[UIImageView alloc] initWithImage: imgChoosen]; ivEditImage.frame = vwEditingImage.frame; [ivEditImage setContentMode: UIViewContentModeScaleAspectFill]; – RockBaby

+0

nawet 'UIViewContentModeScaleAspectFit' nie robi tego? –

0

Użyj właściwości contentMode obiektu UIImageView.


Edit: i ustawić rozmiar obrazu do 300x300.

0
[image setContentMode:UIViewContentModeScaleToFill]; 
1

ustawić właściwość contentMode z UIImageView albo od tej wartości w zależności od tego, gdzie chcesz umieścić go w SuperView:

UIViewContentModeCenter, 
    UIViewContentModeTop, 
    UIViewContentModeBottom, 
    UIViewContentModeLeft, 
    UIViewContentModeRight, 
    UIViewContentModeTopLeft, 
    UIViewContentModeTopRight, 
    UIViewContentModeBottomLeft, 
    UIViewContentModeBottomRight, 

W tej wartości:

UIViewContentModeScaleToFill, 
    UIViewContentModeScaleAspectFit, 
    UIViewContentModeScaleAspectFill, 

Rzeczywiście obraz będzie 300 x 300, czego nie chcesz.

+3

Czy istnieje sposób na ich połączenie? Potrzebuję tego: przyjmij obraz 100x10 i pełny ekran UIImageView. Chcę, żeby się rozwinął, aż rozmiar poziomy będzie równy szerokości UIImageView (na przykład 320 dla iPhone'a), a wynikowy obraz (teraz 320x32) będzie na górze. Próbowałem tego imgview.contentMode = UIViewContentModeScaleAspectFit | UIViewContentModeTop; ale to nie działa. Po prostu wykonuje część UIViewContentModeTop (100x10 na górze). – Gik

+0

@Gik - Czy znalazłeś jakiś sposób, aby to zrobić. Mam dokładnie ten sam problem. –

+0

Zrobiłem to za pomocą podstępu. "Stworzyłem" inny obraz (z oryginału), rozciągnąłem, aby wypełnić mniejszy rozmiar, a następnie wypełniłem piksele, których "brakowało". Na koniec otrzymałem obraz 300x300 z oryginału. Jeśli chcesz, mogę opublikować kod. – Gik

2

Ah Po prostu ponownie przeczytałem to, o co prosiłeś. Wiem, jakie jest teraz twoje pytanie.

Twoja ramka UIImageView zmienia się, a kiedy to robi, obraz. Nie chcesz, aby zmienić obraz, ale chcesz, żeby Twój ImageView dostosować się do wypełnienia pogląd jest zawarty w.

UPDATE

I zdobione.

[self.imageView setContentMode:UIViewContentModeCenter]; 

Bez względu na orientację, rozmiar pozostaje taki sam.

Istnieje również opcja ustawienia go w celu wyrównania górnego, dolnego, lewego, prawego, lewego górnego, prawego górnego, dolnego lewego, prawego dolnego rogu, z których wszystkie pomagają wyrównać obraz, a NIE przerysować lub ponownie zmienić rozmiar. Obraz.

Czy to pomaga?

+0

jeśli przerysuję, rozciągnie mój obraz. Czy istnieje opcja, aby nie rozciągać? – RockBaby

Powiązane problemy