首页 > 网站 > 建站经验 > 正文

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

2019-11-02 14:40:40
字体:
来源:转载
供稿:网友

   本文给大家汇总了几种IOS中实现异步加载图片的方法,十分的简单实用,有需要的小伙伴可以参考下。

  比较原始的方法:

  代码如下:

  AsyncImageView.h:

  #import

  @interface AsyncImageView : UIView

  {

  NSURLConnection* connection;

  NSMutableData* data;

  }

  - (void)loadImageFromURL:(NSURL*)url;

  @end

  AsyncImageView.m:

  #import "AsyncImageView.h"

  @implementation AsyncImageView

  - (id)initWithFrame:(CGRect)frame

  {

  self = [super initWithFrame:frame];

  if(self) {

  // Initialization code

  }

  returnself;

  }

  - (void)loadImageFromURL:(NSURL*)url {

  if(connection!=nil) { [connection release]; }

  if(data!=nil) { [data release]; }

  NSURLRequest* request = [NSURLRequest requestWithURL:url

  cachePolicy:NSURLRequestUseProtocolCachePolicy

  timeoutInterval:60.0];

  connection = [[NSURLConnection alloc]

  initWithRequest:request delegate:self];

  }

  - (void)connection:(NSURLConnection *)theConnection

  didReceiveData:(NSData *)incrementalData {

  if(data==nil) {

  data =

  [[NSMutableData alloc] initWithCapacity:2048];

  }

  [data appendData:incrementalData];

  }

  - (void)connectionDidFinishLoading:(NSURLConnection*)theConnection {

  [connection release];

  connection=nil;

  if([[self subviews] count] > 0) {

  [[[self subviews] objectAtIndex:0] removeFromSuperview];

  }

  UIImageView *imageView = [[[UIImageView alloc] initWithImage:[UIImage imageWithData:data]] autorelease];

  imageView.contentMode = UIViewContentModeScaleAspectFit;

  imageView.autoresizingMask = ( UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight );

  [self addSubview:imageView];

  imageView.frame = self.bounds;

  [imageView setNeedsLayout];

  [self setNeedsLayout];

  [data release];

  data=nil;

  }

  - (UIImage*) image {

  UIImageView* iv = [[self subviews] objectAtIndex:0];

  return[iv image];

  }

  - (void)dealloc {

  [connection cancel];

  [connection release];

  [data release];

  [super dealloc];

  }

  @end

  方法二:

  复制代码 代码如下:

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表