2011-11-15 26 views
7

Chciałbym zakodować półkę i nie chcę myśleć o zmianie rozmiaru i zmianie obrazów tła na rotacji iw zależności od rozmiaru ekranu (iPad/iPhone). Czy możliwe jest utworzenie obrazu rozciągającego się poziomo, ale powtarzającego się w pionie? Do tej pory znalazłem tylko [UIColor colorWithPatternImage:] i [UIImage strechableImageWithLeftCapWidth:topCapHeight:] lub nowy [UIImage resizableImageWithCapInsets:]. Ale nie zdołałem oczywiście pozwolić im pracować razem.Rozciągliwy i wzór UIImage w tym samym czasie

Mam nadzieję, że ilustracja pomaga zrozumieć mój problem:

Illustration

Czy macie jakiś pomysł jak osiągnąć wyżej, tak, że będzie pracować z jednym obrazie o różnych rozmiarach i orientacjach? Dzięki!

+0

Tak z ciekawości, jaki wynik uzyskujesz dla '[UIColor colorWithPatternImage: [UIImage resizableImage ...]]'? –

+0

Obrazek nie jest streched ani powiększany, tylko powtórzony przez x i y. – denbec

+0

Ładne cienie pod czasopismami :) Czy są rysowane lub czy korzystałeś z CA? – Shmidt

Odpowiedz

2

[UIColor colorWithPatternImage:] może zająć bardzo dużo pamięci podczas pracy z dużą liczbą rzędów. W rezultacie utworzyłem pojedynczy widok obrazu, który był o jeden wiersz większy niż cały widok przy użyciu [UIColor colorWithPatternImage:], a następnie przesunięcie tego widoku w górę lub w dół, jeśli to konieczne, gdy widok miał zostać przewinięty poza ekran. Ponieważ widok jest przenoszony tylko na granicy wierszy, wydajność była znacznie lepsza niż się spodziewałem.

Jednak lepszą opcją byłoby utworzenie puli pojedynczych UImageViews przy użyciu [UIColor colorWithPatternImage:] i wstawienie ich, podobnie jak to, co zrobi UITableView spowoduje wyświetlenie komórek widoku.

Apple ma przykładowy kod, który ilustruje tę technikę w projekcie próbki Scrollview apartamentu oraz Projektowanie aplikacji z przewijaniem Widoki wideo z WWDC 2010.

0

Dlaczego nie użyć rozciągliwej obraz z jednej półce, a następnie ustawić go jako tło dla każdej komórki w tableview?

EDIT:

Moja znajomość AQGridView jest ograniczony, ale brzmi jak można uzyskać dostęp do poszczególnych płytek „siatki”.

Spróbuj mieć trzy obrazy w rzędzie: - Obraz dla najbardziej lewej płytki siatki pokazujący lewy róg półki - Obraz dla środkowej części półki, który jest stosowany do wszystkich płytek, z wyjątkiem pierwszego i ostatni kafelek - Obraz dla prawej płytki siatki pokazujący prawy róg półki.

Należy również wspomnieć, że w pytaniu używasz AQGridView, aby inni użytkownicy nie pomyśleli, że używasz UITableView.

+0

ponieważ używam komórek siatki [AQGridView] (https://github.com/AlanQuatermain/AQGridView), a nie wierszy ... :( – denbec

3

Potrzebowałem również ustawić tło UIView z obrazu i zmienić jego rozmiar w tym samym czasie. Co zrobiłem było:

  1. utworzony obraz wewnątrz ramki mojego rozmiaru widoku
  2. Zestaw tło widoku za pomocą [UIColor colorWithPatternImage:(UIImage*)]

A oto kod:

UIGraphicsBeginImageContext(self.followView.frame.size); 
[[UIImage imageNamed:@"background_content.png"] drawInRect:self.followView.bounds]; 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
UIColor *bgColor = [UIColor colorWithPatternImage:image]; 

[followView setBackgroundColor:bgColor]; 
Powiązane problemy