它们的定义UIAlertView
code4App有很多伟大的上方UI特效代码,,好牛逼啊,这效果,太炫了,哇,怎么自己写不出来.事实上,再炫的特效,都是依据苹果系统的框架而来,假设我们了解系统框架实现的原理,也就能写出属于自己自己定义的控件,加上各种各样的动画.
这里,我就展示一个自己定义的UIAlertView效果控件,视图出现的时候动画-先放大-再缩小-最后成正常比例,消失的时候缩小加渐隐.调用也非常方便,不须要像系统先创建后[alert show],我在类内部就已经写好了,仅仅须要alloc创建,调用各个button相应的响应block即可.
@.h
#import <UIKit/UIKit.h> typedef void(^Myblcok)(); @interface CustomAlertView : UIView - (id)initWithTitle:(NSString *)title cancelButtonTitle:(NSString *)cancelTitle firstButtonTitles:(NSString *)firstTitle senondButtonTitles:(NSString *)secondTitle thirdButtonTitles:(NSString *)thirdTitle; // 利用block将button的点击事件传出去
@property (nonatomic,copy)Myblcok cancelBlock;
@property (nonatomic,copy)Myblcok firstBlcok;
@property (nonatomic,copy)Myblcok secondBlock;
@property (nonatomic,copy)Myblcok thirdBlock; @end @interface UIImage (colorful) + (UIImage *)imageWithColor:(UIColor *)color; @end
@.m
//
// CustomAlertView.m
// CustomAlertView
//
// Created by 胡明涛 on 14-5-6.
// Copyright (c) 2014年 胡明涛. All rights reserved.
// #import "CustomAlertView.h" // 屏幕的物理高度
#define ScreenHeight [UIScreen mainScreen].bounds.size.height // 屏幕的物理宽度
#define ScreenWidth [UIScreen mainScreen].bounds.size.width
#define AlertViewHeight 260
#define AlertViewWidth 200 @interface CustomAlertView () @property (nonatomic,strong) UIView *backgroundView; // 底部View,阻挡其它事件响应
@property (nonatomic,strong) UILabel *titleLabel; // 标题
@property (nonatomic,strong) UIButton *cancelButton; // 取消 @end @implementation CustomAlertView - (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
} - (id)initWithTitle:(NSString *)title cancelButtonTitle:(NSString *)cancelTitle firstButtonTitles:(NSString *)firstTitle senondButtonTitles:(NSString *)secondTitle thirdButtonTitles:(NSString *)thirdTitle{ self = [super initWithFrame:CGRectMake((ScreenWidth - AlertViewWidth)/2.0, (ScreenHeight-AlertViewHeight)/2 ,AlertViewWidth, AlertViewHeight)];
if (self) { [self createCustomAlertView];
self.titleLabel.text = title;
[self.cancelButton setTitle:cancelTitle forState:UIControlStateNormal]; if (thirdTitle != nil) { [((UIButton *)[self viewWithTag:200]) setTitle:firstTitle forState:UIControlStateNormal];
[((UIButton *)[self viewWithTag:201]) setTitle:secondTitle forState:UIControlStateNormal];
[((UIButton *)[self viewWithTag:202]) setTitle:thirdTitle forState:UIControlStateNormal]; }else{ [((UIButton *)[self viewWithTag:200]) setTitle:firstTitle forState:UIControlStateNormal];
((UIButton *)[self viewWithTag:200]).frame = CGRectMake(10, 60, self.bounds.size.width-20, 40);
[((UIButton *)[self viewWithTag:201]) setTitle:secondTitle forState:UIControlStateNormal];
((UIButton *)[self viewWithTag:201]).frame = CGRectMake(10, 130, self.bounds.size.width-20, 40);
[((UIButton *)[self viewWithTag:202]) removeFromSuperview]; } __block CustomAlertView * SELF = self;
[UIView animateWithDuration:0.2 animations:^{ SELF.transform = CGAffineTransformScale(CGAffineTransformIdentity,0.5, 0.5); }completion:^(BOOL finished) { [UIView animateWithDuration:0.2 animations:^{ SELF.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.3, 1.3); } completion:^(BOOL finished) { [UIView animateWithDuration:0.2 animations:^{ SELF.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0); } completion:^(BOOL finished) { }];
}]; }]; } // 阻碍其它响应事件
self.backgroundView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
_backgroundView.backgroundColor = [UIColor blackColor];
_backgroundView.alpha = 0.3;
[[UIApplication sharedApplication].keyWindow addSubview:_backgroundView]; [[UIApplication sharedApplication].keyWindow addSubview:self]; return self;
} - (void)createCustomAlertView{ self.backgroundColor = [UIColor whiteColor]; self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 20, self.bounds.size.width, 40)];
_titleLabel.textColor = [UIColor redColor];
_titleLabel.textAlignment = NSTextAlignmentCenter;
[self addSubview:_titleLabel]; // 取消按钮
self.cancelButton = [UIButton buttonWithType:UIButtonTypeCustom];
_cancelButton.frame = CGRectMake(10,AlertViewHeight - 50,self.bounds.size.width-20,40);
_cancelButton.tag = 100;
[_cancelButton setBackgroundImage:[UIImage imageWithColor:[UIColor colorWithRed:227.0/255.0 green:100.0/255.0 blue:83.0/255.0 alpha:1]] forState:UIControlStateNormal];
[_cancelButton addTarget:self action:@selector(didClickButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:_cancelButton]; for (int i = 0; i < 3; i++) { UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(10, 20 +i*60, self.bounds.size.width-20, 40);
button.tag = 200 + i;
[button setBackgroundImage:[UIImage imageWithColor:[UIColor colorWithRed:87.0/255.0 green:135.0/255.0 blue:173.0/255.0 alpha:1]] forState:UIControlStateNormal];
[button addTarget:self action:@selector(didClickButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:button];
} } - (void)didClickButtonAction:(UIButton *)button{ switch (button.tag) {
case 100:
if (_cancelBlock) { _cancelBlock();
[self dismissAlertView];
}
break;
case 200: if (_firstBlcok) { _firstBlcok();
[self dismissAlertView];
}
break;
case 201: if (_secondBlock) { _secondBlock();
[self dismissAlertView];
}
break;
case 202: if (_thirdBlock) { _thirdBlock();
[self dismissAlertView];
}
break;
default:
break;
} } // 取消视图
- (void)dismissAlertView{ [UIView animateWithDuration:1.0 animations:^{ self.transform = CGAffineTransformScale(CGAffineTransformIdentity,0.0, 0.0);
self.alpha = 0.0;
self.backgroundView.alpha = 0.0;
}completion:^(BOOL finished) { self.cancelBlock = nil;
self.firstBlcok = nil;
self.secondBlock = nil;
self.thirdBlock = nil;
[_backgroundView removeFromSuperview];
[self removeFromSuperview];
_backgroundView = nil; }]; } @end @implementation UIImage (colorful) + (UIImage *)imageWithColor:(UIColor *)color
{
CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect); UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext(); return image;
} @end
@调用
- (void)didClickButtonAction{
CustomAlertView *alertView = [[CustomAlertView alloc] initWithTitle:@"HMT" cancelButtonTitle:@"取消" firstButtonTitles:@"first" senondButtonTitles:@"second" thirdButtonTitles:@"third"];
[alertView setCancelBlock:^(){
NSLog(@"点击了取消button");
}];
[alertView setFirstBlcok:^(){
NSLog(@"点击了firstbutton");
}];
//............下面相似
}
@效果:(是不是认为有的时候也能取代UIActionSheet)
版权声明:本文博客原创文章。博客,未经同意,不得转载。
它们的定义UIAlertView的更多相关文章
- iphone:自定义UIAlertView
由于项目中有这样一个需求:需要在保存是弹出框选择保存的地点.选择UIAlertView来实现,但是要在UIAlertView中增加UISwitch的控件,这就需要自定义一个继承UIAlertView的 ...
- 超文本传输协议-HTTP/1.1
超文本传输协议-HTTP/1.1(修订版) ---译者:孙超进本协议不限流传发布.版权声明Copyright (C) The Internet Society (1999). All Rights R ...
- iOS之常用宏定义
下面我为大家提供一些常用的宏定义! 将这些宏定义 加入到.pch使用 再也不用 用一次写一次这么长的程序了 //-------------------获取设备大小------------------- ...
- JDStatusBarNotification和一些宏定义
// // AddTopicViewController.m // vMeet2 // // Created by 张源海 on 16/6/30. // Copyright © 2016年 h ...
- iOS宏定义的使用与规范
宏定义在很多方面都会使用,例如定义高度.判断iOS系统.工具类,还有诸如文件路径.服务端api接口文档.为了对宏能够快速定位和了解其功能,我们最好在定义的时候将其放入特定的头文件中 定义尺寸类的宏 D ...
- objective-c 宏定义UIAlertController公用方法
IOS的方法经常都有更迭,以前弹出框使用 AlertView,现在使用UIAlertController AlertView的宏定义 #define showMessage(__MESSAGE__) ...
- iOS开发中常用到的宏定义
1.首次启动判断: #define First_Launched @"firstLaunch" 2.ios7系统判断: #define IsIOS7 ([[[UIDevice cu ...
- iOS常用宏 定义
总结了iOS开发过程中的一些常用宏,以后会陆陆续续添加进来. 字符串是否为空 1 #define kStringIsEmpty(str) ([str isKindOfClass:[NSNull c ...
- 高效的iOS宏定义
iOS开发过程中使用一些常用的宏可以提高开发效率,提高代码的重用性:将这些宏放到一个头文件里然后再放到工程中的-Prefix.pch文件中(或者直接放到-Prefix.pch中)直接可以使用,灰常方便 ...
随机推荐
- Android 从硬件到应用程序:一步一步爬上去 5 -- 在Frameworks蒂姆层硬件服务
Android Frameworks层提供硬件服务,Android系统APP能够调用这些硬件服务,而硬件则完全控制.实现应有的功能.上一页下一页.为了这一个frameworks高层的应用java接口硬 ...
- hdu1520 (树形dp)
hdu1520 http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意是给定一棵树,每个结点有一个价值,要我们选择任意个结点使得总价值最大,规则是如果父亲结 ...
- NET的可运行于树莓派
Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器 最近在业余时间玩玩树莓派,刚开始的时候在树莓派里写一些基于wiringPi库的C语言程序来控制树莓派的GPIO引脚,从而控制 ...
- [Windwos Phone] 实作地图缩放 MapAnimationKind 属性效果
原文:[Windwos Phone] 实作地图缩放 MapAnimationKind 属性效果 [前言] 使用经纬度来定位地图的位置,以及使用 MapAnimationKind 属性来设定地图缩放时的 ...
- 同一路由器不同vlan之间的通信(一)
还是废话不多说,第一步,看拓扑图. 先把pc上的ip都配好.開始设置 switch0: >en >conf t >vlan 2 >exit >int fa 0/1 > ...
- opencv环境的搭建,并打开一个本地PC摄像头。
1.opencv环境结构 推荐连结 http://www.cnblogs.com/Anykong/archive/2011/04/06/Anykong_OpenCV1.html 2.以下是基本測试,和 ...
- 牟大哥:《App自我促销》连载2
直立人迁移走
[谋哥每天一干货,第六十九篇] 前篇说到声音在远古时代.是一个奇妙的东西,它可以非常快地把信息传播到其它地方,突破了短距离. 然而能人的后代直立人学会了直立行走,他们開始走出非洲,到达遥远的中东.中国 ...
- [ACM] POJ 3254 Corn Fields(状态压缩)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8062 Accepted: 4295 Descr ...
- addChildViewController transitionFromViewController nib storyboard
本文记录addChildViewController由transitionFromViewController方法nib,storyboard的不同的效果. 在进行切换效果时,注意属于同一个story ...
- MapReduce(十五): 从HDFS阅读本文的源代码分析
以Map任务读取文本数据为例: 1) LineRecordReader负责对文件切割的定位,以及对读取每一行内容的封装供用户Map任务使用.每次在定位在文件里不为0的位置时,多读取一行,由于前一个 ...