2013-08-04 9 views
9

Wiem, że kilkakrotnie zadawałem to pytanie, ale jestem bardzo niedoświadczony i nie sądzę, że otrzymałem właściwą odpowiedź.Przesuwanie między dwoma widokami UIViewControllerów

Mam teraz dwa kontrolery widoku, każdy z plikiem .h, plikiem .m i plikiem .xib. W obu plikach .xib mam UIView. Jak mogę to zrobić, aby można było przesuwać między tymi dwoma widokami? Na przykład aplikacja otwiera się w pierwszym widoku, a następnie przesuwasz palcem od prawej do lewej i pojawia się następny widok. Chcę, aby animacja przesuwania była podobna do tej w aplikacji Zdjęcia podczas przesuwania zdjęć.

Odpowiedz

17

Chociaż można wdrożyć ten sam (z custom container view controller w połączeniu z UIPanGestureRecognizer lub UIScrollView), w przypadku korzystania z iOS 6, a później, najprostszym sposobem będzie użycie Page View Controller z „przewijać” stylu przejściowym.

Rozważmy Storyboard:

pageviewcontroller storyboard

składa się z kontrolera widoku strony i dwie sceny na dwóch stronach. Strona 1 ma identyfikator storyboardu: one i podstawową klasę PageOneViewController. Strona 2 ma identyfikator storyboardu: two i podstawową klasę PageTwoViewController.

Potem napisał UIPageViewController podklasę (i być może oczywiste, jest to klasa I określone dla pierwszego ujęcia powyższej storyboard), który ma następujący kod:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.dataSource = self; 

    [self setViewControllers:@[[self.storyboard instantiateViewControllerWithIdentifier:@"one"]] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController 
{ 
    if ([viewController isKindOfClass:[PageOneViewController class]]) 
     return nil; 

    return [self.storyboard instantiateViewControllerWithIdentifier:@"one"]; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController 
{ 
    if ([viewController isKindOfClass:[PageTwoViewController class]]) 
     return nil; 

    return [self.storyboard instantiateViewControllerWithIdentifier:@"two"]; 
} 

można zrobić to z NIB również, ale wymaga napisania więcej kodu. Jeśli wyszukasz UIPageViewController XIB, prawdopodobnie otrzymasz kilka trafień.

Jeśli musisz obsługiwać wersje iOS wcześniejsze niż 6.0, musisz wykonać niestandardowe podejście do kontenera z gestem panoramowania lub widokiem przewijania.

4

Istnieje wiele właściwych sposobów na wzbogacenie swojego celu.

Na przykład:

1) Od iOS 6 można użyć UIPageViewController z własności transitionStyle UIPageViewControllerTransitionStyleScroll

2) Można wykorzystać UIScrollView z własności pagingEnable = YES; i dodać swoje poglądy w środku. Również trzeba będzie wdrożyć wszystkie pojemniki metod addChildViewController:, removeFromParentViewController, willMoveToParentViewController:, didMoveToParentViewController: do czynienia ze pojawiają się/znikają mathods swoich kontrolerów

3) można znaleźć rozwiązania innych firm, takich jak:

+0

mógłbyś mi pomóc ewentualnie z opcją widoku przewijania. Jak już powiedziałem, nie jestem zbyt dobry w Objective-C, więc tak naprawdę nie wiem, co robię. Czy mógłbyś ewentualnie napisać przykładowy kod jak mogę zaimplementować UIScrollView. Ponownie, jak powiedziałem wcześniej, mam dwa kontrolery widoku (nie wiem, czy to prawda), z pojedynczym widokiem wewnątrz każdego z nich. Dziękuję Ci! Jeśli potrzebujesz, poproś o więcej informacji! – user2397282

+1

Istnieje wiele samouczków i przykładów w Internecie: http://www.raywenderlich.com/10518/how-to-use-uiscrollview-to-scroll-and-zoom-content http://eureka.ykyuen.info/2010/05/22/iphone-uiscrollview-with-paging-example/http://gabriel-tips.blogspot.com/2012/02/page-control-display-view-controllers.html http: // www. iosdevnotes.com/2011/03/uiscrollview-paging/ – Flop

+0

@ user2397282 Flop dał Ci wiele doskonałych linków. Powinieneś przejść przez niektóre (jeśli nie wszystkie) z nich i naprawdę zrozumieć, jak działają. Jeśli poświęcisz czas na zbadanie pytania, przechodząc przez niektóre z tych linków, odkryjesz kilka świetnych sposobów rozwiązania swojego problemu. – Rob

-1

możesz użyć tego repo. Jest to o wiele prostsze i łatwiejsze do zrozumienia dla RnD. (Swift code 3)

https://github.com/lakshikabhardwaj/LBViewControllerCollection

 let mainViewController = CPPageMenuVC(nibName: "CPPageMenuVC", bundle: nil) 
     let pageMenuarray :[PageModal] = [PageModal(pageTitle: "Cat", pageVC: cpCatVC),PageModal(pageTitle: "Cow", pageVC: cowCX),PageModal(pageTitle: "Chat", pageVC: cpCatVC),PageModal(pageTitle: "ElephantElephant", pageVC: elephantVC)] 

     pageMenuVC.pageArray = pageMenuarray 
     pageMenuVC.tabHeight = 0 // WITHOUT TOPICS