您的位置:首页 > 产品设计 > UI/UE

UITableView性能-圆角图片

2015-09-24 18:04 549 查看
圆角图片因为GPU渲染会影响性能

参考:/article/1318655.html

http://blog.sina.com.cn/s/blog_671d2e4f0101cxpl.html

/article/5751723.html

instruments用的不多,我直接循环了几个圆角,3种方法试了下

image.layer.cornerRadius = 8;
image.layer.masksToBounds = YES;上面效率是最低的,

另外的重写draw方法,和mask图与原图覆盖生成新图,效率感觉差不多,等后面熟悉了instruments在测试下,

重写drawRect,(-_-,要弄个新的属性才会走这里,本菜鸟还不懂啊,先弄了个UIImageView用它自己的image走都不走这里。。。图形这方面设计太少了)

//注意背景色要和cell的背景色设置一致哦,不然-0-
- (void)drawRect:(CGRect)rect {
CGRect bounds = self.bounds;
[[UIColor whiteColor]set];
UIRectFill(bounds);
[[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:8.0] addClip];
[self.image drawInRect:bounds];
}

- (void)setImage:(UIImage *)image {
_image = image;
//需要这一步,需要刷新,不然显示会出问题
[self setNeedsDisplay];
}

- (void)dealloc {
self.image = nil;
}mask图与原图覆盖生成新图

- (UIImage *)imageByComposingImage:(UIImage *)image withMaskImage:(UIImage *)maskImage {
CGImageRef maskImageRef = maskImage.CGImage;
CGImageRef maskRef = CGImageMaskCreate(CGImageGetWidth(maskImageRef),
CGImageGetHeight(maskImageRef),
CGImageGetBitsPerComponent(maskImageRef),
CGImageGetBitsPerPixel(maskImageRef),
CGImageGetBytesPerRow(maskImageRef),
CGImageGetDataProvider(maskImageRef), NULL, false);

CGImageRef newImageRef = CGImageCreateWithMask(image.CGImage, maskRef);
CGImageRelease(maskRef);
UIImage *newImage = [UIImage imageWithCGImage:newImageRef];
CGImageRelease(newImageRef);

return newImage;
}补充:mask图与原图覆盖生成新图可以自定义任意形状的图哦

测试demo链接:http://pan.baidu.com/s/1qWCDprY
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: