iOS开发 UIImage图片拼接

转自:http://blog.csdn.net/jiangpei1993/article/details/50533534

最近做项目需要做一个多状态展示,并且状态不存在时,图标自动移位,保证图标排列整齐。一开始看到这个想到的是做一组UIImageView放到Array里 ,根据图标有无向UIImageView数组添加图片,由于布局里是手写NSLayout的,还有其他的控件,调整了好久,感觉无望。。。。(老工程不能改动太多底层的,内心纠结啊!!!)由于原来的布局里有一个状态的UIImageView,于是乎就有一个念头,如果可以把那些图标重新组合生成新的图标不就可以不动布局了。找API文档看到UIImage有一个drawInRect的方法,百度一下,直接找到了图片拼接代码,拿过来一用感觉不太对劲,图片失真了。。。(也是醉了),继续深挖。发现是UIGraphicsBeginImageContext(offScreenSize);    捣的鬼,换成UIGraphicsBeginImageContextWithOptions(offScreenSize, NO, [UIScreen mainScreen].scale);问题解决。附上处理后的代码:

//leftImage:左侧图片 rightImage:右侧图片 margin:两者间隔
- (UIImage *) combineWithLeftImg:(UIImage*)leftImage rightImg:(UIImage*)rightImage withMargin:(NSInteger)margin{
 if (rightImage == nil) {
 return leftImage;
 }
 CGFloat width = leftImage.size.width + rightImage.size.width + margin;
 CGFloat height = leftImage.size.height;
 CGSize offScreenSize = CGSizeMake(width, height);
 
// UIGraphicsBeginImageContext(offScreenSize);用这个重绘图片会模糊
 UIGraphicsBeginImageContextWithOptions(offScreenSize, NO, [UIScreen mainScreen].scale);
 
 CGRect rectL = CGRectMake(0, 0, leftImage.size.width, height);
 [leftImage drawInRect:rectL];
 
 CGRect rectR = CGRectMake(rectL.origin.x + leftImage.size.width + margin, 0, rightImage.size.width, height);
 [rightImage drawInRect:rectR];
 
 UIImage* imagez = UIGraphicsGetImageFromCurrentImageContext();
 
 UIGraphicsEndImageContext();
 
 return imagez;
}
本站公众号
   欢迎关注本站公众号,获取更多程序园信息
开发小院