FB: pavel.chehov.9
======================================================
pavel-chehov/SimpleCircleMenuGitHub 仓库
文档
示例
需求
- iOS 11.0及以上
许可
SimpleCircleMenu遵循MIT许可证。有关更多信息,请参阅LICENSE文件。版权所有 © 2018 EGO创意创新,由Pavel Chehov维护
安装
CocoaPods是Cocoa项目的依赖管理器。您可以使用以下命令安装它
$ gem install cocoapods
要使用CocoaPods将SimpleCircleMenu集成到您的Xcode项目中,在您的Podfile
中指定它
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '11.0'
use_frameworks!
pod 'SimpleCircleMenu'
然后,运行以下命令
$ pod install
文档
属性
- unfocusedBackgroundColor: UIColor - 按钮在常规状态下的背景颜色。
- focusedBackgroundColor: UIColor - 按钮在按下状态下的背景颜色。
- unfocusedIconColor: UIColor - 按钮在常规状态下的图标颜色。
- focusedIconColor: UIColor - 按钮在按下状态下的图标颜色。
- circleMenuItems: [CircleMenuItemModel] - 此属性包含按钮的模型序列。
方法
- attach(viewController: UIViewController) - 将菜单添加到当前viewController的视图底部右角
限制
通用圆菜单必须包含3到9个按钮。每个子菜单应包含1到5个按钮。我们根据UIViewController的通用视图计算菜单框架。这意味着如果您想在屏幕底部安装横幅广告,您将看到菜单按钮在您的横幅广告之上。CircleMenuItemModel具有初始化程序,包括id、图标源以及如果存在则包含子菜单的数组。在这种情况下,用户应生成唯一的id,因为按钮菜单点击识别是通过id实现的。TouchUpInside事件处理程序代理必须遵守CircleMenuDelegate协议,并重写menuItemSelected(id: Int)方法,其中id是按钮菜单标识符。
圆形菜单使用本地的弹簧动画效果。我们使用带有透明背景的UIView来放置所有菜单按钮。但使用位于圆形菜单视图下方的视图并不会有问题,因为我们重写了hitTest(:CGPoint,:UIEvent?)方法。为了性能考虑,我们仅使用6个物理按钮并进行缓存。汉堡按钮使用Lottie动画。
模型
public class CircleMenuItemModel {
public var id: Int?
public var imageSource: UIImage?
public var children: [CircleMenuItemModel]?
public var hasChildren: Bool
public init()
public init(id: Int?, imageSource: UIImage?, children: [CircleMenuItemModel]? = nil)
}
示例
import SimpleCircleMenu
class ViewController: UIViewController, CircleMenuDelegate {
var icons = [String]()
let submenuIds = [2,3]
override func viewDidLoad() {
super.viewDidLoad()
icons.append(contentsOf: ["icImage", "icPanorama", "icVideo",
"icPhoto","icTimelapse","icMacro", "icPortrait", "icSeries", "icTimer",
"icSixteenToNine", "icOneToOne", "icHDR"])
let circleMenu = CircleMenu()
circleMenu.attach(to: self)
circleMenu.delegate = self
//here you can customize needed properties
circleMenu.circleMenuItems = createCircleMenuItems(count: 4)
circleMenu.focusedIconColor = UIColor.red
circleMenu.unfocusedIconColor = UIColor.green
circleMenu.focusedBackgroundColor = UIColor.black
circleMenu.unfocusedBackgroundColor = UIColor.yellow
}
func menuItemSelected(id: Int) {
//your click event handler
}
func menuDidOpen() {
}
func menuDidClose() {
}
private func createCircleMenuItems(count: Int) -> [CircleMenuItemModel] {
var menuModels = [CircleMenuItemModel]()
for i in 0..<count {
let menuModel = CircleMenuItemModel(id: i, imageSource: UIImage.init(named: icons[i]))
if submenuIds.contains(i){
for j in 9..<12 {
let submenuModel = CircleMenuItemModel(id: j, imageSource: UIImage.init(named: icons[j]))
menuModel.children!.append(submenuModel)
}
}
menuModels.append(menuModel)
}
return menuModels
}
}