close
当前位置: 物联网在线 > 技术文库 > ios >

iOS开源:SDiffuseMenu - 炫酷菜单弹射动画

iOS开源:SDiffuseMenu - 炫酷菜单弹射动画

配置图如下: 

iOS开源:SDiffuseMenu - 炫酷菜单弹射动画

版本记录

V1.2.1 修复代码,以便更好的支持 CocoaPods

V1.2.0 支持 CocoaPods 嵌入代码因访问权限问题致部分功能无法使用,已在1.2.1版修复

V1.1.0 新增任意方向的直线弹出动画\新增常用方向的枚举..

更多记录 请戳一下

一、使用方法:

1.使用 pod 方式嵌入项目: pod 'SDiffuseMenu','~> 1.2.1'

2.直接下载 zip 包内含:

1)SDiffuseMenuDebugDemo.xcodeproj: 调试 demo

2)SDiffuseMenu 文件夹:内含源文件

3)SDiffuseMenuDemo.xcworkspace:CocoaPods 调试 demo ,位于Source 文件夹内

添加协议(动画状态回调) -> 设置选项数组 -> 设置菜单按钮 -> 动画属性配置 -> .addSubview(menu)

1、添加协议

class ViewController: UIViewController, SDiffuseMenuDelegate { var menu: SDiffuseMenu! }

2、设置菜单的选项按钮数据

// 加载图片 guard let storyMenuItemImage = UIImage(named:"menuitem-normal.png") else { fatalError("图片加载失败") } guard let storyMenuItemImagePressed = UIImage(named:"menuitem-highlighted.png") else { fatalError("图片加载失败") } guard let starImage = UIImage(named:"star.png") else { fatalError("图片加载失败") } guard let starItemNormalImage = UIImage(named:"addbutton-normal.png") else { fatalError("图片加载失败") } guard let starItemLightedImage = UIImage(named:"addbutton-highlighted.png") else { fatalError("图片加载失败") } guard let starItemContentImage = UIImage(named:"plus-normal.png") else { fatalError("图片加载失败") } guard let starItemContentLightedImage = UIImage(named:"plus-highlighted.png") else { fatalError("图片加载失败") } var menus = [SDiffuseMenuItem]() for _ in 0 ..< 6 { let starMenuItem = SDiffuseMenuItem(image: storyMenuItemImage, highlightedImage: storyMenuItemImagePressed, contentImage: starImage, highlightedContentImage: nil) menus.append(starMenuItem) }

3、设置菜单按钮

let startItem = SDiffuseMenuItem(image: starItemNormalImage, highlightedImage: starItemLightedImage, contentImage: starItemContentImage, highlightedContentImage: starItemContentLightedImage)

4、添加 SDiffuseMenu

let menuRect = CGRect.init(x: self.menuView.bounds.size.width/2, y: self.menuView.bounds.size.width/2, width: self.menuView.bounds.size.width, height: self.menuView.bounds.size.width) menu = SDiffuseMenu(frame: menuRect, startItem: startItem, menusArray: menus as NSArray, grapyType: SDiffuseMenu.SDiffuseMenuGrapyType.arc) menu.center = self.menuView.center menu.delegate = self self.menuView.addSubview(menu)

5、动画配置

如果配置弧线形动画,则动画中弧线半径变化为:0--> 最大 farRadius--> 最小 nearRadius--> 结束 endRadius

如果配置直线形动画,则动画中半径就是直线段的长度,变化为:0--> 最大 farRadius--> 最小 nearRadius-->结束 endRadius

// 动画时长 menu.animationDuration = CFTimeInterval(animationDrationValue.text!) // 最小半径 menu.nearRadius = CGFloat((nearRadiusValue.text! as NSString).floatValue) // 结束半径 menu.endRadius = CGFloat((endRadiusValue.text! as NSString).floatValue) // 最大半径 menu.farRadius = CGFloat((farRadiusValue.text! as NSString).floatValue) // 单个动画间隔时间 menu.timeOffset = CFTimeInterval(timeOffSetValue.text!)! // 整体角度 menu.menuWholeAngle = CGFloat((menuWholeAngleValue.text! as NSString).floatValue) // 整体偏移角度 menu.rotateAngle = CGFloat((rotateAngleValue.text! as NSString).floatValue) // 展开时自旋角度 menu.expandRotation = CGFloat(M_PI) // 结束时自旋角度 menu.closeRotation = CGFloat(M_PI * 2) // 是否旋转菜单按钮 menu.rotateAddButton = rotateAddButton.isOn // 菜单按钮旋转角度 menu.rotateAddButtonAngle = CGFloat((rotateAddButtonAngleValue.text! as NSString).floatValue) // 菜单展示的形状:直线 or 弧形 menu.sDiffuseMenuGrapyType = isLineGrapyType.isOn == true ? .line : .arc // 为方便使用,V1.1.0版本已枚举常见方位,可直接使用,无需再次设置 rotateAngle && menuWholeAngle // 若对于 rotateAngle\menuWholeAngle 不熟悉,建议查看 source 目录下的配置图片 menu.sDiffuseMenuDirection = .above // 上方180° // menu.sDiffuseMenuDirection = .left // 左方180° // menu.sDiffuseMenuDirection = .below // 下方180° // menu.sDiffuseMenuDirection = .right // 右方180° // menu.sDiffuseMenuDirection = .upperRight // 右上方90° // menu.sDiffuseMenuDirection = .lowerRight // 右下方90° // menu.sDiffuseMenuDirection = .upperLeft // 左上方90° // menu.sDiffuseMenuDirection = .lowerLeft // 左下方90°
(责任编辑:ioter)

用户喜欢...

【原创深度】蓝牙扩展了开源应用

得益于开源软件的成功经验,Arduino开创了开源硬件(OSHW)模型,鼓励业余和专业工程师去学习、修改、宣传、制作和销售其设计的公开可用硬件产品。开源硬件在个人和商业应用中的作用借...


大数据早报:阿里即将开源ApsaraCache Uber关闭备受争议的乘客位置追踪服务(8.31)

数据早知道,上36dsj看早报! 来源36大数据,作者:奥兰多 『阿里』阿里即将开源ApsaraCache,云数据库Redis版分支 Ap...


Seeed Studio Wio Tracker让你轻松创建基于GPS的IoT项目

Seeed Studio的Wio Tracker这款无线输入输出 (Wio) Tracker为开源网关,通过跟踪几乎所有移动的目标并以无线方式上传数据,...


从分布式管理到多租户实现,企业级大数据系统如何利用开源生态构建?

作者: 陈冬 大数据系统的应用领域 首先回顾一下历史。 从中我们可以看到一些趋势,在大数据生态发展的过程中,...


【科技农夫共创物联网新农耕模式】年轻小农靠开源翻转传统农业

宜兰县员山乡深沟村也有一群年轻人,因为对农业的热情,从软件人变成“作田人”,将软件工程的专业带到耕种的...


终止x86架构Arduino开发板项目,英特尔逃离创客市场

在涉足开源硬件和创客市场两年后,英特尔虎头蛇尾地匆匆逃离了这个主打情怀的市场。IT经理网...


Alienware与戴尔发布全新高性能游戏和VR装备,为玩家带来炫酷体验

Alienware与戴尔今日发布全新PC游戏系统和组件,包括采用AMD Threadripper全新多核处理器选项的高端Alienware游戏台式机、...


加入人工智能开源大战:Lyft计划开源人工智能算法测试工具

Lyft的加入,表明这种开源策略的必要性和重要性已经被越来越多的人工智能领域的科技企业所认知。IT经理网...


潘多拉盒子里的珠宝:NSA开源软件清单

NSA在Github上的开源项目列表,其中不乏精品IT经理网...


拿走不谢 | 100+大数据开源处理工具汇总

本文除了一些常用的大数据工具,还总结汇总了其他大数据工具,几乎是最全的大数据工具的总结。 如果你想入门大...