ScrollMenusView 1.1.1

ScrollMenusView 1.1.1

weiman维护。



  • weiman

ScrollMenusView

swift4 滑动菜单

swift4 滚动菜单

1. 支持滑动、点击切换的滑动菜单View,不依赖任何第三方库,纯手工计算。

  1. 滑动菜单 View,支持滑动,点击切换。不依赖于任何 SDK。

2. 支持 cocoa pods

  1. 支持 cocoa pods

platform :ios, '9.0' inhibit_all_warnings!

target '你的项目名字' do use_frameworks!

pod 'ScrollMenusView'

end

  1. 支持左图右文的菜单,初始化时使用:
  1. 支持左图右文的菜单。

public init(titles: [MenuModel], frame: CGRect, menuHeight: CGFloat = 44)

  1. 支持纯文字菜单,初始化时使用:
  1. 也支持纯文字菜单。您可以使用以下函数进行初始化。

public init(titles: [String], frame: CGRect, menuHeight: CGFloat = 44)

  1. 支持动态修改某个位置上的菜单文字和图片
  1. 支持修改位于索引 . 的菜单项。
/// 更改菜单(change menu at index)

///

/// - Parameters:

///   - menu: 要替换的菜单(the menu will be set)

///   - index: 要被替换的位置(the index will be set new menu)

public func change(menu: MenuModel, index: Int)

或者

public func change(title: String, index: Int)

cocoa pods 使用示例:

cocoa pods 支持 ScrollMenusView 的示例。

import UIKit import ScrollMenusView

class ViewController: UIViewController {

private var menus: [MenuModel] = []

override func viewDidLoad() {
    super.viewDidLoad()
    setup()
}

private func setup() {
    let menu1 = MenuModel(title: "菜单一",
                          imageNormal: nil,
                          imageSelected: nil)
    let menu2 = MenuModel(title: "123",
                          imageNormal: nil,
                          imageSelected: nil)
    let menu3 = MenuModel(title: "我是好孩子",
                          imageNormal: nil,
                          imageSelected: nil)
    menus = [menu1, menu2, menu3]
    let frame = CGRect(x: 0,
                       y: 20,
                       width: view.bounds.size.width,
                       height: view.bounds.size.height - 20)
    let menu = ScrollMenus(titles: menus,
                           frame: frame,
                           menuHeight: 44)
    view.addSubview(menu)
    menu.dataSource = self
    menu.delegate = self
}

}

extension ViewController: ScrollMenusDataSource {

func menuViewNumberOfItems() -> Int {
    return menus.count
}

func menuViewViewForItems(atIndex: Int) -> UIView {
    return UIView()
}

}

extension ViewController: ScrollMenusDelegate {

func menuDidChange(currentIndex: Int) {
    print("index = \(currentIndex)")
}

}

效果图:

Alt Text

不使用 cocoa pods,直接将项目导入到项目中,示例:

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var menuView: UIView!
private var menus: [MenuModel] = []
private var scrollMenu: ScrollMenus?
private var childs: [UIViewController] = [FirstViewController.instance(),
                                          SecondViewController.instance(),
                                          ThirdViewController.instance()]

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    
    childs.forEach { addChildViewController($0) }
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    
    childs.forEach { addChildViewController($0) }
}

override func viewDidLoad() {
    super.viewDidLoad()
    setup()
    
}

private func setup() {
    
    let menu1 = MenuModel(title: "购买记录",
                          imageNormal: nil,
                          imageSelected: nil)
    let menu2 = MenuModel(title: "680人",
                          imageNormal: #imageLiteral(resourceName: "personNumber_normal"),
                          imageSelected: #imageLiteral(resourceName: "personNumber_selected"))
    let menu3 = MenuModel(title: "商品详情",
                          imageNormal: nil,
                          imageSelected: nil)
    menus = [menu1, menu2, menu3]
    let menu = ScrollMenus(titles: menus,
                           frame: menuView.bounds,
                           menuHeight: 44)
    menu.dataSource = self
    menu.delegate = self
    menu.set(selected: 1)
    menu.lineColor = #colorLiteral(red: 0.8078431487, green: 0.02745098062, blue: 0.3333333433, alpha: 1)
    menu.textColor = #colorLiteral(red: 0.6000000238, green: 0.6000000238, blue: 0.6000000238, alpha: 1)
    menu.textSeletedColor = #colorLiteral(red: 0.8078431487, green: 0.02745098062, blue: 0.3333333433, alpha: 1)
    menuView.addSubview(menu)
    scrollMenu = menu
}

/// 更改菜单
@IBAction func changeMenu(_ sender: Any) {
    let menu = MenuModel(title: "改变的菜单", imageNormal: nil, imageSelected: nil)
    scrollMenu?.change(menu: menu, index: 0)
}

}

extension ViewController: ScrollMenusDataSource {

func menuViewNumberOfItems() -> Int {
    return menus.count
}

func menuViewViewForItems(atIndex: Int) -> UIView {
    guard atIndex < menus.count, atIndex < childs.count else {
        return UIView()
    }
    return childs[atIndex].view
}

}

extension ViewController: ScrollMenusDelegate {

func menuDidChange(currentIndex: Int) {
    print("------------  \(currentIndex)")
    
}

}