iOS通過按鈕點擊異步加載圖片代碼

jopen 9年前發布 | 1K 次閱讀 Objective-C IOS

@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>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!