话不多说,先上效果图,此需求是图片上的文字可以更改,文字大小也可以更改。
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,请看实现
[objc] view plain copy
-
- (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