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

2021-10-29 10:17:10 浏览数 (1)

代码语言: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> 

0 人点赞