iOS动画弹出式按钮
介绍:
OXExpandingButtonBar是一个弹出按钮的控件。首先有一个主按钮,点击主按钮后,主按钮旋转,并向上弹出一串子按钮。弹出时子按钮会旋转,并且到达最终位置后还会反弹一下,还是挺萌的哈哈。再次点击主按钮,主按钮会反向旋转回来,子按钮也会向下反向旋转着收回来。
这里的主按钮和子按钮都是在本控件外自行设置的,所以子按钮的响应方法也可以方便地在自己的ViewController里设置。在初始化本控件前,要创建主按钮和子按钮数组。可以查看我的示例看看怎么使用,还是挺简单的~
效果图:
导入:
只用复制OXExpandingButtonBar.h和OXExpandingButtonBar.m文件到你的工程中,就可以进入import调用了,很方便。可以在这里下载。
使用:
首先要对控件进行初始化,上面也说了,所有的按钮都是在初始化本控件之前需要自己创建的,直接在ViewController里,创建你的主按钮和所有子按钮,子按钮放到一个数组里面,在这个过程中你的子按钮的响应方法也就可以自行设置了。然后还要设置一个CGPoint变量,用于对按钮位置进行定位。
/**
* 初始化bar
* 参数:mainButton:主按钮;buttons:子按钮数组;center:中心点
**/
- (id) initWithMainButton:(UIButton*)mainButton
buttons:(NSArray*)buttons
center:(CGPoint)center;
也可以使用这个方法来从别的地方展开或收起子按钮串:
/**
* 展开子按钮
**/
- (void)showButtonsAnimated;
/**
* 收起子按钮
**/
- (void) hideButtonsAnimated;
使用“isExpanding”属性可以判断子按钮是否已弹出。如:
if (bar.isExpanding) {
// 如果已展开
[bar hideButtonsAnimated];
}
自定义:
有一些属性可以自行定义,这部分也在不停考虑和增加中,有建议的可以告诉我~ 已实现定义方法如下:
- (void)setMainRotate:(float)rotate;
设置展开时主按钮旋转到的角度。默认为0度。
- (void)setMainReRotate:(float)rotate;
设置收起时主按钮旋转到的角度。默认为45度。
- (void)setAnimated:(BOOL)animated;
设置子按钮弹出及收回是否动画。包括主按钮旋转动画、主按钮改变透明度的延时、子按钮旋转动画、子按钮弹出、收回的动画,若设为NO则全部取消动画。默认为YES。
- (void)setSpin:(BOOL)b;
设置弹出子按钮时是否旋转子按钮。默认为YES。
- (void)setEndY:(float)endy;
设置子按钮最终位置之间的高度距离。默认为30。
- (void)setFarY:(float)fary;
设置子按钮弹出动画弹到的最远高度距离。默认为30。
- (void)setNearY:(float)neary;
设置子按钮弹出动画反弹时的最近高度距离。默认为15。
- (void)setMainAlpha:(float)alpha;
设置主按钮未展开时的alpha值。默认为你对主按钮设置的alpha值。 注意:在创建主按钮时,需要自行设置初始的alpha值,与此处设置的一般一致
- (void)setMainAnimationTime:(float)time;
设置主按钮旋转动画时间。默认为0.3秒。
- (void)setSubAnimationTime:(float)time;
设置子按钮弹出和旋转动画时间。默认为0.4秒。
- (void)setDelay:(float)time;
设置子按钮之间的间隔时间;也影响主按钮延迟改变透明度的时间。默认为0.1秒。
以上就是关于动画弹出式按钮OXExpandingButtonBar的介绍,可以查看https://github.com/Cloudox/OXExpandingButtonBar获取示例工程。
相关文章
- 如何用 30s 给面试官讲清楚什么是 Token?
- 为什么使用消息队列?我这样回答,面试官直说讲得很清楚
- 如何用 30s 给面试官讲清楚什么是 Session-Cookie 认证
- 病毒和战争齐飞,24 届秋招会更惨吗?
- 送分题,ArrayList 的扩容机制了解吗?
- 如何构建你自己的计算机网络知识体系?
- 三分钟图解 MVCC,看一遍就懂
- 日月既往,不可复追,暑期实习结束!
- 「萌新指南」SOA vs. 微服务:What’s the Difference?
- 三分钟入门 InnoDB 存储引擎中的表锁和行锁
- DHCP:IP 并非与生俱来
- 内存管理两部曲之虚拟内存管理
- 内存管理两部曲之物理内存管理
- 你看到的所有地址都不是真的 | 虚拟地址与物理地址
- 「有点收获」三种基本方法创建线程
- JMM 最最最核心的概念:Happens-before 原则
- 为什么 DNS 协议使用 UDP?只使用了 UDP 吗?
- 「重磅开篇」形成完善的多线程世界观
- String 的不可变真的是因为 final 吗?
- Hashtable 渐渐被人们遗忘了,只有面试官还记得,感动