IOS项目之弹出动画二
在IOS项目之弹出动画一中只是实现也功能,并没有体现面向对象的思想 ,今天就试着把它封装了一下,弹出视图的内容可以根据自定义,此处只是用UIDatePicker来演示
我把它传到了GitHub上 https://github.com/ywcui/YvanDatePicker.git
一、新建一个类YWDatePicker集成UIView
// YvanDatePicker.h #import <UIKit/UIKit.h> typedef void (^selectDate)(NSDate *date); @interface YvanDatePicker : UIView //单利 + (YvanDatePicker *)sharedManager; //block传值获取选择时间 @property(nonatomic,strong) selectDate selectDate; //时间选择控件 可设置属性 @property(nonatomic,strong) UIDatePicker *datePicker; //window全屏显示 -(void)showInWindow; // View中显示 -(void)showInView:(UIView*)view; //在父视图view的相对位置为Frame -(void)showInView:(UIView*)view withFrame:(CGRect)frame; //消失视图 -(void)dismissView; @end
#define MAXHEIGHT [UIScreen mainScreen].bounds.size.height
#import "YvanDatePicker.h"
@interface YvanDatePicker ()
@end
@implementation YvanDatePicker
+ (YvanDatePicker *)sharedManager
{
static YvanDatePicker *sharedAccountManagerInstance = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
sharedAccountManagerInstance = [[self alloc] init];
sharedAccountManagerInstance.backgroundColor=[UIColor colorWithWhite:0.5 alpha:0.4];
});
return sharedAccountManagerInstance;
}
-(void)showInWindow
{
[self showInView:[UIApplication sharedApplication].keyWindow];
}
-(void)showInView:(UIView*)view
{
[self showInView:view withFrame:CGRectMake(, , view.frame.size.width, view.frame.size.height)];
}
//frame相对于父视图的位置
-(void)showInView:(UIView*)view withFrame:(CGRect)frame;
{
//在此可以自定义视图
self.frame=CGRectMake(frame.origin.x, MAXHEIGHT, frame.size.width, frame.size.height);
[UIView animateWithDuration: options:UIViewAnimationOptionCurveEaseOut animations:^{
self.frame=frame;
} completion:nil];
UITapGestureRecognizer *tapGesture=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(dismissView)];
[self addGestureRecognizer:tapGesture];
if (_datePicker==nil) {
_datePicker=[[UIDatePicker alloc]init];
_datePicker.locale=[[NSLocale alloc ]initWithLocaleIdentifier:@"zh_Hans_CN"];
_datePicker.datePickerMode=UIDatePickerModeDate;
_datePicker.timeZone=[NSTimeZone defaultTimeZone];
}
_datePicker.frame=CGRectMake(, frame.size.height-, , );
[self addSubview:_datePicker];
[view addSubview:self];
}
-(void)dismissView
{
_selectDate(_datePicker.date);
[UIView animateWithDuration: options:UIViewAnimationOptionCurveEaseOut animations:^{
self.frame=CGRectMake(, MAXHEIGHT, self.frame.size.width , self.frame.size.height);
} completion:^(BOOL finished) {
[self removeFromSuperview];
}];
}
@end
二、调用
//
// ViewController.m
// YvanDatePicker
//
// Created by City--Online on 15/6/18.
// Copyright (c) 2015年 YvanCui. All rights reserved.
//
#import "ViewController.h"
#import "YvanDatePicker.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.rightBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"弹出" style:UIBarButtonItemStyleDone target:self action:@selector(leftClick)];
}
-(void)leftClick
{
YvanDatePicker *picker=[YvanDatePicker sharedManager];
picker.selectDate=^(NSDate *date)
{
NSLog(@"%@",date);
};
// //1.设置在父视图的Frame
// CGRect frame=CGRectMake(10, self.view.bounds.size.height-260, self.view.bounds.size.width-20, 260);
// [picker showInView:self.view withFrame:frame];
//
// //2.Window显示
// [picker showInWindow];
//
// //3.View全屏显示
// [picker showInView:self.view];
//4.相对于Window的Frame
CGRect frame1=CGRectMake(, [UIApplication sharedApplication].keyWindow.bounds.size.height-, [UIApplication sharedApplication].keyWindow.bounds.size.width, );
[picker showInView:[UIApplication sharedApplication].keyWindow withFrame:frame1];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
三、显示效果




这个还可以进一步优化可以加一个标记值可以防止连续点击时一直弹出
#define MAXHEIGHT [UIScreen mainScreen].bounds.size.height
#import "YvanDatePicker.h"
@interface YvanDatePicker ()
@property(nonatomic,assign) BOOL openFlag;
@end
@implementation YvanDatePicker
+ (YvanDatePicker *)sharedManager
{
static YvanDatePicker *sharedAccountManagerInstance = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
sharedAccountManagerInstance = [[self alloc] init];
sharedAccountManagerInstance.backgroundColor=[UIColor colorWithWhite:0.5 alpha:0.4];
});
return sharedAccountManagerInstance;
}
-(void)showInWindow
{
[self showInView:[UIApplication sharedApplication].keyWindow];
}
-(void)showInView:(UIView*)view
{
[self showInView:view withFrame:CGRectMake(, , view.frame.size.width, view.frame.size.height)];
}
//frame相对于父视图的位置
-(void)showInView:(UIView*)view withFrame:(CGRect)frame;
{
if (_openFlag) {
[self dismissView];
return;
}
_openFlag=true;
self.frame=CGRectMake(frame.origin.x, -frame.size.height, frame.size.width, frame.size.height);
[UIView animateWithDuration: options:UIViewAnimationOptionCurveEaseOut animations:^{
self.frame=CGRectMake(frame.origin.x, , frame.size.width, frame.size.height);;
} completion:nil];
[UIView animateWithDuration:0.3 delay:0.4 options:UIViewAnimationOptionCurveEaseOut animations:^{
self.frame=CGRectMake(frame.origin.x, , frame.size.width, frame.size.height);;
} completion:nil];
UITapGestureRecognizer *tapGesture=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(dismissView)];
[self addGestureRecognizer:tapGesture];
if (_datePicker==nil) {
_datePicker=[[UIDatePicker alloc]init];
_datePicker.locale=[[NSLocale alloc ]initWithLocaleIdentifier:@"zh_Hans_CN"];
_datePicker.datePickerMode=UIDatePickerModeDate;
_datePicker.timeZone=[NSTimeZone defaultTimeZone];
}
_datePicker.frame=CGRectMake(, frame.size.height-, , );
[self addSubview:_datePicker];
[view addSubview:self];
}
-(void)dismissView
{
_openFlag=false;
_selectDate(_datePicker.date);
[UIView animateWithDuration: options:UIViewAnimationOptionCurveEaseOut animations:^{
self.frame=CGRectMake(,- self.frame.size.height, self.frame.size.width , self.frame.size.height);
} completion:^(BOOL finished) {
[self removeFromSuperview];
}];
}
@end
YvanDatePicker *picker=[YvanDatePicker sharedManager];
picker.selectDate=^(NSDate *date)
{
NSLog(@"%@",date);
};
// //1.设置在父视图的Frame
CGRect frame=CGRectMake(, , self.view.bounds.size.width, );
[picker showInView:self.view withFrame:frame];
回弹效果

有了这个东西,妈妈再也不用担心我的学习,下面的这几个都可以做



IOS项目之弹出动画二的更多相关文章
- IOS项目之弹出动画终结篇
在之前写过IOS项目之弹出动画一.IOS项目之弹出动画二.IOS项目之弹出动画三,今天来一个终极封装已经上传到Github上弹出动画总结篇UIPopoverTableView. UIPopoverTa ...
- IOS项目之弹出动画三
前面写了弹出动画两个,今天做商城时又用到了,看着这个用着蛮普遍的,所以记了下来 // // mallMoreView.h // XQB // // Created by City--Online on ...
- IOS项目之弹出动画一
小区宝首页导航栏左边有一个物业按钮,点击时会出现一个视图动画,之前用的是一个POP第三方,想着几个POP动画就要引用一堆的第三方有点麻烦,就试着自己写了一下,功能实现了,下一步就是优化将其封装一下.下 ...
- ios等待ualertview弹出动画完成后再跳转至其他页面
[self performSelector:@selector(popView:) withObject:nil afterDelay:2.0];
- 阶段一:为View设置阴影和弹出动画(天气应用)
“阶段一”是指我第一次系统地学习Android开发.这主要是对我的学习过程作个记录. 上一篇阶段一:通过网络请求,获得并解析JSON数据(天气应用)完成了应用的核心功能,接下来就要对它进行优化.今天我 ...
- mac关闭渐隐和弹出动画效果
苹果系统应用程序的窗口和对话框每次使用的时候都有华丽的特效,但是如果你感觉这种特效显得有点慢(MacGG闲的蛋疼),那该如何取消掉他呢? 方法很简单,打开"终端"(Finder-& ...
- 清除ios系统alert弹出框的域名
清除ios系统alert弹出框的域名 <script> window.alert = function(name) { var iframe = document.createElemen ...
- iOS学习——键盘弹出遮挡输入框问题解决方案
在iOS或Android等移动端开发过程中,经常遇到很多需要我们输入信息的情况,例如登录时要输入账号密码.查询时要输入查询信息.注册或申请时需要填写一些信息等都是通过我们键盘来进行输入的,在iOS开发 ...
- 原生Js_实现简单的下拉折叠菜单(添加弹出动画效果)
用javascript实现简单的下拉折叠菜单效果 实现步骤 (a)获得各操作的dom对象: (b)在所有菜单按钮对象上添加单击事件: (c)设置所有菜单按钮样式为空,并将当前按钮的样式设置为“acti ...
随机推荐
- 1、认识Redis
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库.Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库, ...
- “全栈2019”Java第一百零四章:匿名内部类与外部成员互访详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Redis Sentinel初体验
自Redis增加Sentinel集群工具以来,本博主就从未尝试过使用该工具.最近在调研目前主流的Redis集群部署方案,所以详细地看了一遍官方对于Sentinel的介绍并在自己的台式机上完成了 ...
- Struts2、SpringMVC、Servlet(Jsp)性能对比 测试
Struts2.SpringMVC.Servlet(Jsp)性能对比 测试 . Servlet的性能应该是最好的,可以做为参考基准,其它测试都要向它看齐,参照它. 做为一个程序员,对于各个框架的性能要 ...
- redhat基本操作
实验:安装redhat 需求:使用DVD镜像文件rhel-server-6.5-x86_64-dvd.iso,在虚拟机中安装RHEL 6系统 分区方案选择“使用所有空间”. 软件组选择“基本服务 ...
- jQuery 节点操作(创建 插入 删除 复制 替换 包裹)
一,创建元素节点: 第1个步骤可以使用jQuery的工厂函数$()来完成,格式如下: $(html); $(html)方法会根据传入的HTML标记字符串,创建一个DOM对象,并将这个DOM对象包装成一 ...
- linux下启动tomcat服务的命令是什么
Linux下tomcat服务的启动.关闭与错误跟踪,使用PuTTy远程连接到服务器以后,通常通过以下几种方式启动关闭tomcat服务:切换到tomcat主目录下的bin目录(cd usr/local/ ...
- 下载 CentOS 7 镜像文件
CentOS 7 镜像文件的下载地址 CentOS 官网:https://www.centos.org/ 点击“Get CentOS Now” 点击想要下载的ISO镜像,(目前仅有“DVD ISO”和 ...
- 自定义ASP.NET Core日志中间件
这个日志框架使用的是ASP.NET Core的NLog,用来记录每次请求信息和返回信息. 1.首先创建一个Web应用项目,我选择的是MVC模板: 2.使用NuGet添加Microsoft.Extens ...
- 小程序中实时将less编译成wxss
1.npm或者yarn全局安装wxss-cli npm install -g wxss-cli 2.运行wxss-cli命令(weuiTest为小程序目录) wxss ./weuiTest 实时监听w ...