博客> iOS开发自定义悬浮标
iOS开发自定义悬浮标
2017-08-16 16:17 评论:0 阅读:59 流浪汉
iOS开发 自定义悬浮标 悬浮标

现在许多应用都会用到悬浮标来额外添加一些功能,如:用户中心,用户分享,切换账号... 。网上也能找到各种各样的Demo,但是有很多Demo除了大神级别的开发者能够看懂,像我们这些技术小白大都不知所云。本文将根据网络Demo修改向大家介绍一种比较简单的创建悬浮标方法,以供大家参考:

一,首先要确定一下思路:

悬浮标是要悬浮在app中,不管界面怎么跳转,始终悬浮在最上层。有些Demo中是继承个UINavigationController 并将所有需要显示的视图申明一下(所有视图全部加载在UINavigationController的self.view上),但是这种方法比较麻烦,也不能通用,今天我们所用的Demo,是直接创建一个UIWindow,把悬浮标添加到keywindow里, UIWindow *window = [UIApplication sharedApplication].keyWindow; [window.rootViewController.view addSubview:self]; 这样就比较方便了。

二,闲话少说,现在开始啦:

首先创建一个继承UIView的类:DXBSuspendWindow,并创建其初始化方法:

// warning: frame的长宽必须相等 - (instancetype)initWithFrame:(CGRect)frame mainImageName:(NSString *)mainImageName imagesAndTitle:(NSDictionary*)imagesAndTitle bgcolor:(UIColor *)bgcolor;

// 长按雷达辐射效果 - (instancetype)initWithFrame:(CGRect)frame mainImageName:(NSString *)mainImageName imagesAndTitle:(NSDictionary*)imagesAndTitle bgcolor:(UIColor *)bgcolor animationColor:animationColor;

这里解释一下各个参数的含义,frame就不用多说,当然是悬浮标的坐标系;mainImageName:悬浮标的图片名称;imagesAndTitle:点开悬浮标里面各个按钮的图片名称和功能名称,如:@{Resouse(@"YH_center_user@2x.png"):@"用户中心"};bgcolor:这是悬浮标的背景颜色,可以根据自己的喜好自行调整;animationColor:这个是长按悬浮标并在屏幕上来回滑动时显示的动画效果的颜色,同样可以根据自己的喜好来定。

接着写一个block回调,用来回调悬浮标内各个功能的点击事件:

@property (nonatomic,copy) void(^clickBolcks)(NSInteger i);

然后就可以实现以上的方法了。具体的实现代码我已上传github: https://github.com/dongxianbin/UserCenter.git 里面代码都有详细的介绍,Demo里我用了两个不同的悬浮标,我们今天说的是第二种DXBSuspendWindow,第一种方法还有许多问题需要一一去修复,随后会有更新,敬请期待。

三,调用方法:

首先导入头文件:#import "DXBSuspendWindow.h" 并创建私有变量
DXBSuspendWindow *suspendWindow; 这个可以根据自己的需要来创建变量类型。

接着初始化: CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;

CGFloat floatWidowHeight = 50, floatWindowWidth = 50;

suspendWindow = [[DXBSuspendWindow alloc]initWithFrame:CGRectMake(0, (screenHeight - floatWidowHeight)/2, floatWindowWidth, floatWidowHeight) mainImageName:Resouse(@"YH_center_logo@2x.png") imagesAndTitle:@{Resouse(@"YH_center_user@2x.png"):@"用户中心"} bgcolor:[UIColor lightGrayColor] animationColor:[UIColor purpleColor]]; //调用悬浮标点击事件回调 suspendWindow.clickBolcks = ^(NSInteger i){ NSLog(@"-------点击了%ld--------",(long)i); }; 其中 Resouse(@"YH_center_logo@2x.png") 这个是自己写的一个获取工程内图片的一个宏定义: #define MYBUNDLE_NAME @"Center.bundle"

#define MYBUNDLE_PATH [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: MYBUNDLE_NAME]

#define MYBUNDLE [NSBundle bundleWithPath:MYBUNDLE_PATH]

#define Resouse(fileName) (NSString *)[MYBUNDLE_PATH stringByAppendingPathComponent: fileName]

我将工程所需要的图片放在一下,创建了一个Center.bundle文件,如果有其他简单的方法你们可以根据需要自行选择。

另外注意:因为我这个是建立了一个只有单一view的工程,在调用悬浮标时,最开始我是在- (void)viewDidLoad方法里调用的,但是悬浮标无法显示出来,后来经过不断的尝试,终于发现在-(void)viewDidAppear:(BOOL)animated方法里调用才能过正常显示。

至此,整个自定义悬浮标的整个过程都已经讲解完成了。由于是第一次写博客,所以有很多地方做的不是很好,希望大家能过理解与支持。我也会在以后的工作中继续努力,争取写出更多、更好的文章来供大家分享。谢谢!

收藏
0
sina weixin mail 回到顶部