测试已测试 | ✗ |
语言语言 | Objective-CObjective C |
许可协议 | MIT |
发布时间最后发布 | 2017年9月 |
由 Christian Klaproth 维护。
好吧,它是一个圆形菜单。有点类似。适用于 iOS。
想法是保持 UI 简洁明了,并在需要时向用户展示按钮。以下截图是从我在此仓库中提供的演示应用中捕获的。只需克隆此仓库,然后在 CircleViewDemo 文件夹中调用 pod install
。圆形菜单通过 UILongPressGesture
打开。只要用户按下手指,菜单就会保持打开状态。通过拖动按钮并松开手指来选择按钮。
以下动画显示了深度效果(对不起,gif 质量不佳,您必须在本演示应用中查看!)您可以选择绘制柔和的阴影,当按钮被激活时,它会略微变形。同时,按钮会稍微缩小,从而产生极强的 3D 效果。
如果您不想将菜单从任何地方弹出(您的用户必须知道在哪里长按才能看到菜单),但想要提供一个菜单按钮,可以使用 CKCircleMenuView
中的 tap 模式。一旦打开,菜单会保持打开状态,直到用户选择一个选项或在其他地方点击其它地方关闭菜单。
CKCircleMenuView 旨在易于集成和使用。打开菜单和响应用户的选择与使用 UIAlertView (已弃用) UIAlertController 一样简单。
在展示菜单之前,有一些选项可以调整。
CircleMenuDirectionUp
)UIButtonType.System
一样(默认 = NO)UIVisualEffectsView
作为按钮的背景(默认 = NO)如果您在Swift项目中使用CKCircleMenuView
,请将以下行添加到您的Objective-C桥接头文件中。
#import <CKCircleMenuView/CKCircleMenuView.h>
在您想要使用CKCircleMenuView
的Swift类中,添加以下导入语句。
import CKCircleMenuView
请查看本存储库中包含的示例应用程序,以查看如何使用CKCircleMenuView
的完整工作示例。
基本上,您需要做的是:在Storyboard中为应触发CKCircleMenuView
的视图添加一个长按手势识别器,并将其连接到视图控制器中的操作方法。或者,如果您想在点击模式下使用菜单,请添加一个UIButton
并将其触摸-up-inside事件连接到视图控制器中的操作方法。您需要实现一些功能。
CKCircleMenuView
的起点(中心)。let tPoint = CGPoint(x: button.frame.midX, y: button.frame.midY)
viewDidLoad
中,如果菜单的内容不是动态的)。var circleMenuImageArray = Array<UIImage>()
override func viewDidLoad() {
super.viewDidLoad()
// ...
self.circleMenuImageArray.append(UIImage(named: "InfoChartButton")!)
self.circleMenuImageArray.append(UIImage(named: "CircleChartButton")!)
self.circleMenuImageArray.append(UIImage(named: "BarChartButton")!)
self.circleMenuImageArray.append(UIImage(named: "RealtimeButton")!)
self.circleMenuImageArray.append(UIImage(named: "LineChartButton")!)
}
var tOptions = Dictionary<String, AnyObject>()
tOptions[CIRCLE_MENU_OPENING_DELAY] = 0.1 as AnyObject
tOptions[CIRCLE_MENU_MAX_ANGLE] = 180.0 as AnyObject
tOptions[CIRCLE_MENU_RADIUS] = 105.0 as AnyObject
tOptions[CIRCLE_MENU_DIRECTION] = Int(CircleMenuDirectionUp.rawValue) as AnyObject
tOptions[CIRCLE_MENU_BUTTON_BACKGROUND_NORMAL] = UIColor.init(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.4)
tOptions[CIRCLE_MENU_BUTTON_BACKGROUND_ACTIVE] = UIColor.init(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.8)
tOptions[CIRCLE_MENU_BUTTON_BORDER] = UIColor.white
tOptions[CIRCLE_MENU_DEPTH] = 2.0 as AnyObject
tOptions[CIRCLE_MENU_BUTTON_RADIUS] = 35.0 as AnyObject
tOptions[CIRCLE_MENU_BUTTON_BORDER_WIDTH] = 2.0 as AnyObject
tOptions[CIRCLE_MENU_TAP_MODE] = true as AnyObject
tOptions[CIRCLE_MENU_LINE_MODE] = false as AnyObject
tOptions[CIRCLE_MENU_BUTTON_TINT] = false as AnyObject
tOptions[CIRCLE_MENU_BACKGROUND_BLUR] = false as AnyObject
tOptions[CIRCLE_MENU_BUTTON_TITLE_VISIBLE] = true as AnyObject
tOptions[CIRCLE_MENU_BUTTON_TITLE_FONT_SIZE] = 11.0 as AnyObject
CKCircleMenuDelegate
作为协议添加)。self.circleMenuView = CKCircleMenuView(atOrigin: tPoint, usingOptions: tOptions, withImageArray: self.circleMenuImageArray)
self.view.addSubview(self.circleMenuView!)
self.circleMenuView!.delegate = self
self.circleMenuView!.openMenu()
CKCircleMenuDelegate
协议的方法以响应菜单事件。// MARK: Circle Menu Delegate
func circleMenuActivatedButton(with anIndex: Int32) {
// ...
}
func circleMenuOpened() {
// ...
}
func circleMenuClosed() {
// ...
}
Christian Klaproth,@JaNd3r
CKCircleMenuView受MIT许可协议的约束。有关更多信息,请参阅LICENSE文件。