ios - 快速更改页面指示器图像 [SMPageControl]/EAIntroView

标签 ios objective-c swift

我正在按照 EAIntroView 中的示例尝试更改指示器图像

这是来自 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;

这是我正在尝试实现的快速代码

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

有什么帮助吗?

最佳答案

为了快速更改页面指示器图像 [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
}
}

然后在您的类(class)中只需添加这些行,您就可以为点使用自定义图像

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

希望它对你有用! @ynamao

关于ios - 快速更改页面指示器图像 [SMPageControl]/EAIntroView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36965228/

相关文章:

iphone - 如何从 Facebook 登录重定向到 iphone 应用程序

objective-c - 如何更改 NSScrollView 默认文本并使其不可编辑

objective-c - 抑制 XCode Analyzer 对象存储到 .. 错误中的潜在泄漏

swift - String(validatingUTF8 :) and String(utf8String:)? 之间有区别吗

swift - 在 coredata 中插入记录需要多长时间?

ios - 如何在 Swift 中为协议(protocol)编写单元测试

ios - 如何创建专门的iOS书架应用程序?

ios - iOS应用未要求iOS7设备上的权限

ios - UISearchController 无法识别元音变音、Swift、iOS

ios - 使用Facebook IOS SDK 3.1和Graph API发布带标题的图像