iOS - 添加一个全局悬浮按钮(集成pods版)

栏目: IOS · 发布时间: 6年前

内容简介:背景介绍 :在普通的iOS开发组中,一般测试机都不止一台,但是我们在开发的时候,不可能每台测试机时刻保持最新的代码,这就出现了一个问题,当测试测出问题的时候,(或者产品突然拿去点点看的时候出了问题)如果不知道当前的版本,可能不确定是什么时候出的问题。解决方案:如果当前环境是测试服的时候,展示一个全局浮动标签,这样不仅看到此标志就告诉测试(包括我们自己)当前的环境,当出现问题的时候,通过标签,可以快速定位当前问题发生的版本号等等![需求设计图.png](http://upload-images.jianshu

背景介绍 :在普通的iOS开发组中,一般测试机都不止一台,但是我们在开发的时候,不可能每台测试机时刻保持最新的代码,这就出现了一个问题,当测试测出问题的时候,(或者产品突然拿去点点看的时候出了问题)如果不知道当前的版本,可能不确定是什么时候出的问题。

iOS - 添加一个全局悬浮按钮(集成pods版)

解决方案:如果当前环境是测试服的时候,展示一个全局浮动标签,这样不仅看到此标志就告诉测试(包括我们自己)当前的环境,当出现问题的时候,通过标签,可以快速定位当前问题发生的版本号等等

![需求设计图.png](http://upload-images.jianshu.io/upload_images/4563271-db6a7256eb913f31.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

思路:

  • 由于要全局显示,所以必须加在最上层(window层)
  • 由于需求图中有文字和背景图片,优先考虑UIButton(当然,如果有勇士非要用UIView,里面放imageView 和 label也o98k)
  • 由于此图片不是半透明,会挡住后面的内容,所以这个标签必须可以拖动 - 考虑添加拖拽手势
  • 本质上可以理解为,创建一个UIButton,为其添加拖拽手势,然后将其添加到UIWindow显示

知识1:按钮显示2行文字

//UIbutton的换行显示
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;

//然后如同title的内容用包含“\n”就会换行
title = @“123\n666”
复制代码

知识2:Version 与 Build号的获取

NSString *versionStr = [[[NSBundle
       mainBundle]infoDictionary]valueForKey:@"CFBundleShortVersionString"];
NSString *buildStr = [[[NSBundle
       mainBundle]infoDictionary]valueForKey:@"CFBundleVersion"];
复制代码
iOS - 添加一个全局悬浮按钮(集成pods版)

知识3:控件的移动 - 本质上:坐标 ++

//拖动改变控件的水平方向x值
- (CGRect)changeXWithFrame:(CGRect)originalFrame point:(CGPoint)point{
    BOOL q1 = originalFrame.origin.x >= 0;
    BOOL q2 = originalFrame.origin.x + originalFrame.size.width <= screenW;
    
    if (q1 && q2) {
        originalFrame.origin.x += point.x;
    }
    return originalFrame;
}

//拖动改变控件的竖直方向y值
- (CGRect)changeYWithFrame:(CGRect)originalFrame point:(CGPoint)point{
    
    BOOL q1 = originalFrame.origin.y >= 0;
    BOOL q2 = originalFrame.origin.y + originalFrame.size.height <= screenH;
    if (q1 && q2) {
        originalFrame.origin.y += point.y;
    }
    return originalFrame;
}
复制代码

知识4:控件的移动 - 越界处理(跑到屏幕外了)

//记录该button是否屏幕越界
        BOOL isOver = NO;
        if (frame.origin.x < 0) {
            frame.origin.x = 0;
            isOver = YES;
            
        } else if (frame.origin.x + frame.size.width > screenW) {
            frame.origin.x = screenW - frame.size.width;
            isOver = YES;
        }

        if (frame.origin.y < 0) {
            frame.origin.y = 0;
            isOver = YES;
            
        } else if (frame.origin.y+frame.size.height > screenH) {
            frame.origin.y = screenH - frame.size.height;
            isOver = YES;
        }
        
        if (isOver) {
            //如果越界-跑回来
            [UIView animateWithDuration:0.3 animations:^{
                self.frame = frame;
            }];
        }
复制代码

知识5:封装需求 - 如果限制只能水平 or 竖直滑动 or 全局滑动

MNAssistiveTouchTypeNone = 0,         //没限制随便移动
MNAssistiveTouchTypeVerticalScroll,   //只能垂直移动
MNAssistiveTouchTypeHorizontalScroll, //只能竖直移动
复制代码
switch (type) {
        case MNAssistiveTouchTypeNone:
        {
            水平方向坐标 ++;
            竖直方向坐标 ++;
            break;
        }case MNAssistiveTouchTypeHorizontalScroll:{
            竖直方向坐标 ++;
            break;
        }
        case MNAssistiveTouchTypeVerticalScroll:{
            水平方向坐标 ++;
            break;
        }
    }
复制代码

使用方法

0.下载 demo文件

1.引入“MNAssistiveBtn”文件

2.进入“AppDelegate.m”

3.在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{...} 方法中,添加以下两句代码

//示例demo样式
    MNAssistiveBtn *btn = [MNAssistiveBtn mn_touchWithType:MNAssistiveTouchTypeHorizontalScroll
                                                     Frame:frame
                                                     title:title
                                                titleColor:[UIColor whiteColor]
                                                 titleFont:[UIFont systemFontOfSize:11]
                                           backgroundColor:nil
                                           backgroundImage:[UIImage imageNamed:@"test"]];
    [self.window addSubview:btn];
复制代码

最终样式展示~

iOS - 添加一个全局悬浮按钮(集成pods版)

集成方法

1.CocoaPods : pod 'MNFloatBtn'

2.手动导入 : 拖入 MNFloatBtn 文件夹

使用方法

#import <MNFloatBtn/MNFloatBtn.h>
  • 任何情况都显示悬浮按钮
[MNFloatBtn show];
复制代码
  • 仅在Debug模式下显示悬浮按钮(推荐使用)
[MNFloatBtn showDebugModeWithType:MNAssistiveTypeNone];
复制代码
  • 移除悬浮按钮在界面上显示
[MNFloatBtn hidden];
复制代码
  • 按钮点击事件
[MNFloatBtn sharedBtn].btnClick = ^(UIButton *sender) {

	NSLog(@" btn.btnClick ~");
    
};
复制代码

进阶用法:

  • 默认显示当前日期
[[MNFloatBtn sharedBtn] setBuildShowDate:YES];
复制代码
  • 配置api环境显示
#define kAddress            @"testapi.miniLV.com"
//#define kAddress            @"devapi.miniLV.com"
//#define kAddress            @"api.miniLV.com"
    
//自己配置 - 什么api环境下,要显示什么标签
NSDictionary *envMap = @{
                         @"测试":@"testapi.miniLV.com",
                         @"开发":@"devapi.miniLV.com",
                         @"生产":@"api.miniLV.com"
                         };
                             
//设置不同环境下,要展示的不同title,以及当前的Host
[[MNFloatBtn sharedBtn]setEnvironmentMap:envMap currentEnv:kAddress]; 
    
复制代码

demo地址

喜欢的可以给个star,不胜感激~


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Algorithms in Java, Part 5

Algorithms in Java, Part 5

Robert Sedgewick / Addison-Wesley Professional / 2003-7-25 / USD 54.99

Algorithms in Java, Third Edition, Part 5: Graph Algorithms is the second book in Sedgewick's thoroughly revised and rewritten series. The first book, Parts 1-4, addresses fundamental algorithms, data......一起来看看 《Algorithms in Java, Part 5》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具