话不多说,先上效果图,此需求是图片上的文字可以更改,文字大小也可以更改。
iOS支持两套图形API族:Core Graphics/Quartz 2D和OpenGL ES,OpenGL ES属于跨平台的图形API,属于OpenGL的一个简化版。而QuartZ 2D是苹果公司开发的一套API,它是Core Graphics FrameWork的一部分。Core Graphics FrameWork是基于C的一套绘图API,使用了Quartz作为绘图引擎。它的所有操作都在一个上下文中进行,所以在绘图之前需要获取该上下文(context)并传入执行渲染的函数中。假如你正在渲染一张在内存中的图片,此时需要传入该图片所属的上下文。获得一个图片的上下文是绘图的第一步,如下代码:
//创建一个基于位图的上下文(context)
UIGraphicsBeginImageContextWithOptions(size,NO,0.0);//opaque:NO scale:0.0
我们可以将图形上下文理解成一块画布,如果没有得到这块画布就不能进行任何操作。下面是我自己写的UIImage的一个category,请看实现
- (UIImage *)imageWithTitle:(NSString *)title fontSize:(CGFloat)fontSize { //画布大小 CGSize size=CGSizeMake(self.size.width,self.size.height); //创建一个基于位图的上下文 UIGraphicsBeginImageContextWithOptions(size,NO,0.0);//opaque:NO scale:0.0 [self drawAtPoint:CGPointMake(0.0,0.0)]; //文字居中显示在画布上 NSMutableParagraphStyle* paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; paragraphStyle.lineBreakMode = NSLineBreakByCharWrapping; paragraphStyle.alignment=NSTextAlignmentCenter;//文字居中 //计算文字所占的size,文字居中显示在画布上 CGSize sizeText=[title boundingRectWithSize:self.size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:fontSize]}context:nil].size; CGFloat width = self.size.width; CGFloat height = self.size.height; CGRect rect = CGRectMake((width-sizeText.width)/2, (height-sizeText.height)/2, sizeText.width, sizeText.height); //绘制文字 [title drawInRect:rect withAttributes:@{ NSFontAttributeName:[UIFont systemFontOfSize:fontSize],NSForegroundColorAttributeName:[ UIColor whiteColor],NSParagraphStyleAttributeName:paragraphStyle}]; //返回绘制的新图形 UIImage *newImage= UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage; }
请看代码,一切尽在不言中。下面介绍一款软件PaintCode帮助实现Core Graphics绘图,软件可以直接通过拖拉控件,改变属性,来实现绘图,并且生成oc代码:
和"PaintCode"相关文章:
http://www.woshipm.com/tag/paintcode
github下载地址:
https://github.com/shenguanhua/GHUIImage
个人微信公众号:
iOSDevTeam