Ios 在swift中更改页面指示器图像[SMPageControl]/EAIntroView
我正在尝试更改指示器图像,遵循中的示例 下面是EAIntroView中的objective-c代码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
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
希望它能为你工作@伊纳莫