Ios 在swift中更改页面指示器图像[SMPageControl]/EAIntroView

Ios 在swift中更改页面指示器图像[SMPageControl]/EAIntroView,ios,objective-c,swift,Ios,Objective C,Swift,我正在尝试更改指示器图像,遵循中的示例 下面是EAIntroView中的objective-c代码 SMPageControl *pageControl = [[SMPageControl alloc] init]; pageControl.pageIndicatorImage = [UIImage imageNamed:@"pageDot"]; pageControl.currentPageIndicatorImage = [UIImage imageNamed:@"selectedPageD

我正在尝试更改指示器图像,遵循中的示例

下面是EAIntroView中的objective-c代码

SMPageControl *pageControl = [[SMPageControl alloc] init];
pageControl.pageIndicatorImage = [UIImage imageNamed:@"pageDot"];
pageControl.currentPageIndicatorImage = [UIImage imageNamed:@"selectedPageDot"];
[pageControl sizeToFit];
intro.pageControl = (UIPageControl *)pageControl;
intro.pageControlY = 130.f;
这是我试图实现的swift代码

    // SMPageControl
    pageControl = SMPageControl()
    pageControl.pageIndicatorImage = UIImage(named: "pageDot")
    pageControl.currentPageIndicatorImage = UIImage(named: "selectedPageDot")
  pageControl.sizeToFit()
  pageControl.backgroundColor = UIColor.clearColor()

    intro.pageControl = pageControl as? UIPageControl
swift代码在这里有一个警告

        intro.pageControl = pageControl as? UIPageControl
警告是:

Cast from 'SMPageControl!' to unrelated type 'UIPageControl' always fails
有什么帮助吗

从中可以看出,它不是UIPageControl的子类。这意味着可能会出现错误:UIPageControl是一个完全不相关的类型,无法将值强制转换到该类型

您所指的Objective-C可能会起作用,但它是坏的和错误的:UIPageControl的内联转换在这里没有任何作用,并且可能导致内部不一致

这正是Swift编译器设计用来防止的那种草率,而且它的工作做得很好

您最好放弃在Swift代码中使用此库。

您可以从中看出它不是UIPageControl的子类。这意味着可能会出现错误:UIPageControl是一个完全不相关的类型,无法将值强制转换到该类型

您所指的Objective-C可能会起作用,但它是坏的和错误的:UIPageControl的内联转换在这里没有任何作用,并且可能导致内部不一致

这正是Swift编译器设计用来防止的那种草率,而且它的工作做得很好


您最好放弃在Swift代码中使用此库。

要在Swift中更改页面指示器图像[SMPageControl]/EAIntroView,我创建了自定义UIPageControl类,如下所示:

import UIKit 
class CustomPageControl: UIPageControl {

let activePage: UIImage = UIImage(named: "icon-selected-dot")!
let inActivePage: UIImage = UIImage(named: "icon-dot")!

override var numberOfPages: Int {
    didSet {
        updateDots()
    }
}

override var currentPage: Int {
    didSet {
        updateDots()
    }
}

override func awakeFromNib() {
    super.awakeFromNib()
    self.pageIndicatorTintColor = UIColor.clear
    self.currentPageIndicatorTintColor = UIColor.clear
    self.clipsToBounds = false
}

func updateDots() {
    var i = 0
    for view in self.subviews {
        var imageView = self.imageView(forSubview: view)
        if imageView == nil {
            if i == self.currentPage {
                imageView = UIImageView(image: activePage)
            } else {
                imageView = UIImageView(image: inActivePage)
            }
            imageView!.center = view.center
            view.addSubview(imageView!)
            view.clipsToBounds = false
        }
        if i == self.currentPage {
            imageView!.alpha = 1.0
            imageView?.image = activePage
        } else {
            imageView!.alpha = 0.5
            imageView?.image = inActivePage
        }
        i += 1
    }
}

fileprivate func imageView(forSubview view: UIView) -> UIImageView? {
    var dot: UIImageView?
    if let dotImageView = view as? UIImageView {
        dot = dotImageView
    } else {
        for foundView in view.subviews {
            if let imageView = foundView as? UIImageView {
                dot = imageView
                break
            }
        }
    }
    return dot
}
}
然后,在你的课堂上,只要添加这些线,你就可以使用自定义图像的点

//Custom page Control
    let pageControl = CustomPageControl()
    pageControl.updateDots()
    intro.pageControl = pageControl

希望它能为你工作@为了在swift中更改页面指示器图像[SMPageControl]/EAIntroView,我创建了自定义UIPageControl类,如下所示:

import UIKit 
class CustomPageControl: UIPageControl {

let activePage: UIImage = UIImage(named: "icon-selected-dot")!
let inActivePage: UIImage = UIImage(named: "icon-dot")!

override var numberOfPages: Int {
    didSet {
        updateDots()
    }
}

override var currentPage: Int {
    didSet {
        updateDots()
    }
}

override func awakeFromNib() {
    super.awakeFromNib()
    self.pageIndicatorTintColor = UIColor.clear
    self.currentPageIndicatorTintColor = UIColor.clear
    self.clipsToBounds = false
}

func updateDots() {
    var i = 0
    for view in self.subviews {
        var imageView = self.imageView(forSubview: view)
        if imageView == nil {
            if i == self.currentPage {
                imageView = UIImageView(image: activePage)
            } else {
                imageView = UIImageView(image: inActivePage)
            }
            imageView!.center = view.center
            view.addSubview(imageView!)
            view.clipsToBounds = false
        }
        if i == self.currentPage {
            imageView!.alpha = 1.0
            imageView?.image = activePage
        } else {
            imageView!.alpha = 0.5
            imageView?.image = inActivePage
        }
        i += 1
    }
}

fileprivate func imageView(forSubview view: UIView) -> UIImageView? {
    var dot: UIImageView?
    if let dotImageView = view as? UIImageView {
        dot = dotImageView
    } else {
        for foundView in view.subviews {
            if let imageView = foundView as? UIImageView {
                dot = imageView
                break
            }
        }
    }
    return dot
}
}
然后,在你的课堂上,只要添加这些线,你就可以使用自定义图像的点

//Custom page Control
    let pageControl = CustomPageControl()
    pageControl.updateDots()
    intro.pageControl = pageControl
希望它能为你工作@伊纳莫