2013-08-04 33 views
9

Tôi biết tôi đã đặt câu hỏi này một vài lần, nhưng tôi rất thiếu kinh nghiệm và không nghĩ rằng tôi đã được cung cấp câu trả lời đúng.Vuốt giữa hai chế độ xem của UIViewControllers

Tôi hiện có hai bộ điều khiển chế độ xem, mỗi bộ điều khiển có tệp .h, tệp .m và tệp .xib. Trong cả hai tệp .xib, tôi có UIView. Làm thế nào tôi có thể làm cho nó để bạn có thể vuốt giữa hai quan điểm này? Ví dụ: ứng dụng mở trên chế độ xem đầu tiên, sau đó bạn vuốt từ phải sang trái và chế độ xem tiếp theo xuất hiện. Tôi muốn hoạt ảnh của swiping giống như của ứng dụng Ảnh khi vuốt qua ảnh.

Trả lời

17

Trong khi bạn có thể thực hiện những điều khoản này (với custom container view controller kết hợp với UIPanGestureRecognizer hoặc UIScrollView), nếu sử dụng iOS 6 và sau đó, cách dễ nhất sẽ được sử dụng một Page View Controller với "di chuyển" phong cách chuyển tiếp.

Hãy xem xét kịch bản này:

pageviewcontroller storyboard

Nó bao gồm một bộ điều khiển xem trang, và hai cảnh cho hai trang. Trang 1 có số nhận dạng bảng phân cảnh là one và một lớp cơ sở là PageOneViewController. Trang 2 có số nhận dạng bảng phân cảnh là two và một lớp cơ sở là PageTwoViewController.

sau đó tôi đã viết một lớp con UIPageViewController (và, có lẽ rõ ràng, đây là lớp tôi đã chỉ định cho cảnh đầu tiên của kịch bản ở trên), trong đó có đoạn mã sau:

- (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"]; 
} 

Bạn có thể làm điều này với NIB cũng vậy, nhưng nó đòi hỏi phải viết nhiều mã hơn. Nếu bạn tìm kiếm UIPageViewController XIB và có thể bạn sẽ nhận được một số lần truy cập.

Nếu bạn cần hỗ trợ các phiên bản iOS trước 6.0, bạn sẽ phải thực hiện phương pháp tiếp cận vùng chứa tùy chỉnh với chế độ xem cử chỉ xoay hoặc cuộn.

4

Có một số cách phù hợp để làm giàu mục tiêu của bạn.

Ví dụ:

1) Từ iOS 6 bạn có thể sử dụng UIPageViewController với tài sản transitionStyle UIPageViewControllerTransitionStyleScroll

2) Bạn có thể sử dụng UIScrollView với tài sản pagingEnable = YES; và thêm quan điểm của bạn bên trong nó. Ngoài ra, bạn sẽ cần phải thực hiện tất cả các phương pháp addChildViewController:, removeFromParentViewController, willMoveToParentViewController:, didMoveToParentViewController: container để đối phó với với xuất hiện/biến mất mathods của bộ điều khiển của bạn

3), bạn có thể tìm thấy giải pháp của bên thứ ba như:

+0

bạn có thể có thể giúp tôi ra với các tùy chọn xem di chuyển. Như tôi đã nói, tôi không giỏi Objective-C nên tôi không biết mình đang làm gì. Có thể bạn có thể viết một số mã ví dụ về cách tôi có thể thực hiện UIScrollView. Một lần nữa, như tôi đã nói trước đây, tôi có hai bộ điều khiển xem (tôi không biết nếu điều đó là đúng), với một cái nhìn duy nhất bên trong của mỗi người trong số họ. Cảm ơn bạn! Vui lòng hỏi thêm thông tin nếu bạn cần! – user2397282

+1

Có rất nhiều hướng dẫn và mẫu trên internet: 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 đã cho bạn rất nhiều liên kết tuyệt vời. Bạn nên đi qua một số (nếu không phải tất cả) của những người và thực sự hiểu cách họ làm việc. Nếu bạn dành thời gian để nghiên cứu câu hỏi của mình bằng cách xem qua một số liên kết này, bạn sẽ khám phá ra một số cách tiếp cận tuyệt vời trong việc giải quyết câu hỏi của mình. – Rob

-1

bạn có thể sử dụng repo này. Nó đơn giản và dễ hiểu hơn nhiều đối với RnD. (Swift 3 mã)

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 
Các vấn đề liên quan