iOS_Quartz2D_仿射变化和图形上下文栈

展示效果:


效果图



效果图


效果图

请问:实现的步骤是什么?

第一步,首先绘制一个线条,一个椭圆,和一个矩形框,然后添加到路径中,进行渲染.

第二步,进行仿射变化.特别注意:仿射变化应该在拿到上下文之后立即编写代码,然后再进行绘制操作.不然就没有效果了.

第三步,需求:最后再绘制一个圆,这个圆的宽度是默认的,颜色也是默认的,并且不要做任何形变操作.因此我们需要在最开始对图形上下文的状态进行备份.将状态先备份到“图形上下文栈”中,然后再进行下一个路径绘制时,先取出保存在图形上下文栈的状态.最后来绘制.

//代码实现

------------------------------ HMRootView.m------------------------------

- (void)drawRect:(CGRect)rect {

// 1.获取图形上下文

CGContextRefctx =UIGraphicsGetCurrentContext();

//在对图形上下文的状态进行任何操作之前,先备份一份到"图形上下文栈"中

CGContextSaveGState(ctx);

/*****拿到上下文后立刻做仿射变换,然后再开始绘图操作*****/

//缩放

CGContextScaleCTM(ctx,0.5,0.5);

//旋转

CGContextRotateCTM(ctx,M_PI_4*0.5);

//平移

CGContextTranslateCTM(ctx,150,100);

// 2.创建路径对象

// 2.1画线

UIBezierPath*pathLine = [UIBezierPathbezierPath];

[pathLinemoveToPoint:CGPointMake(50,50)];

[pathLineaddLineToPoint:CGPointMake(250,150)];

// 2.2画椭圆

UIBezierPath*pathOval = [UIBezierPathbezierPathWithOvalInRect:CGRectMake(30,200,250,80)];

// 2.3绘制一个矩形

UIBezierPath*pathRect = [UIBezierPathbezierPathWithRect:CGRectMake(150,50,50,200)];

//把路径添加到上下文中

CGContextAddPath(ctx, pathLine.CGPath);

CGContextAddPath(ctx, pathOval.CGPath);

CGContextAddPath(ctx, pathRect.CGPath);

//设置颜色

[[UIColorredColor]set];

//设置线宽

CGContextSetLineWidth(ctx,20);

//设置线头样式

CGContextSetLineCap(ctx,kCGLineCapRound);

// 3.渲染

CGContextDrawPath(ctx,kCGPathStroke);

/*****需求:最后再绘制一个圆,这个圆的线宽是默认的,颜色也是默认的,并且不要做任何形变操作*****/

//从上下文栈中获取上次保存的状态

CGContextRestoreGState(ctx);

UIBezierPath*pathCircle = [UIBezierPathbezierPathWithOvalInRect:CGRectMake(80,100,200,200)];

CGContextAddPath(ctx, pathCircle.CGPath);

CGContextDrawPath(ctx,kCGPathStroke);

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第一步:先科普一下基础知识: Core Graphics是基于C的API,可以用于一切绘图操作 Core Grap...
    真爱要有你才完美阅读 7,124评论 0 1
  • Quartz2D以及drawRect的重绘机制字数1487 阅读21 评论1 喜欢1一、什么是Quartz2D Q...
    PurpleWind阅读 4,274评论 0 3
  • 什么是Quartz 2D 1>Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac OS X系统(跨平台,...
    青葱烈马阅读 4,084评论 0 3
  • 那时,我做了很多梦 关于你的梦,我的梦 现在,我做了很多梦 关于过去的梦,未来的梦 究竟是梦总归要醒 还是在梦里,...
    拾旧可成诗阅读 1,706评论 8 4
  • 文/付与笔端 春意浓 秋意浓 花开花谢年年同 何必再相逢 朝匆匆 暮匆匆 青丝白发俱有终 闲淡看枯荣 (自己挖的日...
    付与笔端阅读 4,722评论 0 0

友情链接更多精彩内容