自定义提醒视图Alert-动态绘制
1.
.h文件
#import <UIKit/UIKit.h>
#define Wi [[UIScreen mainScreen]bounds].size.width
#define He [[UIScreen mainScreen]bounds].size.height
@interface Alert : UIView
typedef enum{
AlertStyleYes=0,
AlertStyleNo,
AlertStyleWarning,
}AlertStyle;
@property(nonatomic,strong) UIView *alertView;
@property(nonatomic,strong) UIView *drawView;
@property(nonatomic) AlertStyle alertStyle;
@property(nonatomic,strong) UILabel *alertLabel;
@property(nonatomic,strong) UILabel *messageLabel;
@property(nonatomic,strong) UIButton *cancelButton;
@property(nonatomic,strong) UIButton *confirmButton;
-(instancetype)initAlertWithStyle:(AlertStyle)alertStyle;
@end
.m文件
#import "Alert.h"
@implementation Alert
-(instancetype)initAlertWithStyle:(AlertStyle)alertStyle{
CGRect frame= CGRectMake(0, 0, Wi, He);
self=[super initWithFrame:frame];
if (self) {
self.backgroundColor=[UIColor colorWithRed:0.1 green:0.2 blue:0.3 alpha:0.3];
//
// self.center=CGPointMake(Wi/2, He/2);
//
[self initViews];
//
if (alertStyle==AlertStyleNo) {
[self drawNo];
}
if (alertStyle==AlertStyleYes) {
[self drawYes];
}
if (alertStyle==AlertStyleWarning) {
[self drawWarning];
}
}
return self;
}
/*
初始化视图
*/
-(void)initViews{
//
self.alertView=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 160, 190)];
self.alertView.backgroundColor=[UIColor colorWithRed:0.8 green:0.8 blue:1.5 alpha:0.9];
self.alertView.layer.masksToBounds=YES;
self.alertView.layer.cornerRadius=5;
self.alertView.center=self.center;
[self addSubview:self.alertView];
//
self.drawView=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 160, 110)];
// self.drawView.backgroundColor=[UIColor blackColor];
[self.alertView addSubview:self.drawView];
//
self.alertLabel=[[UILabel alloc]initWithFrame:CGRectMake(0, 95, self.drawView.frame.size.width, 30)];
self.alertLabel.textAlignment=1;
_alertLabel.text=@"alertLabel";
[self.alertView bringSubviewToFront:_alertLabel];
[self.alertView addSubview:_alertLabel];
//
self.messageLabel=[[UILabel alloc]initWithFrame:CGRectMake(0, 120, self.drawView.frame.size.width, 30)];
self.messageLabel.textAlignment=1;
_messageLabel.text=@"messageLabel";
[self.alertView bringSubviewToFront:_messageLabel];
[self.alertView addSubview:_messageLabel];
//
_cancelButton=[UIButton buttonWithType:UIButtonTypeCustom];
[_cancelButton setFrame:CGRectMake(10, 150, 60, 30)];
[_cancelButton setTitle:@"取消" forState:UIControlStateNormal];
[_cancelButton addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
[_cancelButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
_cancelButton.backgroundColor=[UIColor colorWithRed:0.1 green:0.2 blue:0.5 alpha:0.8];
_cancelButton.layer.masksToBounds=YES;
_cancelButton.layer.cornerRadius=5;
[self.alertView addSubview:_cancelButton];
//
_confirmButton=[UIButton buttonWithType:UIButtonTypeCustom];
[_confirmButton setFrame:CGRectMake(90, 150, 60, 30)];
[_confirmButton setTitle:@"确定" forState:UIControlStateNormal];
[_confirmButton addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
[_confirmButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
_confirmButton.backgroundColor=[UIColor colorWithRed:0.6 green:0.3 blue:0.2 alpha:0.8];
_confirmButton.layer.masksToBounds=YES;
_confirmButton.layer.cornerRadius=5;
[self.alertView addSubview:_confirmButton];
}
-(void)back{
[self removeFromSuperview];
}
/*
设置alertStyle
*/
-(void)setAlertStyle:(AlertStyle)alertStyle{
_alertStyle=alertStyle ;
[self addSubview:self.alertView];
if (alertStyle==AlertStyleNo) {
[self drawNo];
}
if (alertStyle==AlertStyleYes) {
[self drawYes];
}
if (alertStyle==AlertStyleWarning) {
[self drawWarning];
}
}
/**************************三个绘制*****************************/
/*
绘制yes
*/
-(void)drawYes{
//先移除再绘制
[self.drawView.layer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer) ];
_alertLabel.text=@"Yes";
_alertLabel.textColor=[UIColor blueColor];
//
_messageLabel.text=@"登陆成功";
_messageLabel.textColor=[UIColor grayColor];
//
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(120, 50)];
[path addArcWithCenter:CGPointMake(80, 50) radius:40 startAngle:2*M_PI endAngle: 0 clockwise:0];
[path moveToPoint:CGPointMake(60,50)];
[path addLineToPoint:CGPointMake(80, 70)];
[path addLineToPoint:CGPointMake(110, 30)];
// NSLog(@"%f",M_PI);
//
CAShapeLayer *pathLayer = [CAShapeLayer layer];
pathLayer.frame = self.bounds;
pathLayer.path = path.CGPath;
pathLayer.strokeColor = [[UIColor blueColor] CGColor];
pathLayer.fillColor = nil;
pathLayer.lineWidth = 4.0f;
pathLayer.lineJoin = kCALineJoinBevel;
[self.drawView.layer addSublayer:pathLayer];
//
CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
//pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
pathAnimation.duration =0.5;
pathAnimation.fromValue = [NSNumber numberWithFloat:0.0f];
pathAnimation.toValue = [NSNumber numberWithFloat:1.0f];
[pathLayer addAnimation:pathAnimation forKey:@"strokeEnd"];
}
/*
绘制No
*/
-(void)drawNo{
//先移除再绘制
[self.drawView.layer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer) ];
//
_alertLabel.text=@"登陆失败";
_alertLabel.textColor=[UIColor redColor];
//
_messageLabel.text=@"密码输入错误";
_messageLabel.textColor=[UIColor grayColor];
//
UIBezierPath *path=[UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(40, 10)];
[path addLineToPoint:CGPointMake(40, 90)];
[path addLineToPoint:CGPointMake(120, 90)];
[path addLineToPoint:CGPointMake(120, 10)];
[path addLineToPoint:CGPointMake(40, 10)];
[path moveToPoint:CGPointMake(60, 30)];
[path addLineToPoint:CGPointMake(100, 70)];
[path moveToPoint:CGPointMake(100, 30)];
[path addLineToPoint:CGPointMake(60, 70)];
//
CAShapeLayer *pathLayer = [CAShapeLayer layer];
pathLayer.frame = self.bounds;
pathLayer.path = path.CGPath;
pathLayer.strokeColor = [[UIColor redColor] CGColor];
pathLayer.fillColor = nil;
pathLayer.lineWidth = 4.0f;
pathLayer.lineJoin = kCALineJoinBevel;
[self.drawView.layer addSublayer:pathLayer];
//
CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
pathAnimation.duration = 0.5;
pathAnimation.fromValue = [NSNumber numberWithFloat:0.0f];
pathAnimation.toValue = [NSNumber numberWithFloat:1.0f];
[pathLayer addAnimation:pathAnimation forKey:@"strokeEnd"];
}
/*
绘制Warning
*/
-(void)drawWarning{
//先移除再绘制
[self.drawView.layer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer) ];
//
_alertLabel.text=@"警告";
_alertLabel.textColor=[UIColor colorWithRed:1.4 green:1.0 blue:0 alpha:1.0];
//
_messageLabel.text=@"内存不足";
_messageLabel.textColor=[UIColor grayColor];
//
UIBezierPath *path=[UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(80, 10)];
[path addLineToPoint:CGPointMake(30, 95)];
[path addLineToPoint:CGPointMake(130, 95)];
[path addLineToPoint:CGPointMake(80, 10)];
[path moveToPoint:CGPointMake(80, 30)];
[path addLineToPoint:CGPointMake(80, 75)];
[path moveToPoint:CGPointMake(80, 80)];
[path addLineToPoint:CGPointMake(80, 85)];
//
CAShapeLayer *pathLayer = [CAShapeLayer layer];
pathLayer.frame = self.bounds;
pathLayer.path = path.CGPath;
pathLayer.strokeColor = [[UIColor yellowColor] CGColor];
pathLayer.fillColor = nil;
pathLayer.lineWidth = 4.0f;
pathLayer.lineJoin = kCALineJoinBevel;
[self.drawView.layer addSublayer:pathLayer];
//
CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
pathAnimation.duration = 0.5;
pathAnimation.fromValue = [NSNumber numberWithFloat:0.0f];
pathAnimation.toValue = [NSNumber numberWithFloat:1.0f];
[pathLayer addAnimation:pathAnimation forKey:@"strokeEnd"];
}
/*
//
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(0.0,20.0)];
[path addLineToPoint:CGPointMake(120.0, 500.0)];
[path addLineToPoint:CGPointMake(220, 0)];
[path addLineToPoint:CGPointMake(310, 40)];
[path addLineToPoint:CGPointMake(SCREEN_WIDTH, 110)];
//
CAShapeLayer *pathLayer = [CAShapeLayer layer];
pathLayer.frame = self.view.bounds;
pathLayer.path = path.CGPath;
pathLayer.strokeColor = [[UIColor redColor] CGColor];
pathLayer.fillColor = nil;
pathLayer.lineWidth = 2.0f;
pathLayer.lineJoin = kCALineJoinBevel;
[self.view.layer addSublayer:pathLayer];
//
CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
pathAnimation.duration = 2.0;
pathAnimation.fromValue = [NSNumber numberWithFloat:0.0f];
pathAnimation.toValue = [NSNumber numberWithFloat:1.0f];
[pathLayer addAnimation:pathAnimation forKey:@"strokeEnd"];
*/
@end
2.效果:



自定义提醒视图Alert-动态绘制的更多相关文章
- iOS可视化动态绘制连通图
上篇博客<iOS可视化动态绘制八种排序过程>可视化了一下一些排序的过程,本篇博客就来聊聊图的东西.在之前的博客中详细的讲过图的相关内容,比如<图的物理存储结构与深搜.广搜>.当 ...
- C# 动态绘制任务栏图标的实现
通常我们在做一个应用时会遇到这样的需求:将收到的消息条数显示到任务栏,比如如下的效果 怎么实现呢? 答案是采用WindowsAPICodePack实现,具体参见:Windows 7 任务栏开发 之 覆 ...
- 自定义View视图
自定义View视图文件查找逻辑 之前MVC5和之前的版本中,我们要想对View文件的路径进行控制的话,则必须要对IViewEngine接口的FindPartialView或FindView方法进行重写 ...
- iOS可视化动态绘制连通图(Swift版)
上篇博客<iOS可视化动态绘制八种排序过程>可视化了一下一些排序的过程,本篇博客就来聊聊图的东西.在之前的博客中详细的讲过图的相关内容,比如<图的物理存储结构与深搜.广搜>.当 ...
- 自定义view:view的绘制流程
1.view的绘制流程 当 Activity 接收到焦点的时候,它会被请求绘制布局,该请求由 Android framework 处理.绘制是从根节点开始,对布局树进行 measure 和 draw. ...
- (排班表二)后台动态绘制Grid表格
后台动态绘制值班表(Grid表格 列名不固定) 要求:表头除了值班人姓名,还要显示日期,及每天的星期值,用斜杠‘/’分隔.即:几号/星期几 最终实现的效果:根据查询的年月显示每个值班人查询月份每天的值 ...
- 1.Android 视图及View绘制分析笔记之setContentView
自从1983年第一台图形用户界面的个人电脑问世以来,几乎所有的PC操作系统都支持可视化操作,Android也不例外.对于所有Android Developer来说,我们接触最多的控件就是View.通常 ...
- UICollectionView(集合视图)以及自定义集合视图
一.UICollectionView集合视图 其继承自UIScrollView. UICollectionView类是iOS6新引进的API,用于展示集合视图,布局 ...
- Android 自定义View修炼-自定义HorizontalScrollView视图实现仿ViewPager效果
开发过程中,需要达到 HorizontalScrollView和ViewPager的效果,于是直接重写了HorizontalScrollView来达到实现ViewPager的效果. 实际效果图如下: ...
随机推荐
- DevExpress WinForms Controls 学习系列1
一个偶然的机会,接触到DevExpress.项目是WinForm的,应用了DevExpress.为了使项目具备维护开发的生命力,我觉得有必要系统的学习一下DevExpress,今天是学习笔记的第一篇. ...
- 如何把OpenWrt安装到PC?
前言 什么是openwrt? 它是一个适用于路由器的Linux发行版.和其他Linux发行版一样,它也内置了包管理工具,你可以从一个软件仓库里直接安装软件.OpenWrt可以用在所有需要嵌入式Linu ...
- 弦论(tjoi2015,bzoj3998)(sam(后缀自动机))
对于一个给定长度为\(N\)的字符串,求它的第\(K\)小子串是什么. Input 第一行是一个仅由小写英文字母构成的字符串\(S\) 第二行为两个整数\(T\)和\(K\),\(T\)为0则表示不同 ...
- Python 将一个已知的 utc时间字符串 转换为东八区时间
先获取一个utc格式的时间 utc_time = datetime.datetime.utcnow() print(utc_time) 输出 2018-06-24T08:59:39Z 这里我们假设目前 ...
- javascript 实用工具函数
整理日常开发中我们常常会使用到的一些工具函数. var utils = (function(){ var fay = {}; // 返回当前时间的毫秒数 fay.getTime = Date.now( ...
- 深度了解git工具
今天给大家介绍一个深度了解git的学习视频,视频讲的挺好的,可以听听. 深度了解git学习视频
- 服务器端 安装svn
趁着这波比较闲的时候来划一波水,想起自己那都快生会的腾讯云服务器 到现在还不能通过版本控制系统上传文件,于是趁这波功夫在服务器上安装个svn来管理代码. 首先就简单的介绍一波 svn : 首先svn不 ...
- java语言学习指南
1 java基础 1.1 java语言编程入门 1.2 java语言概述 1.3 java基本语法一 1.4 java基本语法二 1.5 java基本语法三
- Storm原理及安装
http://my.oschina.net/leejun2005/blog/147607 http://www.storm-geek.com/forum.php http://www.zhangjih ...
- (转)Python rsplit() 方法
原文:https://www.cnblogs.com/wushuaishuai/p/7792874.html 目录 描述 语法 参数 返回值 实例 正文 回到顶部 描述 Python rsplit() ...