2012-09-12 17 views
6

Próbuję zmienić kolor cienia UIPageViewController podczas wykonywania animacji klapki. Ale zawsze wyświetla tylko biały kolor. Jak zmienić kolor odwrotnej strony tła koloru białego na inny kolor (czarny lub sephia). iBook robi to samo.Jak zmienić białe tło na inne kolory

Wspominam, że poniżej obrazu ma biały bg, który kolor chciałbym zmienić.

Zrzut ekranu: enter image description here

+0

Proszę znaleźć przyłączenie moim zrzucie ekranu http://www.imageurlhost.com/images/xo7tttfxq3s6fdhk60s.png – Nishu

+0

sprawdzić to: http://stackoverflow.com/questions/1079011/iphone-flipping-views-shows-a-white-background –

+0

@Ganee nadzieję, że widziałem załącznik obrazu. http://www.imageurlhost.com/images/xo7tttfxq3s6fdhk60s.png Używam UIPageViewController, więc animacja już istnieje. Potrzebuję zmodyfikować kolor tyłu, jak wspomnieć na moim obrazie. – Nishu

Odpowiedz

0
- (void) renderPageAtIndex:(NSUInteger)index inContext:(CGContextRef)ctx { 
UIImage *image = [images objectAtIndex:index]; 
CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height); 
CGAffineTransform transform = aspectFit(imageRect, 
              CGContextGetClipBoundingBox(ctx)); 
CGContextConcatCTM(ctx, transform); 
CGContextDrawImage(ctx, imageRect, [image CGImage]); 
} 
+0

Co zrobi aspectFit (imageRect, CGContextGetClipBoundingBox (CTX)) ; method – Nishu

-2

W przypadku pagecontrol wybieranym widoczności strony color--

UIPageControl nie obsługuje tego domyślnie. Musisz stworzyć własną kontrolę strony i zrobić rysunek sam.

+0

Używam UIPageViewController nie UIPageControl. UIPageViewController Pracuję nad aplikacją jak iBook, podczas gdy animacja zawijania strony za białym cieniem jest tam domyślnie. Muszę zmienić ten kolor bg. – Nishu

+0

Przykładowy link do obrazu. robiąc zwinięcie strony, że jest tam biała bg, moja aplikacja obsługuje tryb nocny, więc muszę zmienić kolor czarny. http://www.techotopia.com/index.php/Image:Iphone_ios_5_uipageviewcontroller_app.jpg – Nishu

+0

http://www.imageurlhost.com/images/xo7tttfxq3s6fdhk60s.png – Nishu

7

Próbowałem zrobić to samo od jakiegoś czasu i w końcu to rozgryzłem. Okazuje się, że nie można ustawić koloru tła dla innych kolorów, ale można podać inny widok, który UIPageViewController doda do tyłu. I tu jest tajemnica.

Z dokumentacji Apple:

Spine location        Double sided    What to pass 
UIPageViewControllerSpineLocationMid    YES    Left and Right Page. 
SpineLocationMin or SpineLocationMax    YES    Front and Back of the page. 
SpineLocationMin or SpineLocationMax    NO    Front page only. 

Więc w zasadzie, trzeba ustawić podwójną właściwość jednostronny na yes i dostarczyć dwa viewControllers na obu metod źródło danych:

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController; 
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController; 

Każda metoda zostanie wywołana dwa razy za każdą dodaną nową stronę. Tak więc musisz dostarczyć viewController, który normalnie powrócisz, a także nowy kontroler viewController, który zostanie dodany do tyłu podczas obracania animacji strony.

To od Ciebie zależy, jaki będzie mieć Twój "BackViewController". Możesz po prostu mieć czarny widok lub jeśli chcesz, możesz zrobić zrzut ekranu z pierwszej strony i uzyskać z niego obraz lustrzany.

Nie jest trudno, gdy zrozumiesz, jak to działa. Jedyny problem jaki widzę tutaj to to, że gdy dodasz czarny widok lub cokolwiek, co ma czarne tło, cień podczas obracania strony stanie się BIAŁY. Nie mam pojęcia dlaczego, ale widziałem, jak to się dzieje w wielu różnych aplikacjach, więc wydaje mi się, że to normalne zachowanie Apple. Ale wygląda naprawdę dziwnie.

EDIT:

Dodałem kod przykładowy, więc łatwiej jest zrozumieć. https://github.com/mattabras/DoubleSidedPageViewController

Abras

+0

Czy możesz wstawić jakiś kod - otrzymuję teorię, ale nie widzę, jak to działa w praktyce. Mam tylko jedną "stronę" - dwustronną stronę ... – daidai

+0

@ Abras - Czy mógłbyś rozwinąć, a może podać przykład, proszę? Próbowałem wdrożyć to, co powiedziałeś, bezskutecznie. Dziękuję Ci. – johnnelm9r

+1

Tutaj możesz pobrać przykładowy kod. https://github.com/mattabras/DoubleSidedPageViewController – Abras

Powiązane problemy