Приложение для iPhone - Flow Cover (обложка-поток) отображает изображения - PullRequest
0 голосов
/ 19 августа 2011

в iPhone App у меня есть встроенная крышка потока

Я загружаю изображения в поток с веб-сервера

до момента загрузки изображений я передаю счетчик изображений = 0 и uiimage = null

здесь я не загружаю изображения такими методами, как viewdidload или viewwillAppear. На самом деле я создал отдельную тему для загрузки и анализа, поэтому загрузка этого представления не заняла бы времени

при загрузке завершается, и, если коснуться экрана, отображаются все изображения, но я хочу, чтобы при загрузке отображались изображения

как программно сделать изображения видимыми без какого-либо сенсорного эффекта?

Пожалуйста, помогите и предложите

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Использовать ASIHTTP Загрузить Api из http://allseeing -i.com / ASIHTTPRequest /

Затем, интегрировать в проект

В следующем коде поместить в .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

Также загрузите код отсюда.

1 голос
/ 19 августа 2011

Это может помочь вам распознать конец загрузки. Поскольку загрузка 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
}
...