它们的定义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中)直接可以使用,灰常方便 ...
随机推荐
- NDK/JNI学习--进口hello-jniproject
上一篇文章,简单的设置NDK开发环境,本文通过导入C:\android-ndk-r9d\samples\hello-jni(NDK自带example)来疏通真个环境. 打开Eclipse IDE.指定 ...
- 第三方框架和ARC
在使用了ARC机制的项目中使用第三方开源框架的方法: 1.在第三方开源框架的每个.m文件都设置成 -fno-objc-arc 具体方法:TARGETS--->Build Phases -- ...
- C#判断操作系统是32位还是64位(超简单)
由于项目需要在64位和32位系统运行,需要判断当前系统是32位还是64位. 网上很多方法,但是都感觉不是很简洁,最后发现可以使用int的长度来判断:看代码 /// <summary> ...
- Linux下常用操作汇总
查看linux操作系统位数 (1) 终端输入: file /sbin/init 如 显示: /sbin/init: ELF 32-bit LSB executable, Intel 80386, ve ...
- python遗产
1. python类方法的定义: class Animal(): def __init__(self,name): self.name=name; def show(self): print s ...
- 原生javascript与jquery 的比较
JavaScript的优点和缺点: 优点: 性能:由于JavaScript运行在客户端,节省了web服务器的请求时间和带宽 轻量级的脚本语言,比较容易学习 运行在用户机器上,运行结果和处理相对比较快. ...
- Unity3D方法来隐藏和显示对象
Unity3D作 在使用unity3d开发游戏的过程中.我们经常会遇到须要隐藏或者显示的操作,针对这一点,以下做了一些总结. 一.设置Renderer状态 在游戏的开发中,全部可以被渲染的物体都包括有 ...
- [LeetCode217]Contains Duplicate
题目:Given an array of integers, find if the array contains any duplicates. Your function should retur ...
- NET5 Web应用程序
ASP.NET5 Web应用程序结构 本文参考ASP.NET5 官方文档 Understanding ASP.NET 5 Web Apps,加入了一些个人理解,理解不对的地方希望大家能指出,互相学习. ...
- 开源 自由 java CMS - FreeCMS1.9 评论管理
项目地址:http://code.google.com/p/freecms/ 评论管理 1. 评论管理 从左側管理菜单点击评论管理进入. 2. 评论审核 选择须要审核的评论,然后点击"审核& ...