碰到这个需求,需要在应用里面添加一个悬浮的按钮,一直处在屏幕的最上面,并且在特定的界面不显示,类似与苹果手机上的那个,首先想到的是在当前的window
上添加一个按钮,但是不能保证一直在屏幕的最上面,因为有的时候会在屏幕上弹出各种提示,这些提示我们通常的做法也是加在window
上的,所以就得换另一种思路,创建一个window
,这个window
能保证一直在屏幕的最上层,废话不多说,直接上代码!
首先创建一个类MCAssistiveTouch
继承自UIWindow
;
我设计这个类是一个单例,因为既然是全局的按钮,就最好做成单例,这样在程序运行期间只会有一个对象,我对外界设计了三个接口,一个是显示,一个隐藏,还有一个回调,用来处理点击按钮的事件;
.h文件如下
typedef void(^MCWindowTapBlock)();
@interface MCAssistiveTouch : UIWindow
/// 单例
+ (instancetype)sharedInstance;
/// 展示
-(void)show;
/// 隐藏
-(void)dismiss;
/// 按钮点击的回调
@property(nonatomic,copy)MCWindowTapBlock windowTapBlock;
在.m文件中,先要实现单例方法,在初始化window
的时候,要注意window
只需要创建,不需要添加,创建之后要调用[self makeKeyAndVisible]
就可以正常的显示了,
在初始化window
的时候创建一个按钮并添加到这个window
上,并给这个按钮添加拖拽手势,拖拽的时候只需要判断frame
是否超过规定的范围,在展示和隐藏的方法里只需要设置window
的hidden
属性为YES
or NO
.
具体的代码请点击这里!