ios通过按钮点击异步加载图片代码
2018-07-20 来源:open-open
@interface UIButton (AsyncImage) //size by point - (void)setImageFromURL:(NSString *)urlString adjustToSize:(CGSize)size completion:(void (^)(void))completion logo:(UIImage *)logoImage; @end @implementation UIButton (AsyncImage) - (void)setImageFromURL:(NSString *)urlString adjustToSize:(CGSize)size completion:(void (^)(void))completion logo:(UIImage *)logoImage { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ UIImage *image = nil; NSURL *url = [NSURL URLWithString:urlString]; NSData *data = [NSData dataWithContentsOfURL:url]; image = [UIImage imageWithData:data]; if (image) { if (!CGSizeEqualToSize(size, CGSizeZero)) { image = [UIImage imageWithCGImage:image.CGImage scale:[self scaleImage:image adjustToSize:size] orientation:image.imageOrientation]; } if (logoImage) { image = [self addLogoImage:logoImage toImage:image]; } dispatch_async(dispatch_get_main_queue(), ^{ [self setImage:image forState:UIControlStateNormal]; completion(); }); } else { NSLog(@"async load error."); } }); } // 缩放图片以适应按钮大小 - (CGFloat)scaleImage:(UIImage *)image adjustToSize:(CGSize)size { CGFloat xScale = size.width / image.size.width; CGFloat yScale = size.height / image.size.height; return 1.0 / MIN(xScale, yScale); } - (UIImage *)addLogoImage:(UIImage *)logo toImage:(UIImage *)img { //get image width and height CGFloat scale = [UIScreen mainScreen].scale; int w = scale * img.size.width; int h = scale * img.size.height; int logoWidth = logo.scale * logo.size.width; int logoHeight = logo.scale * logo.size.height; CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); //create a graphic context with CGBitmapContextCreate CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst); CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage); CGContextDrawImage(context, CGRectMake(w - logoWidth, 0, logoWidth, logoHeight), [logo CGImage]); CGImageRef imageMasked = CGBitmapContextCreateImage(context); CGContextRelease(context); CGColorSpaceRelease(colorSpace); return [UIImage imageWithCGImage:imageMasked scale:scale orientation:img.imageOrientation]; } @end
标签: isp
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
上一篇:PHP过滤常用的标签
下一篇:C语言计算圆周率PI
最新资讯
热门推荐