Ios 自动移动页面控制点

Ios 自动移动页面控制点,ios,swift,Ios,Swift,我实现了页面控制器..在swift中自动移动页面 但是我的问题是页面控制器点没有被改变,不表明页面有人帮我解决这个问题 这是我的密码 override func viewDidLoad() { super.viewDidLoad() UpdateCounter = 0 arrPageTitle = ["In SignUp screen user can able to input the first name, last name, emai

我实现了页面控制器..在swift中自动移动页面

但是我的问题是页面控制器点没有被改变,不表明页面有人帮我解决这个问题 这是我的密码

 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点也会被移动 提前感谢

尝试更改

pagecontroller.currentPage = 0

您在func AdvancedPage中重置了当前

    pagecontroller.currentPage = UpdateCounter

    pagecontroller.numberOfPages = 3
    pagecontroller.currentPage = 0
只需删除“pagecontroller.currentPage=0”即可


试试这个(我只知道objective-c代码,试着在swift中使用)

记住集合委托

pagecontroller.delegate = self

如果两种方法都实现,页面指示器将可见, 转换样式为“UIPageViewControllerTransitionStyleScroll”,并且 导航方向是 “UIPageViewControllerNavigationOrientationHorizontal”。两种方法 在响应“SetViewController:…”调用时调用,但 演示文稿索引在以下情况下自动更新: 手势驱动导航

您还需要实现以下函数来设置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.

已经实现了一个自定义页面控件,借助它,您可以非常轻松地更改大小、颜色、形状和页码。。。这是上课时间

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
        }
    }

}
和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)


    }
添加此代码这是页控制器的委托方法 它会很好用的
快乐代码:)

感谢您的回复,但圆点仍然没有移动其相同的位置自动滚动标签,但页面指示器圆圈没有改变颜色。我还添加了代码pagecontroller.currentPage=UpdateCounter pagecontroller.numberOfPages=3 UIPageControl.appearance().pageIndicatorTintColor=UIColor.lightGray UIPageControl.appearance().currentPageIndicatorTintColor=UIColor.red上面给出的内容我建议bro它不工作bro…它自动滚动但圆点指示器不改变颜色broHi bro它不工作bro我移动下一个视图没有任何问题…它的自动滚动页面控制器工作正常我的问题是当自动滚动页面时指示器点不自动移动我与您共享的类仅用于页面指示器(点)。。你能告诉我你在哪里面对这个问题吗。。在项目中安装cocoapods名称“PureLayout”非常重要。。它将帮助您设置页面指示器上的约束。。。
var pageControl = PageControl()
 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)


    }
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

}