在iPhone App中我集成了流量封面
我正在将图片加载到来自网络服务器的流程封面
直到图像下载我正在传递图像计数= 0和uiimage = null
这里我没有在viewdidload或viewwillAppear等方法上下载图像,实际上我已经创建了单独的Thread用于下载和解析,因此加载该视图不需要时间
下载完成后如果触摸屏幕则会显示所有图片,但我想在下载完成后显示图片
如何以编程方式显示任何触摸效果的图像?
请帮助和建议
答案 0 :(得分:1)
这可能有助于您识别下载结束。由于NSURLConnection下载是异步的,您可以使用通知来标记下载完成并启动您的方法。
添加NSNotifications观察员:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(some_method:) name:@"some_name" object:nil];
在完成下载后发送通知:
- (void) connectionDidFinishLoading:(NSURLConnection *)connection {
[[NSNotificationCenter defaultCenter]
postNotificationName:@"some_name" object:nil];
}
这将启动该方法:
-(void)some_method {
// add downloaded image to set or smth
}
答案 1 :(得分:1)
使用ASIHTTP从http://allseeing-i.com/ASIHTTPRequest/下载Api
然后整合到项目中
将以下代码放入.h文件
#import <UIKit/UIKit.h>
#import "AFOpenFlowView.h"
#import "ASINetworkQueue.h"
#import "ASIHTTPRequest.h"
@interface cfDemoViewController : UIViewController <AFOpenFlowViewDataSource, AFOpenFlowViewDelegate> {
ASINetworkQueue *queue;
NSArray *coverImageData;
}
@property (nonatomic, retain) NSArray *arX;
- (void)imageDidLoad:(NSArray *)arguments;
-(void)requestForImage:(NSUInteger)index;
@end
以下代码放入.m文件
#import "UIImageExtras.h"
#import "cfDemoViewController.h"
#import "UIImageExtras.h"
@implementation cfDemoViewController
@synthesize arX = _arX;
- (void)dealloc
{
[super dealloc];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
NSArray *ar=[NSArray arrayWithObjects:@"http://google.com/report_image/2/17",
@"http://google.com/report_image/2/16",
@"http://google.com/report_image/2/15",
@"http://google.com/report_image/2/14",
@"http://google.com/report_image/2/13",
@"http://google.com/report_image/2/12",
@"http://google.com/report_image/2/11",
@"http://google.com/report_image/2/10",
@"http://google.com/report_image/2/9",
@"http://google.com/report_image/2/8",nil];
self.arX=ar;
queue=[[ASINetworkQueue alloc] init];
for (int i=0; i < [ar count]; i++) {
[(AFOpenFlowView *)self.view setImage:[UIImage imageNamed:@"default.png"] forIndex:i];
}
[self requestForImage:0];
[(AFOpenFlowView *)self.view setNumberOfImages:10];
}
-(void)requestForImage:(NSUInteger)index{
if(index>=[self.arX count]) return;
ASIHTTPRequest *req=[ASIHTTPRequest requestWithURL:[NSURL URLWithString:[self.arX objectAtIndex:index]]];
[req setDidFinishSelector:@selector(requestDone:)];
[req setDidFailSelector:@selector(requestWentWrong:)];
[req setUsername:[NSString stringWithFormat:@"%i",index]];
[req setDelegate:self];
[queue addOperation:req];
[queue go];
}
- (void)requestDone:(ASIHTTPRequest *)request
{
NSUInteger index=[[request username] intValue];
UIImage *img=[UIImage imageWithData:[request responseData]];
img=[img cropCenterAndScaleImageToSize:CGSizeMake(225, 225)];
[(AFOpenFlowView*)self.view setImage:img forIndex:index];
[self requestForImage:index+1];
// here all requests are downloaded and you want display any msg to user that code goes here.
}
- (void)requestWentWrong:(ASIHTTPRequest *)request
{
// NSError *error = [request error];
NSUInteger index=[[request username] intValue];
[self requestForImage:index+1];
}
- (void)imageDidLoad:(NSArray *)arguments {
UIImage *loadedImage = (UIImage *)[arguments objectAtIndex:0];
NSNumber *imageIndex = (NSNumber *)[arguments objectAtIndex:1];
// Only resize our images if they are coming from Flickr (samples are already scaled).
// Resize the image on the main thread (UIKit is not thread safe).
loadedImage = [loadedImage cropCenterAndScaleImageToSize:CGSizeMake(225, 225)];
[(AFOpenFlowView *)self.view setImage:loadedImage forIndex:[imageIndex intValue]];
}
- (UIImage *)defaultImage {
return [UIImage imageNamed:@"default.png"];
}
- (void)openFlowView:(AFOpenFlowView *)openFlowView requestImageForIndex:(int)index{
NSLog(@"request for index - %d",index);
}
- (void)openFlowView:(AFOpenFlowView *)openFlowView selectionDidChange:(int)index {
NSLog(@" Hello - Cover Flow selection did change to %d", index);
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
// return (interfaceOrientation == UIInterfaceOrientationPortrait);
return YES;
}
@end