#import "MainViewController.h"
#import <ImageIO/ImageIO.h>
#import <CoreFoundation/CoreFoundation.h>
@interface MainViewController ()<NSURLConnectionDelegate>{
CGImageSourceRef _incrementalImgSource;
}
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (nonatomic, strong) NSURLConnection *connection;
@property (nonatomic, retain) NSMutableData *data;
@property (nonatomic, assign) BOOL isFinished;
@end
@implementation MainViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
- (IBAction)onClickLoad:(id)sender {
_incrementalImgSource = CGImageSourceCreateIncremental(NULL);
NSString *url = @"https://i.pinimg.com/1200x/2e/0c/c5/2e0cc5d86e7b7cd42af225c29f21c37f.jpg";
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:15];
_connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
}
#pragma mark - NSURLConnectionDelegate
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSLog(@"didReceiveResponse");
NSInteger expected = (NSInteger)response.expectedContentLength;
expected = expected > 0 ? expected : 0;
_data = [NSMutableData dataWithCapacity:expected];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
NSLog(@"didReceiveData");
[_data appendData:data];
CGImageSourceUpdateData(_incrementalImgSource, (CFDataRef)_data, _isFinished);
CGImageRef imageRef = CGImageSourceCreateImageAtIndex(_incrementalImgSource, 0, NULL);
self.imageView.image = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"connectionDidFinishLoading");
_isFinished = YES;
CGImageSourceUpdateData(_incrementalImgSource, (CFDataRef)_data, _isFinished);
CGImageRef imageRef = CGImageSourceCreateImageAtIndex(_incrementalImgSource, 0, NULL);
self.imageView.image = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
}
- (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection *)connection{
return NO;
}
首页用CGImageSourceCreateIncremental(NULL)
创建一个空的图片源,
随后获取到图片用CGImageSourceUpdateData
更新图像数据
用CGImageSourceCreateImageAtIndex
创建CGImageRef对象,以显示图片
网友评论