iOS开发之异步加载图片
来源:互联网 发布:如何下载淘宝卖家版 编辑:程序博客网 时间:2024/05/16 12:20
比较原始的方法:
AsyncImageView.h:
#import <UIKit/UIKit.h>
@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
}
return
self;
}
- (
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
使用:
AsyncImageView *asyncImage = [[AsyncImageView alloc] init];
asyncImage.frame = CGRectMake(100, point_y, 95, 95)
//圆角
[asyncImage.layer setMasksToBounds:YES];
[asyncImage.layer setCornerRadius:15];
[asyncImage loadImageFromURL:[NSURL URLWithString:@
"www.istar.name/...."
]];
不过发现一个好东东, SDWebImage, 这个实在是太方便了
主页:https://github.com/rs/SDWebImage
1.下载下来放到project里面
2. 添加:MapKit.framework
3. #import “UIImageView+WebCache.h”
4. 使用:
UIImageView *asyncImage = [[UIImageView alloc] init];
[asyncImage setImageWithURL:[NSURL URLWithString:@
www.istar.name/....
]];
使用第三方库
EGOImageLoading是我在项目中用的比较多的一个第三方图片异步加载类,你们可以在git上找到并下载它,链接如下。另外提一下,
广为人知的下拉刷新EGORefreshTableHeaderView也是就是这个人写的。
https://github.com/enormego/EGOImageLoading
(下载后运行demo程序XCode会提示找不到EGOCache.h头文件,可以在这个地方下载https://github.com/enormego/EGOCache)
使用方法可以参照里面的demo程序,很简单,只要把ImageUrl告诉它,剩下的就什么都不用管了,它会帮你异步加载,还会做缓存处理...
?1234 // 设置默认占位图片 myEgoimageView.placeholderImage = [UIImage imageNamed:@"placeholder.png"]; // 告诉它图片的url地址, done myEgoimageView.imageURL = [NSURL URLWithString:@"http://simg.cocoachina.com/201111220746561330.jpg"];
- iOS开发之异步加载图片
- iOS开发之异步加载图片
- iOS开发之异步加载图片
- iOS开发之异步加载图片
- iOS开发:异步加载图片
- iOS开发之EGOImageLoading异步加载图片公用类
- iOS开发:图片的异步加载
- [iOS开发必备工具之]图片的异步加载与图片缓存(2)
- [iOS开发必备工具之]图片的异步加载与图片缓存(1)
- Android开发之ListView异步加载图片
- iOS异步加载图片
- iOS 异步加载图片
- iOS异步加载图片
- iOS 异步加载图片
- IOS开发之异步加载网络图片并缓存本地实现瀑布流(一)
- IOS开发之异步加载网络图片并缓存本地实现瀑布流(二)
- IOS开发之异步加载网络图片并缓存本地实现瀑布流(一)
- IOS开发之异步加载网络图片并缓存本地实现瀑布流(二)
- Django + Python + MySQL 的开发与部署
- 微信模板的换行
- android开发步步为营之41:spinner的用法
- [iOS] Swift 初学手册:可选类型 (Optionals)
- Codeforces 449C Jzzhu and Apples(构造)
- iOS开发之异步加载图片
- 重写ScrollView实现两个ScrollView的同步滚动显示
- 关于html5和cocos2d-html5缓存问题及解决办法
- 我的Java开发学习之旅------>Java经典面试题
- 价值
- 习惯决定成功与否
- 音频混合的方法
- 【索引】Codeforces Round #257 (Div. 2)
- HTML