前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ios通过按钮点击异步加载图片代码

ios通过按钮点击异步加载图片代码

原创
作者头像
大师级码师
修改2021-10-29 10:17:10
1.6K0
修改2021-10-29 10:17:10
举报
文章被收录于专栏:大师级码师
代码语言:javascript
复制
@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</pre> 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档