demo1 动态显示view或弹框 动态隐藏view或弹框

实现界面如上所示:
有一个弹框,弹框上边有一个关闭按钮,点击按钮,可以关闭弹框。点击弹框的周围区域也可以关闭按钮。 点击上边的隐藏弹框也可以关闭按钮。 在实现功能的基础上,以动画的形式展示跟隐藏。 思路:在之前的开发中,我的思路比较局限。想着用一个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或弹框的更多相关文章
- Android 通过Java代码生成创建界面。动态生成View,动态设置View属性。addRules详解
废话不多说,本文将会层层深入给大家讲解如何动态的生成一个完整的界面. 本文内容: Java代码中动态生成View Java代码中动态设置View的位置,以及其他的属性 LayoutParams详解 一 ...
- CCOMBOX下拉弹出框,因属性对话框自动隐藏而弹出框没有隐藏问题
关于这个问题是可以使用 使其失去焦点 releasecapture()解决的,但是鼠标在下拉列表中的item中经过时,调用releasecapture()后会选中最后mousemove过的item项. ...
- bootstrap模态框动态赋值, ajax异步请求数据后给id为queryInfo的模态框赋值并弹出模态框(JS)
/查询单个 function query(id) { $.ajax({ url : "/small/productServlet", async : true, type : &q ...
- 键盘弹出后上提view隐藏后下拉view还原并修改scroll过程中旋转屏幕到竖屏view显示错误
1,注册键盘相应事件 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillSho ...
- go语言使用go-sciter创建桌面应用(七) view对象常用方法,文件选择,窗口弹出,请求
view对象的详细文档请看: https://sciter.com/docs/content/sciter/View.htm demo9.html代码如下: <!DOCTYPE html> ...
- Android 判断软键盘弹出并隐藏的简单完美解决方案
最近项目中有一个编辑框,下面是个ListView.在触发编辑框弹出软键盘后,ListView还能滑动,并且ListView的item还能响应单击.这样的体验效果很不好.于是便想在滑动或单击item时判 ...
- 手机浏览器浏览WebApp弹出的键盘遮盖住文本框的解决办法
手机浏览器浏览WebApp弹出的键盘遮盖住文本框的解决办法 最近碰到Android微信内置浏览H5页面,因为其中的文本输入框(input)放置在靠近页面的中下方,点击文本框以后,则输入框会被弹出的手机 ...
- 第三十九篇、NavBar动态隐藏、设置透明、毛玻璃效果
1.动态隐藏 - (void)viewDidLoad { [super viewDidLoad]; if ([self respondsToSelector:@selector(automatical ...
- 有几数组表单,js怎么获得数组并动态相加输出到文本框
有几数组表单,js如何获得数组并动态相加输出到文本框<input name= "fee1[] "> <input name= "fee2[] & ...
随机推荐
- AIX系统下挂载外置存储
连接盘柜后在盘柜里映射好分区. 1.扫描硬件才能发现盘柜映射的容量 ,命令cfgmgr 2.查看在 AIX 系统下能否认到盘柜的分区. 命令:lsdev -Cc disk 3.查看物理卷(pv),命令 ...
- java 基础(三) 搭建Java编译环境(树莓派)
安装需求1.JDK的安装2.PI4J的安装 JDK的安装1.首先到JDK的官网:https://www.oracle.com/technetwork/java/javase/downloads/ind ...
- scrapy 源码解析 (三):启动流程源码分析(三) ExecutionEngine执行引擎
ExecutionEngine执行引擎 上一篇分析了CrawlerProcess和Crawler对象的建立过程,在最终调用CrawlerProcess.start()之前,会首先建立Execution ...
- mysql实现主从复制/主从同步
业务场景 小公司业务代码存于一个服务器上,而这个服务器有的时候回宕机,导致业务停顿,造成影响.这个时候 就需要做高可用 两个ngix+两个tomcat+两个mysql实现高可用,避免单点问题.中间使用 ...
- bzoj3384[Usaco2004 Nov]Apple Catching 接苹果*&&bzoj1750[Usaco2005 qua]Apple Catching*
bzoj3384[Usaco2004 Nov]Apple Catching 接苹果 bzoj1750[Usaco2005 qua]Apple Catching 题意: 两棵树,每分钟会从其中一棵树上掉 ...
- 媳妇儿让我给她找一个PDF转word免费工具,找了半天我决定给她写一个出来^-^
之前我媳妇儿让我给她找一个PDF转WORD的免费工具,在网上找了半天发现要不就是收费,要不就是转化的格式混乱.既然网上不能找到好用的免费工具那就直接来写一个吧.人生苦短,我用python. 万能的 ...
- Cyber Security - Palo Alto Basic Introduction
Preparation of the Lab Environment: Download and Install Pan-OS from the following website https://d ...
- 不知道Linux内核到底长啥样?这幅漫画让你秒懂!
下面给大家分享一个[超全2020Linux学习教程],点击链接免费领取哦~ https://www.magedu.com/?p=84301&preview=true
- 解决nginx在Linux中已经正常启动,Windows端的浏览器却无法访问的问题
一:查看Linux中nginx已经正常启动 二:查看80端口,未被占用 三:检查防火墙的问题 关闭防火墙:chkconfig iptables off //失败 暂时关闭防火墙:service ipt ...
- [redis] -- 缓存雪崩和缓存穿透、缓存击穿问题解决方案篇
缓存雪崩 缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉 解决方案 事前:尽量保证整个redis集群的高可用性,发现机器宕机尽快补上.选择合适的内存淘 ...