万恶的需求给了一张默认图,但是要求给所有的ImageView默认都给这张默认图,但是ImageView有很多,size又不同,如果给一张固定图片就会被拉变形,万恶的肯定不会同意你放一张变形图片,所以,想到的解决办法是:切一个小logo把他绘制在一张纯色的背景上,生成一张新图片(当然这里需要知道imageView的size这样才能保证生成正确大小的图片)。
-(UIImage *)produceNewImageWithSmallImage:(UIImage *)image smallImageSize:(CGSize)smallImageSize withOutSize:(CGSize) outSize{
//矩形路径
UIBezierPath *outerPath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, outSize.width, outSize.height)];
UIGraphicsBeginImageContextWithOptions(outSize, NO, [UIScreen mainScreen].scale);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);{
// 翻转context (画布)
CGContextTranslateCTM(context, 0, outSize.height);
CGContextScaleCTM(context, 1, -1);
//画一个矩形并填充一个自定义颜色(与给的logo图背景颜色相同正好无缝衔接也可以切一个透明的)
CGContextAddPath(context, outerPath.CGPath);
CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);
CGContextDrawPath(context, kCGPathFill);
CGContextStrokePath(context);
//绘制图片在矩形中心位置
CGContextDrawImage(context, CGRectMake((outSize.width-smallImageSize.width)/2, (outSize.height-smallImageSize.height)/2,
smallImageSize.width, smallImageSize.height), image.CGImage);
}CGContextRestoreGState(context);
UIImage *radiusImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return radiusImage;
}
效果图.png
如果你需要改变logo的尺寸可以使用下面的方法避免logo改变尺寸以后变形
iOS图片指定Size压缩的正确方式http://www.jianshu.com/p/298ea48150e9
网友评论