博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Quartz2D之Path使用初步
阅读量:6490 次
发布时间:2019-06-24

本文共 2689 字,大约阅读时间需要 8 分钟。

// //  MyQuartzView.m //  QuartzTest // //  Created by zenny_chen on 12-2-21. //  Copyright (c) 2012年 GreenGames Studio. All rights reserved. //  #import "MyQuartzView.h" // Quartz2D以及Core Animation所需要的头文件 #import 
@implementation MyQuartzView - (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame]; if (self) {
// Initialization code } return self; } // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect {
// Drawing code // 创建Quartz上下文 CGContextRef context = UIGraphicsGetCurrentContext(); // 填充矩形 CGContextSetRGBFillColor(context, 0.6f, 0.6f, 0.6f, 1.0f); CGContextFillRect(context, CGRectMake(0.0f, 0.0f, 320.0f, 460.0f)); // 创建一个Path句柄 CGMutablePathRef pathRef = CGPathCreateMutable(); // 初始化该path到一个初始点 CGPathMoveToPoint(pathRef, &CGAffineTransformIdentity, 0.0f, 0.0f); // 添加一条直线,从初始点到该函数指定的坐标点 CGPathAddLineToPoint(pathRef, &CGAffineTransformIdentity, 50.0f, 100.0f); // 关闭该path CGPathCloseSubpath(pathRef); // 设置描边颜色 CGContextSetRGBStrokeColor(context, 0.99f, 0.01f, 0.02f,1.0f); // 将此path添加到Quartz上下文中 CGContextAddPath(context, pathRef); // 对上下文进行描边 CGContextStrokePath(context); // 释放该path CGPathRelease(pathRef); } @end

 

Quartz2D中对Path的绘制过程与OpenVG几乎一样。首先是创建Path,然后是对Path做绘制描述,最后是绘制(Paint)Path。

以上要注意的是,创建完一个Path句柄后,必须调用一次CGPathMoveToPoint来初始化绘制的初始点。

 

在调用CGPathMoveToPoint后,它会终止当前的子Path,并重新开启一个子Path。而一个子Path,其默认行为会构成一个封闭图形,比如以下代码:

// 创建一个Path句柄 CGMutablePathRef pathRef = CGPathCreateMutable(); // 初始化该path到一个初始点 CGPathMoveToPoint(pathRef, &CGAffineTransformIdentity, 0.0f, 0.0f); // 添加一条直线,从初始点到该函数指定的坐标点 CGPathAddLineToPoint(pathRef, &CGAffineTransformIdentity, 50.0f, 100.0f); CGPathAddLineToPoint(pathRef, &CGAffineTransformIdentity, 100.0f, 50.0f); // 关闭该path CGPathCloseSubpath(pathRef);

 

添加了两条直线,但是最终绘制出来的是一个封闭的三角形。

如果我们要画两条均以(0, 0)为其中一个端点的线段的话,我们可以这么做:

// 创建一个Path句柄 CGMutablePathRef pathRef = CGPathCreateMutable(); // 初始化该path到一个初始点 CGPathMoveToPoint(pathRef, &CGAffineTransformIdentity, 0.0f, 0.0f); // 添加一条直线,从初始点到该函数指定的坐标点 CGPathAddLineToPoint(pathRef, &CGAffineTransformIdentity, 50.0f, 100.0f); CGPathMoveToPoint(pathRef, &CGAffineTransformIdentity, 0.0f, 0.0f); CGPathAddLineToPoint(pathRef, &CGAffineTransformIdentity, 100.0f, 50.0f); // 关闭该path CGPathCloseSubpath(pathRef);

如果我们要从(0, 0)到(50, 100)画一条线段,然后再要从(50, 100)到(100, 50)画一条线段的话,可以这么做:

CGPathAddLineToPoint(pathRef, &CGAffineTransformIdentity, 50.0f, 100.0f); CGPathMoveToPoint(pathRef, &CGAffineTransformIdentity, 50.0f, 100.0f); CGPathAddLineToPoint(pathRef, &CGAffineTransformIdentity, 100.0f, 50.0f);

转载地址:http://gbeuo.baihongyu.com/

你可能感兴趣的文章
深入实践Spring Boot1.3.1 Maven依赖管理
查看>>
API网关的iOS SDK已经支持 IPV6
查看>>
《iOS 8开发指南(第2版)》——第1章,第1.4节使用Xcode开发环境
查看>>
【云栖精选】《云栖精选阿里巴巴技术实战2016年刊》重磅发布
查看>>
Javascript:谈谈JS的全局变量跟局部变量
查看>>
MonoDevelop的app.config问题
查看>>
if continue 语句
查看>>
When you are old (当你老了)
查看>>
SAE+Servlet+JSP实现微信公众平台OAuth2.0网页授权的使用
查看>>
Fast TileMap
查看>>
Problem25
查看>>
软件项目进度控制要处理好的四个基本问题(转)
查看>>
iOS沙盒目录结构
查看>>
通过IMAP定向收取网易邮箱邮件(疑难)
查看>>
ARTS 第一周
查看>>
【PPT已更新】给开发者的区块链技术指南 | JTalk 掘金线下活动第五期
查看>>
HTML标签 转 NSAttributedString
查看>>
vue实现根据多选框按钮,动态给百度地图添加和删除相应的覆盖物
查看>>
前奏交响曲
查看>>
深入理解Spring系列之七:web应用自动装配Spring配置
查看>>