0

in iPhone App i have integrated flow cover

I am loading images into flow cover from web server

till the time images downloading i am passing image count= 0 and uiimage= null

here I am not downloading images on methods like viewdidload or viewwillAppear actually i have created separate Thread for downloading and parsing so it would not take time to load that view

when downloading completes and if touches the screen it is showing all images but I want to display images on download completes

how to make images visible with out any touch effect programmatically?

Please help and Suggest

4

2 回答 2

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

也从这里下载代码。

于 2011-08-19T10:46:02.700 回答
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
}
于 2011-08-19T10:17:12.293 回答