MLSegmentedControl 0.1.2

MLSegmentedControl 0.1.2

dml 维护。



  • MrDML

MLSegmentedControl

CI Status Version License Platform

预览

Demo

示例

要运行示例项目,请克隆仓库,然后从 Example 目录中首先运行 pod install

要求

支持 swift4.0

安装

MLSegmentedControl 通过 CocoaPods 提供。要安装它,只需要将以下行添加到您的 Podfile 中

pod 'MLSegmentedControl'
//
//  DetailsViewController.swift
//  MLSegmentedControl_Example
//
//  Created by MrDML on 2018/7/22.
//  Copyright © 2018年 CocoaPods. All rights reserved.
//

import UIKit
import MLSegmentedControl

enum MLSegmentedType {
    case text
    case image
    case textImage
    case none
}

class DetailsViewController: UIViewController {

    var segmentedControl:MLSegmentedControl? = nil
        public var type:MLSegmentedType = .none
        lazy var scrollView: UIScrollView = {
        let sc = UIScrollView.init()
        sc.showsVerticalScrollIndicator = false
        sc.isPagingEnabled = true
        sc.backgroundColor = UIColor.orange
        sc.delegate  = self
        self.view.addSubview(sc)
        return sc
    }()


        override func viewDidLoad() {
            super.viewDidLoad()
            switch type {
            case .text:
            exampleDemoOne()
            break
            case .image:
            exampleDemoTwo()
            break
            case .textImage:
            exampleDemoThree()
            break
            case .none:
            break
        }


    }

    func  exampleDemoThree(){

        var imagesArray:Array<UIImage> = []
        for index in 0...6 {
        let str =  String.init(format: "%02d", index + 1)
        let image = (UIImage.init(named: str))!
        imagesArray.append(image)

    }

    var seletImageArray:Array<UIImage> = []
        for index in 0...6 {
        let str =  String.init(format: "%02dselected", index + 1)
        let image = (UIImage.init(named: str))!
        seletImageArray.append(image)

    }

        let titlsArray = ["One","Two","Three","Four","Five","Six","Seven"]

        let segmentedControl = MLSegmentedControl.init(sectionsTitles:titlsArray , sectionForImages: imagesArray, sectionSelectImages: seletImageArray)

        let offsetTop = UIApplication.shared.statusBarFrame.height + 44

        segmentedControl.frame = CGRect.init(x: 0, y: offsetTop, width: UIScreen.main.bounds.width, height: 40)
        segmentedControl.borderType = .none
        segmentedControl.textImageSpacing = 10
        segmentedControl.imagePosition = .rightOfText
        segmentedControl.segmentWidthStyle = .fixed
        segmentedControl.shouldStretchSegmentsToScreenSize = true
        segmentedControl.selectionIndicatorHeight = 2
        segmentedControl.addTarget(self, action: #selector(changeValueToIndex(segmentcontrol:)), for: [.valueChanged])
        self.view.addSubview(segmentedControl)

        self.segmentedControl = segmentedControl
        self.scrollView.frame = CGRect(x: 0, y:segmentedControl.frame.maxY, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height - segmentedControl.frame.height - 60)

        self.scrollView.contentSize = CGSize.init(width: UIScreen.main.bounds.width * CGFloat(titlsArray.count), height: UIScreen.main.bounds.height)
    }


    func  exampleDemoTwo(){
        var imagesArray:Array<UIImage> = []
        for index in 0...6 {
        let str =  String.init(format: "%02d", index + 1)
        let image = (UIImage.init(named: str))!
        imagesArray.append(image)

    }

    var seletImageArray:Array<UIImage> = []
        for index in 0...6 {
        let str =  String.init(format: "%02dselected", index + 1)
        let image = (UIImage.init(named: str))!
        seletImageArray.append(image)

    }


        let segmentedControl = MLSegmentedControl.init(sectionForImages: imagesArray, sectionSelectImages: seletImageArray)
        let offsetTop = UIApplication.shared.statusBarFrame.height + 44
        segmentedControl.frame = CGRect.init(x: 0, y: offsetTop, width: UIScreen.main.bounds.width, height: 40)
        segmentedControl.segmentWidthStyle = .dynamic
        segmentedControl.borderType = .none
        segmentedControl.selectionIndicatorHeight = 2
        segmentedControl.addTarget(self, action: #selector(changeValueToIndex(segmentcontrol:)), for: [.valueChanged])
        segmentedControl.selectionChangeToIndexClosure = { (index:Int) -> Void in

        //            print("当前索引:\(index)")
    }
        self.view.addSubview(segmentedControl)

        self.segmentedControl = segmentedControl
        self.scrollView.frame = CGRect(x: 0, y:segmentedControl.frame.maxY, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height - segmentedControl.frame.height - 60)

        self.scrollView.contentSize = CGSize.init(width: UIScreen.main.bounds.width * CGFloat(imagesArray.count), height: UIScreen.main.bounds.height)
    }


    func exampleDemoOne(){
            let titlsArray = ["One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten"]
            let segmentedControl = MLSegmentedControl.init(sectionsTitles: titlsArray)


            segmentedControl.titleFormatterClosure = { (_ segmentedControl:MLSegmentedControl,_ title:String,_ index:Int,_ selected:Bool) -> NSAttributedString in

            if selected == true {
            return NSAttributedString.init(string: title, attributes: [NSAttributedStringKey.font : UIFont.systemFont(ofSize: 16),NSAttributedStringKey.foregroundColor:UIColor.orange])
            }
            return NSAttributedString.init(string: title, attributes: [NSAttributedStringKey.font : UIFont.systemFont(ofSize: 16),NSAttributedStringKey.foregroundColor:UIColor.black])
        }
        let offsetTop = UIApplication.shared.statusBarFrame.height + 44
        segmentedControl.frame = CGRect.init(x: 0, y: offsetTop, width: UIScreen.main.bounds.width, height: 40)
        segmentedControl.segmentWidthStyle = .fixed

        segmentedControl.imagePosition = .aboveText
        segmentedControl.selectionIndicatorHeight = 2
        segmentedControl.borderType = .none
        segmentedControl.addTarget(self, action: #selector(changeValueToIndex(segmentcontrol:)), for: [.valueChanged])
        self.view.addSubview(segmentedControl)

        self.segmentedControl = segmentedControl
        self.scrollView.frame = CGRect(x: 0, y:segmentedControl.frame.maxY, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height - segmentedControl.frame.height - 60)

        self.scrollView.contentSize = CGSize.init(width: UIScreen.main.bounds.width * CGFloat(titlsArray.count), height: UIScreen.main.bounds.height)

    }
        @objc func changeValueToIndex(segmentcontrol:MLSegmentedControl){


        let x = CGFloat(segmentcontrol.selectedSegmentIndex) * UIScreen.main.bounds.width
        let rect = CGRect.init(x: x, y: self.scrollView.frame.origin.y, width: UIScreen.main.bounds.width, height: self.scrollView.frame.height);
        // contentSize width/height 不能设置为0
        self.scrollView.scrollRectToVisible(rect, animated: true)
        }
    }




    extension DetailsViewController:UIScrollViewDelegate{

    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        let index = Int(scrollView.contentOffset.x / UIScreen.main.bounds.width)
        self.segmentedControl?.setSelectedSegmentIndex(index: index, animation: true)

        scrollView.backgroundColor = UIColor.init(red: CGFloat(arc4random_uniform(255))/255.0, green: CGFloat(arc4random_uniform(255))/255.0, blue: CGFloat(arc4random_uniform(255))/255.0, alpha: 1)
    }

    func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
        scrollView.backgroundColor = UIColor.init(red: CGFloat(arc4random_uniform(255))/255.0, green: CGFloat(arc4random_uniform(255))/255.0, blue: CGFloat(arc4random_uniform(255))/255.0, alpha: 1)
    }


    }

作者

MrDML, [email protected]

许可

MLSegmentedControl 在MIT许可下可用。更多信息请见LICENSE文件。