自定义UIPageControl

1、自定义UIPageControl

class SMPageControl: UIView {
    private let scrollView = UIScrollView()
    private let space: CGFloat = 8

    /// numberOfPages--数量尽量小
    open var numberOfPages: Int = 0 {
        didSet {
            self.setNeedsLayout()
            self.layoutIfNeeded()
        }
    }
    
    open var currentPage: Int = 0 {
        didSet {
            self.setNeedsLayout()
            self.layoutIfNeeded()
        }
    }
    
    open var currentPageImage = UIImage.imageWithColor(UIColor(hex: "1F59EE")!,size: CGSize(width: 14, height: 4))
    open var pageImage = UIImage.imageWithColor(UIColor.white.withAlphaComponent(0.5),size: CGSize(width: 4, height: 4))

    override init(frame: CGRect) {
        super.init(frame: frame)
        let button = createButton()
        self.addSubview(scrollView)
        scrollView.addSubview(button)
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        
        scrollView.frame = CGRect(x: 0, y: 0, width: self.bounds.size.width, height: self.bounds.size.height)
        
        let subviews = getButtons(scrollView)
        
        let maxCount = subviews.count
        let count = numberOfPages - maxCount
        guard count >= 0 else {
            return
        }
        for _ in 0.. [UIView] {
       return subSuper.subviews.filter({ (view) -> Bool in
            return (view as? UIButton != nil)
        })
    }
    
    private func updateButton(_ btn: UIButton) {
        if ((btn.image(for: .selected) != currentPageImage) || btn.image(for: .normal) != pageImage) {
            btn.setImage(currentPageImage, for: .selected)
            btn.setImage(pageImage, for: .normal)
        }
    }
    
    private func createButton() -> UIButton {
        let button = UIButton(type: .custom)
        button.setImage(pageImage, for: .normal)
        button.setImage(currentPageImage, for: .selected)
        button.layer.cornerRadius = 2
        button.layer.masksToBounds = true
        return button
    }
}

你可能感兴趣的:(自定义UIPageControl)