2017-02-10 54 views
2

我實現頁面控制器..automatically移動頁面迅速移動的PageControl點自動

,但我的問題是頁面控制器點沒有得到改變並不表示頁中的任何一個可以幫助我解決這個問題 這裏是我的代碼

override func viewDidLoad() { 
     super.viewDidLoad() 

     UpdateCounter = 0 

     arrPageTitle = ["In SignUp screen user can able to input the first name, last name, emailid and password.", "After SignUp email verification link has been send to his mail then add basic profile information and sport preferences.", "In Profile setting can view profile, privacy and notifications, friends, account and championships won."]; 

     self.pageViewController = self.storyboard?.instantiateViewController(withIdentifier: "myPageviewcontroller") as! UIPageViewController 
     self.pageViewController.dataSource = self 
     let initialContentviewcontroller = self.getViewControllerAtIndex(index: 0) as PageContentViewController 
     let viewcontrollers = NSArray(object: initialContentviewcontroller) 
     self.pageViewController.setViewControllers(viewcontrollers as? [UIViewController], direction: UIPageViewControllerNavigationDirection.forward, animated: true, completion: nil) 

     self.pageViewController.view.frame = CGRect(x: 0, y: 50, width:self.view.frame.width,height: 350) 
     //pagecontroller.delegate = self 
     pagecontroller.numberOfPages = arrPageTitle.count 
     pagecontroller.currentPage = 0; 

     self.addChildViewController(self.pageViewController) 
     self.view.addSubview(self.pageViewController.view) 
     self.pageViewController.didMove(toParentViewController: self) 



     timer = Timer.scheduledTimer(timeInterval: 2.0, target: self, selector: (#selector(StartUpPage.advancePage)), userInfo: nil, repeats: true) 

    } 

    func getViewControllerAtIndex(index: Int) -> PageContentViewController 
    { 
     // Create a new view controller and pass suitable data. 

     let pageContentViewController = self.storyboard?.instantiateViewController(withIdentifier: "PageContentViewController") as! PageContentViewController 
     pageContentViewController.strTitle = "\(arrPageTitle[index])" 
     pageContentViewController.pageIndex = index 
     return pageContentViewController 
    } 


    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? 
    { 


     let viewController = viewController as! PageContentViewController 
     var index = viewController.pageIndex as Int 
     if(index == 0 || index == NSNotFound) 
     { return nil 
     } 

     index -= 1 

     return self.getViewControllerAtIndex(index: index) 

    } 



    public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? 
    { 
     let viewController = viewController as! PageContentViewController 
     var index = viewController.pageIndex as Int 
     if((index == NSNotFound)) 
     { 
      return nil 
     } 

     index += 1 
     if(index == arrPageTitle.count) 
     { 

      return nil 
     } 

      return self.getViewControllerAtIndex(index: index) 


    } 


    public func presentationCount(for pageViewController: UIPageViewController) -> Int 
    { 
     return arrPageTitle.count 

    } 


    public func presentationIndex(for pageViewController: UIPageViewController) -> Int 
    { 
     let viewController = self.getViewControllerAtIndex(index: 0) 
     let index = viewController.pageIndex as Int 
     return index 

    } 
    func advancePage() 
    { 
     UpdateCounter += 1 

     if UpdateCounter > 2 { 
      UpdateCounter = 0 

     } 
     var nextviewcontroller = self.getViewControllerAtIndex(index: UpdateCounter) 
     if (nextviewcontroller .isEqual(nil)) { 
      UpdateCounter = 0 

      nextviewcontroller = self.getViewControllerAtIndex(index: UpdateCounter) 
     } 

     let startingViewControllers = [nextviewcontroller] 
     pageViewController.setViewControllers(startingViewControllers, direction: UIPageViewControllerNavigationDirection.forward, animated: true, completion: nil) 
     pagecontroller.currentPage = UpdateCounter 

     pagecontroller.numberOfPages = 3 
     pagecontroller.currentPage = 0 
     pagecontroller.addTarget(self, action: #selector(pageControlTapHandler(sender:)), for: .touchUpInside) 


     } 

任何一個可以幫助我如何時自動滾動..pagecontroll點也得到移動提前 感謝頁面解決這個問題

回答

1

嘗試改變

pagecontroller.currentPage = 0 

pagecontroller.currentPage = UpdateCounter 

您reseted目前在FUNC AdvancedPage

pagecontroller.currentPage = UpdateCounter 

    pagecontroller.numberOfPages = 3 
    pagecontroller.currentPage = 0 

只是刪除 「pagecontroller.currentPage = 0」 即可。


試試這個(我只知道Objective-C的代碼,嘗試使用它在SWIFT)

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed { 
    if (finished) { 
     YourViewControllersInPageController *childViewController = [pageViewController.viewControllers firstObject]; 
     [self.pageControl setCurrentPage:childViewController.index]; 
    } 
} 

記得設置委託

pagecontroller.delegate = self 

Another related answer

如果兩種方法均已實施,則頁面指示符將可見, 過渡樣式爲'UIPageViewControllerTransitionStyleScroll',而 導航方向爲'UIPageViewControllerNavigationOrientationHorizo​​ntal'爲 。響應'setViewControllers:...'調用調用了兩個方法 ,但在 手勢驅動導航的情況下,會自動更新 演示文稿索引。

您還需要實現以下功能設置頁面計數UIPageViewController

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController NS_AVAILABLE_IOS(6_0); // The number of items reflected in the page indicator. 
- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController NS_AVAILABLE_IOS(6_0); // The selected item reflected in the page indicator. 
+0

感謝您的答覆,但還是點不動它的同一個地方 – Agaram

+0

自動滾動標籤,但pageindicator圈不改變顏色是沒有得到移動..我添加的代碼也pagecontroller.currentPage = UpdateCounter pagecontroller.numberOfPages = 3 UIPageControl.appearance()。pageIndicatorTintColor = UIColor.lightGray UIPageControl.appearance()。currentPageIndicatorTintColor = UIColor.red – Agaram

+0

什麼你給我上面實現的兄弟不工作的兄弟...它的滾動aut omatically但點指示不chaning的顏色兄弟 – Agaram

0

已實現的幫助下自定義頁面控制,你可以改變你的尺寸,顏色,形狀和頁碼非常簡單地 ...這裏是類

import UIKit 
import PureLayout 

extension PageControl { 
    func setupView() { 
    for subview in subviews { 
     subview.removeFromSuperview() 
    } 
    pages.removeAll(keepingCapacity: true) 

    container = UIView(frame: CGRect.zero) 
    self.addSubview(container!) 

    container?.autoCenterInSuperview() 
    container?.autoPinEdge(toSuperviewEdge: .top) 
    container?.autoPinEdge(toSuperviewEdge: .bottom) 

    for index in 0 ..< totalPages { 
     let page = UIView() 
     container?.addSubview(page) 
     pages.append(page) 

     page.autoMatch(.width, to: .height, of: page) 
     page.autoPinEdge(toSuperviewEdge: .top, withInset: padding) 
     page.autoPinEdge(toSuperviewEdge: .bottom, withInset: padding) 

     if index == 0 { 
      page.autoPinEdge(toSuperviewEdge: .left, withInset: padding, relation: .greaterThanOrEqual) 
     } else if index == totalPages-1 { 
      page.autoPinEdge(toSuperviewEdge: .right, withInset: padding, relation: .greaterThanOrEqual) 
     } else { 
      page.autoPinEdge(.left, to: .right, of: pages[index-1], withOffset: padding) 
     } 
    } 

    let size = frame.height - padding * 2 
    let width = padding * CGFloat(totalPages+1) + size * CGFloat(totalPages) 
    container?.autoSetDimension(.width, toSize: width) 



     //layoutIfNeeded() 
     setNeedsDisplay() 
    } 
} 

@IBDesignable class PageControl: UIControl { 

    var container:UIView? 
    var pages = [UIView]() 

    @IBInspectable var currentPage:Int = 0 { 
     didSet { 
      setNeedsLayout() 
     } 
    } 
    @IBInspectable var allPagesColor: UIColor = Colors.greyELight { 
     didSet { 
      setNeedsDisplay() 
     } 
    } 
    @IBInspectable var currentPageColor: UIColor = Colors.green { 
     didSet { 
      setNeedsDisplay() 
     } 
    } 

    @IBInspectable var totalPages: Int = 3 { 
     didSet { 
      if totalPages > 0 { 
       setupView() 
      } 
     } 
    } 

    @IBInspectable var padding: CGFloat = 2 { 
     didSet { 
      if padding > 0 { 
       setupView() 
      } 
     } 
    } 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     setupView() 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     setupView() 
    } 

    override func layoutSubviews() { 
     super.layoutSubviews() 

     let size = frame.height - padding * 2 

     for (index, view) in pages.enumerated() { 
      view.layer.cornerRadius = size/2 
      view.layer.masksToBounds = true 


view.backgroundColor = (index == currentPage) ? currentPageColor: allPagesColor 
     } 
    } 

} 

這裏是implentation

var pageControl = PageControl() 

和viewDidLoad中添加此代碼

let f = CGRect(x: CGFloat(0), y: CGFloat.adjustYAxis(91), width: CGFloat.adjustXAxis(100), height: CGFloat.adjustYAxis(6)) 
      pageControl = PageControl(frame:f) 
      pageControl.totalPages = 5 
      pageControl.tag = 716 
      pageControl.delegate = self 
      pageControl.allPagesColor = UIColor(hexString:"#afc6de") 
      let firstMood = self.moodsArray[0] as! MoodsModel 
      pageControl.currentPageColor = UIColor(hexString: firstMood.MoodBackGroundColor!) 
      pageControl.currentPage = 0 
      pageControl.padding = 10 
      self.pageViewController.view.addSubview(pageControl) 

和更改委託方法就這樣

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? 
    { 


     let viewController = viewController as! PageContentViewController 
     var index = viewController.pageIndex as Int 
     if(index == 0 || index == NSNotFound) 
     { return nil 
     } 

     index -= 1 
     pageControl.currentPage = index 
     return self.getViewControllerAtIndex(index: index) 

    } 



    public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? 
    { 
     let viewController = viewController as! PageContentViewController 
     var index = viewController.pageIndex as Int 
     if((index == NSNotFound)) 
     { 
      return nil 
     } 

     index += 1 
     if(index == arrPageTitle.count) 
     { 

      return nil 
     } 
pageControl.currentPage = index 
      return self.getViewControllerAtIndex(index: index) 


    } 
你頁碼
+0

嗨兄弟不工作兄弟我沒有任何問題,以移動下一個視圖...其自動滾動pagecontoller工作正常我的問題是當自動滾動頁面頁面指標點不移動自動 – Agaram

+0

我與你分享的課程僅用於頁面指標(Dots)..你能告訴我你在哪裏面臨問題嗎?一個重要的事情是你必須在你的項目中安裝一個cocoapods名稱「PureLayout」。它將幫助你設置頁面指標上的限制... –

2
public func presentationIndex(for pageViewController: UIPageViewController) -> Int 
{ 
    let viewController = pageViewController.viewControllers?[0] as! PageContentViewController 

    let index = viewController.pageIndex 
    pagecontroller.currentPage = index 
    UIPageControl.appearance().pageIndicatorTintColor = UIColor.lightGray 
    UIPageControl.appearance().currentPageIndicatorTintColor = UIColor.red 


    return index 

} 

添加以下代碼這是頁面控制器 委託方法它會正常工作 快樂碼:)

+0

其工作正常 – Agaram