2014-05-13 9 views
8

Farklı sayfaları gösteren bir UIPageViewController yaşıyorum. Mevcut davranış, son sayfaya ulaştığımda kaydırma işleminin durmasıdır. Şimdi ulaşmak istediğim, son sayfada ve sağa kaydırıldığında, ilk sayfaya gider. İlk sayfadayken, sola kaydırırken son sayfaya gidin. Yani temelde PageViewController sayfalarını daireler halinde göstersin. ,uipageviewcontroller'ın çevrelere nasıl girileceğini

- (UIViewController*) pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(TMCollectionViewController *)viewController 
{ 

    if((viewController.pageIndex) >= 1) 
    { 
     return _viewControllers[viewController.pageIndex - 1]; 
    } 
    else 
    { 
     if ([_viewControllers count] == 1) { 
      return nil; 
     } 
     return [_viewControllers objectAtIndex:[_viewControllers count]-1]; 
    } 
} 

Ama tek bırakılır böylece sayfaları kaldırmak zaman, hala önce veya sonra sayfayı hatırlar: İlk yaklaşım birden fazla sayfa olan veya tek sayfadan başlayarak oldukça iyi iken çalışır ve buna göre gösterir. Dizide yalnızca bir sayfa kalmış olsa bile. Herhangi bir yardım çok takdir edilmektedir. Eğer sayfaların onun endeksi = toplam sayımı yapmak sola 1 indeksi ve kaydırmada olduğunda

cevap

12

Sen

olduğu gibi uygulama

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController 
{ 
    NSUInteger index = ((PageContentViewController*) viewController).pageIndex; 

    if ((index == 0) || (index == NSNotFound)) { 
     index = self.pageTitles.count; 
    } 

    index--; 
    return [_viewControllers objectAtIndex:index]; 
} 

son endeksi olduğunda sıfıra ayarlayın endeks

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController 
{ 
    NSUInteger index = ((PageContentViewController*) viewController).pageIndex; 

    if (index == NSNotFound) { 
     return nil; 
    } 

    index++; 
    if (index == [self.pageTitles count]) { 
     index = 0; 
    } 
    return [_viewControllers objectAtIndex:index]; 
} 
+0

Merhaba ve hızlı cevabınız için teşekkürler. Kodunuzu denedim, ama kendi yaklaşımım gibi benzer bir davranış gösteriyor. Birçok sayfa olduğunda iyi çalışıyor. Uygulamamda, her sayfa eklenebilir veya kaldırılabilen bir haber kaynağını temsil eder. Yani eğer bir kullanıcı ör. Beş kaynak, kod iyi çalışıyor. Şimdi, kullanıcı beşten dördünü kaldırdığında ve bu nedenle PageViewController'da yalnızca bir tane kaldığında, sol ve sağa doğru kaymaya devam edebilir, ancak beyaz sayfalar rahatsız edici gösterişli efektlerle görülebilir. –

+0

"presentationCountForPageViewController" uygulamasındaki sayınız güncellenmiş olmayabilir, bu nedenle yalnızca 1 tane olmasına rağmen 5 sayfa alıyorsunuz ve 4 sayfa beyaz oluyorsunuz – Heena

+0

Sunum yaptığım sayfaların hepsi _viewControllers dizisinde bulunuyor. Bir kullanıcı beş sayfanın dördünü sildikten sonra, _viewControllers dizisi yalnızca bir ViewController'dan oluşur. 'presentationCountForPageViewController', [_viewControllers count] ile yanıtlar. Ama bir şekilde yardımcı olmaz. –

2

sayesinde @Roshni

Swift 2 - Numune, ben dairesel sayfalandırmada yaptılar edilir burada

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { 
    var index: Int = (viewController as! PageContentViewController).index 

    if index == 0 || index == NSNotFound { 
     index = self.pageTitles.count 
    } 

    index-- 
    return viewControllerAtIndex(index) 
} 

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { 
    var index: Int = (viewController as! PageContentViewController).index 

    if index == NSNotFound { 
     return nil 
    } 

    index++ 
    if index == self.pageTitles.count { 
     index = 0 
    } 
    return viewControllerAtIndex(index) 
} 
+1

Awesome çok teşekkür ederim! – swiftBoy

1

Roshni çözümü

Ben UIPageViewController to create a content slider (Objective-C/Swift) makaleye ama @Tom CALMON ve @Roshani sayesinde şimdi mümkün duyuyorum kullanma kullanıyordum

benim istenen sonucu elde Swift 2,2

class PageHomeViewController: UIViewController , UIPageViewControllerDataSource{ 

    // MARK: - Variables 
    private var pageViewController: UIPageViewController? 

    // Initialize it right away here 
    private let contentImages = ["nature_pic_1.png", 
           "nature_pic_2.png", 
           "nature_pic_3.png", 
           "nature_pic_4.png"]; 

    //MARK: - View controller life cycle methods 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     createPageViewController() 
     setupPageControl() 
    } 

    //MARK: - Create and start page view controller 
    private func createPageViewController() { 
     let pageController = self.storyboard!.instantiateViewControllerWithIdentifier("PageViewController") as! UIPageViewController 
     pageController.dataSource = self 

     if contentImages.count > 0 { 
      let firstController = getItemController(0)! 
      let startingViewControllers: NSArray = [firstController] 
      pageController.setViewControllers(startingViewControllers as? [UIViewController], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil) 
     } 

     pageViewController = pageController 
     addChildViewController(pageViewController!) 
     self.view.addSubview(pageViewController!.view) 
     pageViewController!.didMoveToParentViewController(self) 
    } 

    private func setupPageControl() { 
     let appearance = UIPageControl.appearance() 
     appearance.pageIndicatorTintColor = UIColor.grayColor() 
     appearance.currentPageIndicatorTintColor = UIColor.whiteColor() 
     appearance.backgroundColor = UIColor.darkGrayColor() 
    } 

    // MARK: - UIPageViewControllerDataSource 
    func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { 
     var index: Int = (viewController as! PageContentViewController).itemIndex 

     if index == 0 || index == NSNotFound { 
      index = contentImages.count 
     } 

     index -= 1 
     return getItemController(index) 
    } 

    func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController?{ 
     var index: Int = (viewController as! PageContentViewController).itemIndex 
     if index == NSNotFound {return nil} 
     index += 1 
     if index == contentImages.count {index = 0} 
     return getItemController(index) 
    } 

    private func getItemController(itemIndex: Int) -> PageContentViewController? { 
     if itemIndex < contentImages.count { 
      let pageItemController = self.storyboard!.instantiateViewControllerWithIdentifier("PageContentViewController") as! PageContentViewController 
      pageItemController.itemIndex = itemIndex 
      pageItemController.imageName = contentImages[itemIndex] 
      return pageItemController 
     } 
     return nil 
    } 

    // MARK: - Page Indicator 
    func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int { 
     return contentImages.count 
    } 
    func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int { 
     return 0 
    } 

} 

enter image description here

Bu birileri, bir gün orada yardımcı olacaktır umuyoruz!