实现界面如上所示:

有一个弹框,弹框上边有一个关闭按钮,点击按钮,可以关闭弹框。点击弹框的周围区域也可以关闭按钮。 点击上边的隐藏弹框也可以关闭按钮。

在实现功能的基础上,以动画的形式展示跟隐藏。

思路:在之前的开发中,我的思路比较局限。想着用一个view来做中间的那一块,那么问题来了,左上角的关闭按钮,就加在view的左上角。效果猛一看是可以实现,但是这个关闭按钮的点击事件,却不怎么好使,因为按钮有一部分超出了view的界限,于是,点击起来就不太好使。

遇见问题,解决问题。于是我就转换了一种思路。当然这思路还是在别人的指点下完成的。

思路如下:

1.首先确实需要一个弹框的view1 view1的大小是整个界面的大小。设置这个view的背景为半透明,透明度可以是0.5 或者是任意0-1之间的数值,具体看你想要的效果。

2.然后需要一个放内容的view2 这个view2里边包含了 上边的img 还有两行文字,都是放在这个view2里边的。

3.最后将关闭按钮 加在view1的上边。这样就大功告成了。 随便点击关闭按钮,丝毫没有任何印象。

核心代码实现:
acercodeview的代码
//

//  ACErCodeView.m

//  demo1二维码点击动态出现

//

//  Created by Alice_ss on 2018/1/3.

//  Copyright © 2018年 AC. All rights reserved.

//

#import "ACErCodeView.h"

#define SCREENW [UIScreen mainScreen].bounds.size.width

#define SCREENH [UIScreen mainScreen].bounds.size.height

@implementation ACErCodeView{

    UIImageView *codeIMG;

    UILabel *nickNameLabel;

    UILabel *sexLabel;

    UIButton *closeBtn;

}

-(instancetype)initWithFrame:(CGRect)frame{

    if (self = [super initWithFrame:frame]) {

        [self createUI];

    }

    return  self;

}

- (void)createUI{

    //1.创建一个view背景设置呈透明的因为这样的话才能将关闭按钮悬浮在上边。

    UIImageView *bgView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 64, SCREENW,SCREENH)];

    UITapGestureRecognizer *tap  = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapClose)];

    bgView.userInteractionEnabled = YES;

    [bgView addGestureRecognizer:tap];

    [self addSubview:bgView];

    //2.放内容的大view

    UIView *contentView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREENW-120,SCREENH-200)];

    contentView.backgroundColor = [UIColor whiteColor];

    [self addSubview:contentView];

    //3.二维码图片

    codeIMG = [[UIImageView alloc]initWithFrame:CGRectMake((CGRectGetWidth(contentView.frame)-100)/2, CGRectGetMinY(contentView.frame), 100, 100)];

    codeIMG.backgroundColor = [UIColor redColor];

    [contentView addSubview:codeIMG];

    //4.昵称

    nickNameLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, CGRectGetMaxY(codeIMG.frame)+10, CGRectGetWidth(contentView.frame), 44)];

//    nickNameLabel.backgroundColor = [UIColor blueColor];

    nickNameLabel.text = @"我是你们喜欢的Alice";

    nickNameLabel.textAlignment = NSTextAlignmentCenter;

    [contentView addSubview:nickNameLabel];

    //5.sex

    sexLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, CGRectGetMaxY(nickNameLabel.frame)+10, CGRectGetWidth(contentView.frame), 44)];

//    sexLabel.backgroundColor = [UIColor redColor];

    sexLabel.text= @"我的性别是一个漂亮的小美女哦";

    sexLabel.textAlignment  = NSTextAlignmentCenter;

    [contentView addSubview:sexLabel];

    //给contentview设置高度

    contentView.frame = CGRectMake(SCREENW/2-(SCREENW-120)/2, (SCREENH-(CGRectGetMaxY(sexLabel.frame)+10))/2, SCREENW-120, CGRectGetMaxY(sexLabel.frame)+10);

    //6.关闭按钮

    closeBtn = [[UIButton alloc]initWithFrame:CGRectMake(CGRectGetMinX(contentView.frame)-10, CGRectGetMinY(contentView.frame)-10, 30, 30)

                ];

    [closeBtn setBackgroundImage:[UIImage imageNamed:@"icon_shouye_GuanBi.png"] forState:0];

    [closeBtn addTarget:self action:@selector(closeBtnClicked:) forControlEvents:UIControlEventTouchUpInside];

    [self addSubview:closeBtn];

}

//关闭页面

- (void)closeBtnClicked:(UIButton*)sender{

    [UIView animateWithDuration:0.3 animations:^{

        self.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.3, 0.3);

    } completion:^(BOOL finished) {

        [UIView animateWithDuration:0.2 animations:^{

            self.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0, 0);

        }];

        self.hidden = YES;

        self.blockCloseClicked(self.hidden);

    }];

}

//点击背景隐藏界面

- (void)tapClose{

    [UIView animateWithDuration:0.3 animations:^{

        self.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.3, 0.3);

    } completion:^(BOOL finished) {

        [UIView animateWithDuration:0.2 animations:^{

            self.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0, 0);

        }];

        self.hidden = YES;

        self.blockCloseClicked(self.hidden);

    }];

}

@end

//viewcontroller的书写

//

//  Created by Alice_ss on 2018/1/3.

//  Copyright © 2018年 AC. All rights reserved.

//

#import "ViewController.h"

#import "ACErCodeView.h"

#define SCREENW [UIScreen mainScreen].bounds.size.width

#define SCREENH [UIScreen mainScreen].bounds.size.height

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIBarButtonItem *navRBarItem;

@property(nonatomic,strong)ACErCodeView *erCodeIMG;

@end

@implementation ViewController

- (IBAction)naviRBarClicked:(UIBarButtonItem *)sender {

    NSLog(@"RIGHT BAR ITEM CLICKED");

    if(_erCodeIMG.hidden){

        _erCodeIMG.hidden = NO;

        sender.title = @"点击隐藏";

        _erCodeIMG.transform = CGAffineTransformScale(CGAffineTransformIdentity, CGFLOAT_MIN, CGFLOAT_MIN);

        [UIView animateWithDuration:0.3 animations:^{

            self.erCodeIMG.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0);

        } completion:^(BOOL finished) {

            [UIView animateWithDuration:0.2 animations:^{

                _erCodeIMG.transform = CGAffineTransformIdentity;

            }];

        }];

    }else{

        sender.title = @"点击显示";

        [UIView animateWithDuration:0.3 animations:^{

            self.erCodeIMG.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.3, 0.3);

        } completion:^(BOOL finished) {

            [UIView animateWithDuration:0.2 animations:^{

                _erCodeIMG.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0, 0);

            }];

            _erCodeIMG.hidden = YES;

        }];

    }

}

- (void)viewDidLoad {

    [super viewDidLoad];

    self.view.backgroundColor = [UIColor yellowColor];

    // Do any additional setup after loading the view, typically from a nib.

    _erCodeIMG = [[ACErCodeView alloc]initWithFrame:CGRectMake(0, 0,SCREENW , SCREENH)];

    _erCodeIMG.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];

    _erCodeIMG.hidden = YES;

    __weak typeof(self) weakSelf = self;

    _erCodeIMG.blockCloseClicked = ^(BOOL ishidden) {

        if (ishidden) {

            self.navRBarItem.title = @"点击显示";

        }else{

            self.navRBarItem.title = @"点击隐藏";

        }

    };

    [self.view addSubview:_erCodeIMG];

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

@end

以上就是全部代码。

希望新的一年,自己工作越来越踏实。同时也要学会拒绝,学会给与。

如有任何问题。请联系我的邮箱 673658917@qq.com .

demo1 动态显示view或弹框 动态隐藏view或弹框的更多相关文章

  1. Android 通过Java代码生成创建界面。动态生成View,动态设置View属性。addRules详解

    废话不多说,本文将会层层深入给大家讲解如何动态的生成一个完整的界面. 本文内容: Java代码中动态生成View Java代码中动态设置View的位置,以及其他的属性 LayoutParams详解 一 ...

  2. CCOMBOX下拉弹出框,因属性对话框自动隐藏而弹出框没有隐藏问题

    关于这个问题是可以使用 使其失去焦点 releasecapture()解决的,但是鼠标在下拉列表中的item中经过时,调用releasecapture()后会选中最后mousemove过的item项. ...

  3. bootstrap模态框动态赋值, ajax异步请求数据后给id为queryInfo的模态框赋值并弹出模态框(JS)

    /查询单个 function query(id) { $.ajax({ url : "/small/productServlet", async : true, type : &q ...

  4. 键盘弹出后上提view隐藏后下拉view还原并修改scroll过程中旋转屏幕到竖屏view显示错误

    1,注册键盘相应事件 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillSho ...

  5. go语言使用go-sciter创建桌面应用(七) view对象常用方法,文件选择,窗口弹出,请求

    view对象的详细文档请看: https://sciter.com/docs/content/sciter/View.htm demo9.html代码如下: <!DOCTYPE html> ...

  6. Android 判断软键盘弹出并隐藏的简单完美解决方案

    最近项目中有一个编辑框,下面是个ListView.在触发编辑框弹出软键盘后,ListView还能滑动,并且ListView的item还能响应单击.这样的体验效果很不好.于是便想在滑动或单击item时判 ...

  7. 手机浏览器浏览WebApp弹出的键盘遮盖住文本框的解决办法

    手机浏览器浏览WebApp弹出的键盘遮盖住文本框的解决办法 最近碰到Android微信内置浏览H5页面,因为其中的文本输入框(input)放置在靠近页面的中下方,点击文本框以后,则输入框会被弹出的手机 ...

  8. 第三十九篇、NavBar动态隐藏、设置透明、毛玻璃效果

    1.动态隐藏 - (void)viewDidLoad { [super viewDidLoad]; if ([self respondsToSelector:@selector(automatical ...

  9. 有几数组表单,js怎么获得数组并动态相加输出到文本框

    有几数组表单,js如何获得数组并动态相加输出到文本框<input   name= "fee1[] "> <input   name= "fee2[] & ...

随机推荐

  1. DRS是啥你都不知道?不是吧,不是吧

    前言 最近写了很多数据库相关的文章,大家基本上对数据库也有了很多的了解,数据库本身有所了解了,我们是不是应该回归业务本身呢? 大家去了解过自己企业数据库的部署方式么?是怎么部署的,又是部署在哪里的?部 ...

  2. python基础之打/解包及运算符与控制流程

    python基础之打/解包及运算符与控制流程 python中的解压缩(即序列类型的打包和解包) python提供了两个设计元祖和其他序列类型的处理的便利,也就是自动打包与自动解包功能,比如: data ...

  3. 萌新计划 PartⅡ

    Part Ⅱ web 9-15 这一部分的题,主要是绕过过滤条件,进行命令执行 0x01 web 9 过滤条件: if(preg_match("/system|exec|highlight/ ...

  4. java 面向对象(三十二):泛型一 泛型的理解

    1.泛型的概念所谓泛型,就是允许在定义类.接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型.这个类型参数将在使用时(例如,继承或实现这个接口,用这个类型声明变量.创建对象时确定 ...

  5. Linux-常见的命令

    1.杀掉tomcat进程 ps  -ef  |grep  tomcat kill  -9  pid 2.启动http服务 service  httpd  start 3.停止mysql服务 servi ...

  6. Qt-线程的使用

    1  简介 参考视频:https://www.bilibili.com/video/BV1XW411x7NU?p=74 使用多线程的好处:提高应用程序响应速度.使多CPU更加高效.改善程序结构. 在Q ...

  7. vue 应用 :关于 ElementUI 的 message 组件

    我们知道,这个东西的基本用法是这样的: this.$message({ message: '恭喜你,这是一条成功消息', type: 'success' }); 但是我觉得这样还是有点麻烦,所以我决定 ...

  8. 【翻译】.NET 5 Preview7发布

    今天,发布了.NET 5.0 Preview7.这是倒数第二个预览版本(在转移到RC之前).此时,大多数功能应该已经非常接近完成了.Single file和ARM64 intrinsics是两个花费了 ...

  9. Oracle可视化工具连接

    Oracle可是化工具有很多,以下只列举sql developer和sql plus这两款连接方式 sql developer: SQL Develope启动后,需要创建一个数据库连接,只有创建了数据 ...

  10. 修改 Ubuntu SSH 登录后的欢迎信息

    主要就是几个文件: cd  /etc/update-motd.d/ ls 00-header     90-updates-available  98-fsck-at-reboot 10-help-t ...