一、引言
在上一篇博客中,介绍了有关CGPath绘制路径的相关方法,其中在View视图的drawRect方法中,已经使用过上下文将Path路径绘制到当前视图上,上一篇博客只是抛砖引玉,本片博客将更深入的介绍下有关上下文的更多内容。关于接胡搜啊CGPath应用的博客地址如下:
iOS开发CoreGraphics核心图形框架之一——CGPath的应用:https://my.oschina.net/u/2340880/blog/757072。
二、关于图形上下文Graphics Context
GraphicsContext对于开发者来说是完全透明的,开发者不需要关心其实现,也不需要关心其绘制方式,开发者只需要将要绘制的内容传递给图形上下文,由图形上下文来将内容绘制到对应的目标上。这个目标可以是视图,窗口,打印机,PDF文档或者位图对象。需要注意,绘制的顺序在CoreGraphics框架中十分重要,如果后绘制的内容和先绘制的内容有位置冲突,后绘制的内容将覆盖先绘制的内容。
特定的上下文用于将内容绘制到特定的输出源上,CoreGraphics中提供如下几种图形上下文:
1.位图图形上下文:位图图形上下文用于将RGB图像,GMYK图像或者黑白图像绘制到一个位图(bitmap)对象中。
2.PDF图形上下文:PDF图形上下文可以帮助开发者创建PDF文件,将内容绘制进PDF文件中,其与位图上下文最大的区别在于PDF数据可以保存多页图像。
3.窗口上下文:用于OS系统中的窗口绘制。
4.图层上下文:用于将内容绘制在Layer图层上。
5.打印上下文:使用Mac打印功能时,此上下文用于将内容绘制在打印输出源上。
三、在UIKit框架中操作图形上下文
在UIKit框架中有一个UIGraphics头文件,其中封装了许多对当前图形上下文进行操作的方法。首先任何UIView和其子类的视图控件都有一个drawRect方法,当视图将要被绘制时会调用这个方法,在drawRect方法中开发者可以获取到当前视图的图形上下文,通过这个图形上下文可以对视图进行自定义的绘制。UIGraphics头文件中定义的如下方法可以对当前的图形上下文进行操作:
//这个方法用于获取当前的图形上下文UIKIT_EXTERNCGContextRef__nullableUIGraphicsGetCurrentContext(void)CF_RETURNS_NOT_RETAINED;//这个方法用于将某个图形上下文对象压入栈中 使其变为当前的图形上下文UIKIT_EXTERNvoidUIGraphicsPushContext(CGContextRefcontext);//这个方法用于将当前的图形上下文出栈 当前的图形上下文始终是栈顶的图形上下文UIKIT_EXTERNvoidUIGraphicsPopContext(void);
需要注意,上面的UIGraphicsPushContext()与UIGraphicsPopContext()方法常用于切换当前的图形上下文。
//下面这两个方法用于向当前的图形上下文中填充矩形 UIKIT_EXTERNvoidUIRectFillUsingBlendMode(CGRectrect,CGBlendModeblendMode);UIKIT_EXTERNvoidUIRectFill(CGRectrect);//下面这两个方法用于向当前的图形上下文中绘制矩形边框UIKIT_EXTERNvoidUIRectFrameUsingBlendMode(CGRectrect,CGBlendModeblendMode);UIKIT_EXTERNvoidUIRectFrame(CGRectrect);//这个方法用于裁剪当前的图形上下文的绘制区域UIKIT_EXTERNvoidUIRectClip(CGRectrect);
上面方法中的CGBlendMode参数用于设置图像的混合模式,意义列举如下:
typedefCF_ENUM(int32_t,CGBlendMode) {//在背景图像之上绘制原图像kCGBlendModeNormal,//将背景与原图像进行混合kCGBlendModeMultiply,//将背景与原图像进行逆向混合kCGBlendModeScreen,//覆盖原图像 同时保持背景阴影kCGBlendModeOverlay,//进行灰度复合kCGBlendModeDarken,//进行亮度复合kCGBlendModeLighten,//复合时 黑色不进行复合kCGBlendModeColorDodge,//复合时 白色不进行复合kCGBlendModeColorBurn,//复合时 根据黑白色值比例进行复合kCGBlendModeSoftLight, kCGBlendModeHardLight,//复合时 将原图像中有关背景图像的色值去除kCGBlendModeDifference,//与kCGBlendModeDifference类似 对比度更低kCGBlendModeExclusion,//使用原图像的色调与饱和度kCGBlendModeHue,//同kCGBlendModeHue 纯灰度的区域不产生变化kCGBlendModeSaturation,//同kCGBlendModeHue 保留灰度等级kCGBlendModeColor,//与kCGBlendModeHue效果相反kCGBlendModeLuminosity,//下面这些枚举定义了MacOS中图像复合的计算方式 //R 结果 //S 原图像//D 背景图像//Ra Sa Da为带透明alpha通道kCGBlendModeClear,/* R = 0 */kCGBlendModeCopy,/* R = S */kCGBlendModeSourceIn,/* R = S*Da */kCGBlendModeSourceOut,/* R = S*(1 - Da) */kCGBlendModeSourceAtop,/* R = S*Da + D*(1 - Sa) */kCGBlendModeDestinationOver,/* R = S*(1 - Da) + D */kCGBlendModeDestinationIn,/* R = D*Sa */kCGBlendModeDestinationOut,/* R = D*(1 - Sa) */kCGBlendModeDestinationAtop,/* R = S*(1 - Da) + D*Sa */kCGBlendModeXOR,/* R = S*(1 - Da) + D*(1 - Sa) */kCGBlendModePlusDarker,/* R = MAX(0, (1 - D) + (1 - S)) */kCGBlendModePlusLighter/* R = MIN(1, S + D) */};
下面这些方法用于操作位图图形上下文:
//这个方法会创建一个位图图形上下文 并将其push进图形上下文栈中 size参数设置图像的大小UIKIT_EXTERNvoidUIGraphicsBeginImageContext(CGSizesize);//方法同上,其中opaque参数设置是否为不透明的 scale设置缩放因子UIKIT_EXTERNvoidUIGraphicsBeginImageContextWithOptions(CGSizesize,BOOLopaque,CGFloatscale)NS_AVAILABLE_IOS(4_0);//这个方法用于将当前的位图图形上下文内容画成UIImage对象UIKIT_EXTERNUIImage* __nullableUIGraphicsGetImageFromCurrentImageContext(void);//结束位图图形上下文的编辑 会POP出栈UIKIT_EXTERNvoidUIGraphicsEndImageContext(void);
我们可以通过代码来画一个简单的UIImage图像,示例如下:
- (void)viewDidLoad { [superviewDidLoad];//创建位图图形上下文 设置大小为200*200UIGraphicsBeginImageContext(CGSizeMake(200,200));//获取到当前图形上下文CGContextRefref =UIGraphicsGetCurrentContext();//裁剪其进行绘制的尺寸为100*100UIRectClip(CGRectMake(0,0,100,100));//设置线条颜色[[UIColorredColor] setStroke];//设置填充颜色[[UIColorgrayColor] setFill];//设置边框宽度CGContextSetLineWidth(ref,10);//进行填充UIRectFill(CGRectMake(0,0,100,100));//进行边框绘制UIRectFrame(CGRectMake(0,0,200,200));//拿到UIImage实例UIImage* image =UIGraphicsGetImageFromCurrentImageContext();//结束位图上下文编辑UIGraphicsEndImageContext();//将UIImage展示到界面上UIImageView* imageView = [[UIImageViewalloc]initWithImage:image]; imageView.contentMode =UIViewContentModeCenter; imageView.frame =CGRectMake(100,100,200,200); [self.view addSubview:imageView];}
效果如下图所示:
与操作PDF图形上下文的相关方法如下:
//这个方法用于创建一个PDF图形上下文 将其入栈 作为当前的图形上下文 /*
其中path为PDF文件写入的路径
bounds为PDF文档的尺寸
decumentInfo地点为设置PDF文档信息 后面会介绍
*/UIKIT_EXTERNBOOLUIGraphicsBeginPDFContextToFile(NSString*path,CGRectbounds,NSDictionary* __nullabledocumentInfo)NS_AVAILABLE_IOS(3_2);//这个方法用于穿件一个PDF图形上下文 但是将PDF内容写成Data数据 参数意义同上UIKIT_EXTERNvoidUIGraphicsBeginPDFContextToData(NSMutableData*data,CGRectbounds,NSDictionary* __nullabledocumentInfo)NS_AVAILABLE_IOS(3_2);//结束PDF图形上下文的编辑 将其出栈UIKIT_EXTERNvoidUIGraphicsEndPDFContext(void)NS_AVAILABLE_IOS(3_2);//这个方法用于将当前的PDF图形上下文新开一页内容UIKIT_EXTERNvoidUIGraphicsBeginPDFPage(void)NS_AVAILABLE_IOS(3_2);//同上UIKIT_EXTERNvoidUIGraphicsBeginPDFPageWithInfo(CGRectbounds,NSDictionary* __nullablepageInfo)NS_AVAILABLE_IOS(3_2);//返回当前PDF图形上下文所在页的尺寸UIKIT_EXTERNCGRectUIGraphicsGetPDFContextBounds(void)NS_AVAILABLE_IOS(3_2);//向PDF文档中的某个区域添加链接UIKIT_EXTERNvoidUIGraphicsSetPDFContextURLForRect(NSURL*url,CGRectrect)NS_AVAILABLE_IOS(3_2);//向PDF文档中的某个区域添加一个跳转目标 使其滚动到某点UIKIT_EXTERNvoidUIGraphicsAddPDFContextDestinationAtPoint(NSString*name,CGPointpoint)NS_AVAILABLE_IOS(3_2);//向PDF文档中的某个区域添加一个跳转目标 使其滚动到某个区域UIKIT_EXTERNvoidUIGraphicsSetPDFContextDestinationForRect(NSString*name,CGRectrect)NS_AVAILABLE_IOS(3_2);
上面有提到,在创建PDF图形上下文时,可以设置一个信息字典,这个字典中常用的可以进行配置的键值如下:
//这个键是可选的 对应需要设置为字符串类型的值 表明文档作者kCGPDFContextAuthor//这个键是可选的 对应需要设置为字符串类型的值 表示生成文档的命名名称kCGPDFContextCreator//这个键是可选的 对应需要设置为字符串类型的值 表示文档名称kCGPDFContextTitle//这个键设置所有者密码 需要设置为CFString的值kCGPDFContextOwnerPassword//这个键设置用户密码 需要设置为CFString的值kCGPDFContextUserPassword//这个键设置是否允许在未解锁状态下进行打印 需要设置为CFBollean的值 默认为允许kCGPDFContextAllowsPrinting//这个键设置是否允许在未解锁状态下进行复制 需要设置为CFBollean的值 默认为允许kCGPDFContextAllowsCopying//设置输出规范kCGPDFContextOutputIntentkCGPDFContextOutputIntents//设置文档的主题 需要设置为CFString的值kCGPDFContextSubject//设置文档的关键字kCGPDFContextKeywords//设置密钥长度kCGPDFContextEncryptionKeyLength
四、CGContext功能解析
前边介绍了如何拿到对应的图形上下文,拿到图形上下文后,开发者便可以随心所欲的通过图形上下文向目标上绘制内容。CoreGraphics框架中提供的CGContext绘制相关方法解析如下:
//获取CGContext类在CoreGraphics框架中的id值CFTypeIDCGContextGetTypeID(void);//将当前图形上下文进行保存 会执行push入栈voidCGContextSaveGState(CGContextRefcg_nullable c);//将图形上下文恢复到保存时的状态 voidCGContextRestoreGState(CGContextRefcg_nullable c);//对context内容进行缩放操作voidCGContextScaleCTM(CGContextRefcg_nullable c,CGFloatsx,CGFloatsy);//对context内容进行平移操作voidCGContextTranslateCTM(CGContextRefcg_nullable c,CGFloattx,CGFloatty);//对context内容进行旋转操作voidCGContextRotateCTM(CGContextRefcg_nullable c,CGFloatangle);//对context内容进行transform变换操作voidCGContextConcatCTM(CGContextRefcg_nullable c,CGAffineTransformtransform);//获取某个context的transform变换对象CGAffineTransformCGContextGetCTM(CGContextRefcg_nullable c);//设置绘制的线宽voidCGContextSetLineWidth(CGContextRefcg_nullable c,CGFloatwidth);//设置绘制的线帽风格voidCGContextSetLineCap(CGContextRefcg_nullable c,CGLineCapcap);//设置绘制的线连接处风格voidCGContextSetLineJoin(CGContextRefcg_nullable c,CGLineJoinjoin);//设置绘制的先转折处风格voidCGContextSetMiterLimit(CGContextRefcg_nullable c,CGFloatlimit);//设置虚线配置参数voidCGContextSetLineDash(CGContextRefcg_nullable c,CGFloatphase,constCGFloat* __nullablelengths, size_t count);//设置平滑度voidCGContextSetFlatness(CGContextRefcg_nullable c,CGFloatflatness);//设置透明度voidCGContextSetAlpha(CGContextRefcg_nullable c,CGFloatalpha);//设置图像复合模式voidCGContextSetBlendMode(CGContextRefcg_nullable c,CGBlendModemode);//开始新的路径 旧的路径将被抛弃voidCGContextBeginPath(CGContextRefcg_nullable c);//将路径起点移动到某个点voidCGContextMoveToPoint(CGContextRefcg_nullable c,CGFloatx,CGFloaty);//向路径中添加一条线voidCGContextAddLineToPoint(CGContextRefcg_nullable c,CGFloatx,CGFloaty);//向路径中添加三次贝塞尔曲线voidCGContextAddCurveToPoint(CGContextRefcg_nullable c,CGFloatcp1x,CGFloatcp1y,CGFloatcp2x,CGFloatcp2y,CGFloatx,CGFloaty);//向路径中添加二次贝塞尔曲线voidCGContextAddQuadCurveToPoint(CGContextRefcg_nullable c,CGFloatcpx,CGFloatcpy,CGFloatx,CGFloaty);//闭合路径voidCGContextClosePath(CGContextRefcg_nullable c);//向路径中添加一个矩形voidCGContextAddRect(CGContextRefcg_nullable c,CGRectrect);//向路径中添加一组矩形voidCGContextAddRects(CGContextRefcg_nullable c,constCGRect* __nullablerects, size_t count);//向路径中添加一组线条voidCGContextAddLines(CGContextRefcg_nullable c,constCGPoint* __nullablepoints, size_t count);//向路径中添加椭圆CGContextAddEllipseInRect(CGContextRefcg_nullable c,CGRectrect);//向路径中添加圆弧voidCGContextAddArc(CGContextRefcg_nullable c,CGFloatx,CGFloaty,CGFloatradius,CGFloatstartAngle,CGFloatendAngle,intclockwise);voidCGContextAddArcToPoint(CGContextRefcg_nullable c,CGFloatx1,CGFloaty1,CGFloatx2,CGFloaty2,CGFloatradius);//直接向上下文中添加一个路径对象voidCGContextAddPath(CGContextRefcg_nullable c,CGPathRefcg_nullable path);//将上下文中的路径内容替换掉 只留下边框voidCGContextReplacePathWithStrokedPath(CGContextRefcg_nullable c);//判断某个Context的路径是否为空boolCGContextIsPathEmpty(CGContextRefcg_nullable c);//获取一个Context路径当前端点的位置CGPointCGContextGetPathCurrentPoint(CGContextRefcg_nullable c);//获取路径的尺寸CGRectCGContextGetPathBoundingBox(CGContextRefcg_nullable c);//进行图形上下文的拷贝CGPathRef__nullableCGContextCopyPath(CGContextRefcg_nullable c);//获取context的路径中是否包含某个点boolCGContextPathContainsPoint(CGContextRefcg_nullable c,CGPointpoint,CGPathDrawingModemode);//进行路径的绘制/*
mode枚举意义如下:
kCGPathFill, //进行填充
kCGPathEOFill, //补集进行填充绘制
kCGPathStroke, //边框绘制
kCGPathFillStroke, //边框绘制并填充
kCGPathEOFillStroke //补集进行边框和填充绘制
*/voidCGContextDrawPath(CGContextRefcg_nullable c,CGPathDrawingModemode);//进行路径的填充voidCGContextFillPath(CGContextRefcg_nullable c);//进行路径所围成区域的补集区域填充voidCGContextEOFillPath(CGContextRefcg_nullable c);//进行边框绘制voidCGContextStrokePath(CGContextRefcg_nullable c);//填充某个矩形区域voidCGContextFillRect(CGContextRefcg_nullable c,CGRectrect);//填充一组矩形区域voidCGContextFillRects(CGContextRefcg_nullable c,constCGRect* __nullablerects, size_t count);//进行矩形区域的边框绘制voidCGContextStrokeRect(CGContextRefcg_nullable c,CGRectrect);//进行矩形区域的边框绘制 可以设置边框宽度voidCGContextStrokeRectWithWidth(CGContextRefcg_nullable c,CGRectrect,CGFloatwidth);//清除某个矩形区域voidCGContextClearRect(CGContextRefcg_nullable c,CGRectrect);//进行虚线区域的填充voidCGContextFillEllipseInRect(CGContextRefcg_nullable c,CGRectrect);//进行虚线区域边框的绘制voidCGContextStrokeEllipseInRect(CGContextRefcg_nullable c,CGRectrect);//绘制一组线voidCGContextStrokeLineSegments(CGContextRefcg_nullable c,constCGPoint* __nullablepoints, size_t count);//依据Context当前路径进行裁剪voidCGContextClip(CGContextRefcg_nullable c);//进行路径区域的补集区域裁剪voidCGContextEOClip(CGContextRefcg_nullable c);//这个方法十分重要 其可以将图片裁剪成图形上下文定义的形状voidCGContextClipToMask(CGContextRefcg_nullable c,CGRectrect,CGImageRefcg_nullable mask);//获取裁剪的区域尺寸CGRectCGContextGetClipBoundingBox(CGContextRefcg_nullable c);//进行区域裁剪voidCGContextClipToRect(CGContextRefcg_nullable c,CGRectrect);//进行一组区域的裁剪voidCGContextClipToRects(CGContextRefcg_nullable c,constCGRect* rects, size_t count);//设置图形上下文的填充颜色voidCGContextSetFillColorWithColor(CGContextRefcg_nullable c,CGColorRefcg_nullable color);//设置图形上下文的边框颜色voidCGContextSetStrokeColorWithColor(CGContextRefcg_nullable c,CGColorRefcg_nullable color);//设置图形上下文填充颜色的色彩空间voidCGContextSetFillColorSpace(CGContextRefcg_nullable c,CGColorSpaceRefcg_nullable space);//设置图形上下文边框颜色的色彩空间voidCGContextSetStrokeColorSpace(CGContextRefcg_nullable c,CGColorSpaceRefcg_nullable space);//下面这些函数与设置颜色和组件模块属性相关voidCGContextSetFillColor(CGContextRefcg_nullable c,constCGFloat* cg_nullable components);voidCGContextSetStrokeColor(CGContextRefcg_nullable c,constCGFloat* cg_nullable components);voidCGContextSetFillPattern(CGContextRefcg_nullable c,CGPatternRefcg_nullable pattern,constCGFloat* cg_nullable components);voidCGContextSetStrokePattern(CGContextRefcg_nullable c,CGPatternRefcg_nullable pattern,constCGFloat* cg_nullable components);voidCGContextSetPatternPhase(CGContextRefcg_nullable c,CGSizephase);voidCGContextSetGrayFillColor(CGContextRefcg_nullable c,CGFloatgray,CGFloatalpha);voidCGContextSetGrayStrokeColor(CGContextRefcg_nullable c,CGFloatgray,CGFloatalpha);voidCGContextSetRGBFillColor(CGContextRefcg_nullable c,CGFloatred,CGFloatgreen,CGFloatblue,CGFloatalpha);voidCGContextSetRGBStrokeColor(CGContextRefcg_nullable c,CGFloatred,CGFloatgreen,CGFloatblue,CGFloatalpha);voidCGContextSetCMYKFillColor(CGContextRefcg_nullable c,CGFloatcyan,CGFloatmagenta,CGFloatyellow,CGFloatblack,CGFloatalpha);voidCGContextSetCMYKStrokeColor(CGContextRefcg_nullable c,CGFloatcyan,CGFloatmagenta,CGFloatyellow,CGFloatblack,CGFloatalpha);//将当前上下文内容渲染进颜色intent中voidCGContextSetRenderingIntent(CGContextRefcg_nullable c,CGColorRenderingIntentintent);//在指定区域内渲染图片voidCGContextDrawImage(CGContextRefcg_nullable c,CGRectrect,CGImageRefcg_nullable image);//在区域内进行瓦片方式的图片渲染voidCGContextDrawTiledImage(CGContextRefcg_nullable c,CGRectrect,CGImageRefcg_nullable image);//获取上下文渲染的图像质量CGInterpolationQualityCGContextGetInterpolationQuality(CGContextRefcg_nullable c);//设置上下文渲染时的图像质量voidCGContextSetInterpolationQuality(CGContextRefcg_nullable c,CGInterpolationQualityquality);//设置进行阴影的渲染voidCGContextSetShadowWithColor(CGContextRefcg_nullable c,CGSizeoffset,CGFloatblur,CGColorRef__nullablecolor);voidCGContextSetShadow(CGContextRefcg_nullable c,CGSizeoffset,CGFloatblur);//绘制线性渐变效果voidCGContextDrawLinearGradient(CGContextRefcg_nullable c,CGGradientRefcg_nullable gradient,CGPointstartPoint,CGPointendPoint,CGGradientDrawingOptionsoptions);//绘制半径渐变效果voidCGContextDrawRadialGradient(CGContextRefcg_nullable c,CGGradientRefcg_nullable gradient,CGPointstartCenter,CGFloatstartRadius,CGPointendCenter,CGFloatendRadius,CGGradientDrawingOptionsoptions);//用渐变填充上下文的裁剪区域voidCGContextDrawShading(CGContextRefcg_nullable c, cg_nullableCGShadingRefshading);//设置绘制的文字间距voidCGContextSetCharacterSpacing(CGContextRefcg_nullable c,CGFloatspacing);//设置绘制的文字位置voidCGContextSetTextPosition(CGContextRefcg_nullable c,CGFloatx,CGFloaty);//获取绘制的文字位置CGPointCGContextGetTextPosition(CGContextRefcg_nullable c);//设置文字transform变换voidCGContextSetTextMatrix(CGContextRefcg_nullable c,CGAffineTransformt);//获取文字的transform变换CGAffineTransformCGContextGetTextMatrix(CGContextRefcg_nullable c);//设置文字的绘制模式/*
kCGTextFill, //填充
kCGTextStroke, //空心
kCGTextFillStroke, //填充加边框
kCGTextInvisible, //在可是区域内
kCGTextFillClip, //裁剪填充
kCGTextStrokeClip, //裁剪绘制边框
kCGTextFillStrokeClip,//进行裁剪
kCGTextClip
*/voidCGContextSetTextDrawingMode(CGContextRefcg_nullable c,CGTextDrawingModemode);//设置绘制文字的字体voidCGContextSetFont(CGContextRefcg_nullable c,CGFontRefcg_nullable font);//设置绘制文字的字号voidCGContextSetFontSize(CGContextRefcg_nullable c,CGFloatsize);voidCGContextShowGlyphsAtPositions(CGContextRefcg_nullable c,constCGGlyph* cg_nullable glyphs,constCGPoint* cg_nullable Lpositions, size_t count);//设置绘制的字符风格voidCGContextShowGlyphsAtPositions(CGContextRefcg_nullable c,constCGGlyph* cg_nullable glyphs,constCGPoint* cg_nullable Lpositions, size_t count);//进行PDF页的绘制voidCGContextDrawPDFPage(CGContextRefcg_nullable c,CGPDFPageRefcg_nullable page);//开启一个新的PDF页voidCGContextBeginPage(CGContextRefcg_nullable c,constCGRect* __nullablemediaBox);//结束当前的PDF页voidCGContextEndPage(CGContextRefcg_nullable c);//内存引用加1CGContextRefcg_nullableCGContextRetain(CGContextRefcg_nullable c);//内存引用计数减1voidCGContextRelease(CGContextRefcg_nullable c);//将上下文中的内容立即渲染到目标voidCGContextFlush(CGContextRefcg_nullable c);//将上下文中的内容进行同步voidCGContextSynchronize(CGContextRefcg_nullable c);//是否开启抗锯齿效果voidCGContextSetShouldAntialias(CGContextRefcg_nullable c,boolshouldAntialias);//是否允许抗锯齿效果voidCGContextSetAllowsAntialiasing(CGContextRefcg_nullable c,boolallowsAntialiasing);//是否开启字体平滑voidCGContextSetShouldSmoothFonts(CGContextRefcg_nullable c,boolshouldSmoothFonts);//是否允许字体平滑voidCGContextSetAllowsFontSmoothing(CGContextRefcg_nullable c,boolallowsFontSmoothing);//设置是否开启subpixel状态渲染符号voidCGContextSetShouldSubpixelPositionFonts(CGContextRefcg_nullable c,boolshouldSubpixelPositionFonts);//是否允许subpixel状态渲染符号voidCGContextSetAllowsFontSubpixelPositioning(CGContextRefcg_nullable c,boolallowsFontSubpixelPositioning);//这个方法会在当前Context中开启一个透明的层 之后的绘制会绘制到这个透明的层上voidCGContextBeginTransparencyLayer(CGContextRefcg_nullable c,CFDictionaryRef__nullableauxiliaryInfo);//在Context中开启一个透明的层voidCGContextBeginTransparencyLayerWithRect(CGContextRefcg_nullable c,CGRectrect,CFDictionaryRef__nullableauxInfo);//完成透明层的渲染voidCGContextEndTransparencyLayer(CGContextRefcg_nullable c);//返回用户控件的transform变换CGAffineTransformCGContextGetUserSpaceToDeviceSpaceTransform(CGContextRefcg_nullable c);//将用户控件点的坐标转换为设备控件坐标CGPointCGContextConvertPointToDeviceSpace(CGContextRefcg_nullable c,CGPointpoint);//将设备空间的点坐标转换为用户空间的点坐标CGPointCGContextConvertPointToUserSpace(CGContextRefcg_nullable c,CGPointpoint);//将用于空间的尺寸转换为设备空间的尺寸CGSizeCGContextConvertSizeToDeviceSpace(CGContextRefcg_nullable c,CGSizesize);//将设备空间的尺寸转换为用户空间的尺寸CGSizeCGContextConvertSizeToUserSpace(CGContextRefcg_nullable c,CGSizesize);//将用户空间的rect转换为设备空间的rectCGRectCGContextConvertRectToDeviceSpace(CGContextRefcg_nullable c,CGRectrect);//将设备空间的rect转换为用户空间的rectCGRectCGContextConvertRectToUserSpace(CGContextRefcg_nullable c,CGRectrect);//下面这些方法已经被弃用 //设置字体 使用CoreText相关的API代替voidCGContextSelectFont(CGContextRefcg_nullable c,constchar* cg_nullable name,CGFloatsize,CGTextEncodingtextEncoding);//绘制文本 使用CoreText相关API代替voidCGContextShowText(CGContextRefcg_nullable c,constchar* cg_nullable string, size_t length);//在相应位置绘制文本 使用CoreText相关API代替voidCGContextShowTextAtPoint(CGContextRefcg_nullable c,CGFloatx,CGFloaty,constchar* cg_nullable string, size_t length);//进行符号的绘制 使用CoreText相关API代替voidCGContextShowGlyphs(CGContextRefcg_nullable c,constCGGlyph* __nullableg, size_t count);//在相应位置绘制符号 使用CoreText相关API代替voidCGContextShowGlyphsAtPoint(CGContextRefcg_nullable c,CGFloatx,CGFloaty,constCGGlyph* __nullableglyphs, size_t count);//绘制符号 使用一个固定的缩进值 使用CoreText相关API代替voidCGContextShowGlyphsWithAdvances(CGContextRefcg_nullable c,constCGGlyph* __nullableglyphs,constCGSize* __nullableadvances, size_t count);//进行PDF文档绘制 CGPDFPage相关API代替voidCGContextDrawPDFDocument(CGContextRefcg_nullable c,CGRectrect,CGPDFDocumentRefcg_nullable document,intpage);
文章转自:https://my.oschina.net/u/2340880/blog/759070
网友评论