Quartz2D矩阵操作和官方demo下载学习 和 裁剪 和 重绘(刷帧) 动画
来源:互联网 发布:旺旺淘宝网店铺激活 编辑:程序博客网 时间:2024/06/05 20:31
1.矩阵操作
1.1首先新建一个project,然后搭建界面。首先自定义一个view(创建一个类让其继承自Uiview,然后在storyboard中拖一个view,并改其名称)
1.2代码演示使用
1.2.1未旋转之前
#import "MJView.h"@implementation MJView/** 渐变色 虚线 pattern blend ..... ..... 阴影 */- (void)drawRect:(CGRect)rect{ //获取图形上下文对象 CGContextRef ctx = UIGraphicsGetCurrentContext(); // 将ctx拷贝一份放到栈中 CGContextSaveGState(ctx); // CGContextRotateCTM(ctx, M_PI_4 * 0.3); //图像旋转// CGContextScaleCTM(ctx, 0.5, 0.5);//缩放// CGContextTranslateCTM(ctx, 0, 150); //平移 往下面走150 //绘制一个矩形 CGContextAddRect(ctx, CGRectMake(10, 10, 50, 50)); //绘制一个椭圆 CGContextAddEllipseInRect(ctx, CGRectMake(100, 100, 100, 100)); //绘制一根线段 CGContextMoveToPoint(ctx, 100, 100); CGContextAddLineToPoint(ctx, 200, 250); //渲染 CGContextStrokePath(ctx); //将栈顶上下文出栈,替换掉当前的上下文对象(下面所画得椭圆和线段都不会受到上面的影响 CGContextRestoreGState(ctx); // 矩阵操作// CGContextScaleCTM(ctx, 0.5, 0.5); //正确用法应该放到前面 CGContextStrokePath(ctx);}@end
以上代码运行结果为:
1.2.2旋转平移线段和椭圆(将改变状态的代码打开)
#import "MJView.h"@implementation MJView/** 渐变色 虚线 pattern blend ..... ..... 阴影 */- (void)drawRect:(CGRect)rect{ //获取图形上下文对象 CGContextRef ctx = UIGraphicsGetCurrentContext(); // 将ctx拷贝一份放到栈中 CGContextSaveGState(ctx); CGContextRotateCTM(ctx, M_PI_4 * 0.3); //图像旋转 CGContextScaleCTM(ctx, 0.5, 0.5);//缩放 CGContextTranslateCTM(ctx, 0, 150); //平移 往下面走150 //绘制一个椭圆 CGContextAddEllipseInRect(ctx, CGRectMake(100, 100, 100, 100)); //绘制一根线段 CGContextMoveToPoint(ctx, 100, 100); CGContextAddLineToPoint(ctx, 200, 250); //渲染 CGContextStrokePath(ctx); CGContextRestoreGState(ctx); //绘制一个矩形 CGContextAddRect(ctx, CGRectMake(10, 10, 50, 50)); //将栈顶上下文出栈,替换掉当前的上下文对象(下面所画得椭圆和线段都不会受到上面的影响 // 矩阵操作// CGContextScaleCTM(ctx, 0.5, 0.5); //正确用法应该放到前面 CGContextStrokePath(ctx);}@end
以上代码运行结果为
2.官方demo下载学习
2.1.打开文档
2.2搜索Quartz2D
搜索到Quartz2D后点击
Open Project
即可自动下载
这个时候它会默认下载到'下载'当中“,然后打开运行即可学习到权威的demo,运行效果如下,里面有很多demo,进入即可学习
3.裁剪
首先上一份代码
#import "MJClipView.h"@implementation MJClipView- (void)drawRect:(CGRect)rect{ CGContextRef ctx = UIGraphicsGetCurrentContext(); //讲ctx拷贝一份放到栈中// CGContextSaveGState(ctx); // 0.画圆 CGContextAddEllipseInRect(ctx, CGRectMake(100, 100, 50, 50)); <p style="margin-top: 0px; margin-bottom: 0px; font-size: 14px; font-family: 'Heiti SC Light'; color: rgb(151, 20, 31);"><span style="font-family: Menlo; color: rgb(0, 0, 0);"> </span><span style="font-family: Menlo;">// </span>裁剪(将当前上下文的形状按照上面画得那个圆的形状裁剪出来,以后添加的内容只能放到这个形状里面去)</p> CGContextClip(ctx); CGContextFillPath(ctx); // 1.显示图片 UIImage *image = [UIImage imageNamed:@"me"]; [image drawAtPoint:CGPointMake(100, 100)]; //将栈顶上下文出栈替换当前上下文// CGContextRestoreGState(ctx); //画一个矩形 CGContextAddRect(ctx, CGRectMake(0, 0, 50, 50)); CGContextFillPath(ctx);}@end以上代码运行结果如下
由上可以看书当 设置了裁剪之后,则后面的内容都只能在所裁剪出来的区域内显示
只有设置图形上下文后,则后面的内容才不会受影响(打开图形上下文的代码后)
4.重绘(刷帧)
首先新建一个project,然后自定义一个view
再拖一个 Horizontal Slider 控件(如上图)
代码:
控制器.m文件
#import "MJViewController.h"#import "MJView.h"/** * 实现逻辑:当拖动滑块的时候将滑块的值传递给radius属性,然后radius属性从新为半径,刷新图形 */@interface MJViewController ()- (IBAction)sizeChange:(UISlider *)sender;@property (weak, nonatomic) IBOutlet MJView *circleView;@end@implementation MJViewController- (void)viewDidLoad{ [super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.}- (void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}- (IBAction)sizeChange:(UISlider *)sender { self.circleView.radius = sender.value; //将滑块的值传递给半径}@end自定义view .m文件
#import "MJView.h"@implementation MJView- (void)setRadius:(float)radius{ _radius = radius; [self setNeedsDisplay]; //调用这个方法的时候就会调用drawRect:这个方法}/** * 默认只会在view第一次显示的时候调用(只能由系统自动调用, 不能手动调用) */- (void)drawRect:(CGRect)rect{ NSLog(@"drwract---%f", self.radius); CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextAddArc(ctx, 125, 125, self.radius, 0, M_PI * 2, 0); CGContextFillPath(ctx);}@end
运行结果(当拖动滑块的时候圆就随着变化)
5.动画
5.1创建一个project,然后自定义一个继承自UIView的view,并且让这个自定义的view成为控制器的view
5.2代码实现
#import "MSnowView.h"@interface MSnowView()@property (nonatomic, assign) CGFloat snowY;@end@implementation MSnowView/** * 当一个view从storyboard中创建的话就会调用这个方法(系统自动调用) */- (void)awakeFromNib{ //创建定时器 CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(setNeedsDisplay)];//调用这个setNeedsDisplay方法就会重新调用drawRect:这个方法 //添加到主消息循环 启动 (默认一秒刷新60次) [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; //[NSTimer scheduledTimerWithTimeInterval:0.1 target:selfselector:@selector(setNeedsDisplay) userInfo:nil repeats:YES]; //每隔0.1秒就刷新一次(每隔0.1秒就调用setNeedsDisplay一次)}/** * 默认只会在view第一次显示的时候调用(只能由系统自动调用, 不能手动调用) ,只有调用setNeedsDisplay这个方法之后才会再次调用drawRect:这个方法 * * @param rect <#rect description#> */- (void)drawRect:(CGRect)rect{ self.snowY+=5; if (self.snowY >= rect.size.height) { self.snowY = -100; } UIImage *image = [UIImage imageNamed:@"snow.jpg"]; [image drawAtPoint:CGPointMake(0, self.snowY)];}@end
5.3运行结果
0 0
- Quartz2D矩阵操作和官方demo下载学习 和 裁剪 和 重绘(刷帧) 动画
- Quartz2d从易到难全解析---裁剪功能的实现和重绘(刷帧)、动画
- 画板涂鸦和时钟(Quartz2D,核心动画)
- iOS中Quartz2D图片裁剪和图片增加文字描述
- Quartz2D详细使用包括画线,画文字 图片 裁剪 重绘 简单动画
- 猫猫学IOS(三十二)UI之Quartz2D矩阵操作和图片剪切
- AJ学IOS(32)UI之Quartz2D矩阵操作和图片剪切
- IOS图片裁剪和小图看大图动画
- IOS图片裁剪和小图看大图动画
- iOS图片裁剪和小图看大图动画
- Quartz2D初识和应用
- 5、动画和矩阵变换
- 矩阵和操作
- 数组和矩阵操作
- 矩阵和相关操作
- 矩阵和图像操作
- Google官方Android O和kotlin Demo
- iOS Quartz2D - 矩阵操作
- 基于Node.js的Web Socket
- 第二章第一题
- kmp算法对比
- 判断ip地址
- windows环境下wampserver的配置教程——超级详细
- Quartz2D矩阵操作和官方demo下载学习 和 裁剪 和 重绘(刷帧) 动画
- ceph的CRUSH数据分布算法介绍
- 寒風的Cocos2dx之旅之剪刀、石头、布系列专题(2 )
- 手机端巧用input[date]
- 合并多个jar包的两种方法
- HDU3234Exclusive-OR(并查集)与HDU3038相似
- 第三次CCF计算器软件能力认证题目--Z字形扫描
- GIT 用法
- Android 模仿新浪微博“@”功能