2011-07-27 1 views
0

assez nouveau à Objective-C et le développement iOS (en venant de PHP) et j'ai une question relativement simple que je ne peux pas sembler trouver une réponse à:iOS charger une image basée sur l'entrée d'utilisateur

Je suis suit avec un exemple de conception de vue éclatée dans laquelle une page Web est chargée dans la vue détaillée lorsqu'un utilisateur clique sur un élément dans la vue principale. J'ai tout travaillé, mais je voudrais remplacer la vue web par une image. J'ai donc modifié l'application pour charger un UIImage au lieu d'un WebView. Ce que je suis à la recherche est l'équivalent de ce code:

NSString *urlString = [pagesAddress objectAtIndex:indexPath.row]; 
NSURL *url = [NSURL URLWithString:urlString]; 

// these 2 is where I get lost with the images. 
NSURLRequest = *request = [NSURLRequest requestWithURL:url]; 
[detailViewController.webView loadRequest:request]; 

je suis venu avec ceci:

NSString *imageName = [pagesAddress objectAtIndex:indexPath.row]; 
UIImage *myImage = [UIImage imageNamed:imageName]; 

// missing the last 2 calls: one to tell Xcode that it's an image "request" I want and the second to load the actual image (based on it's name that is already in an array) into the ImageView. 

Merci.

PS

J'ai essayé ceci:

NSString *imageName = [pagesAddress objectAtIndex:indexPath .row]; 
[detailViewController.imageView setImage:[UIImage imageNamed:imageName]]; 

Et il montre juste la première image, puis se bloque lorsque je tente de montrer la dernière.

+0

Chargez-vous les images d'une source externe ou sont-elles des données locales sur l'appareil? (Vous avez également besoin d'un UIImageView pour remplacer le WebView, le UIImage est juste une instance de l'image mais pas la vue) –

+0

oui, j'ai eu cette partie, j'ai remplacé la vue web par la vue UIImage.Les images font partie du projet, résidant dans le dossier Supporting files. – kakubei

+0

Quel est le plantage lorsque vous chargez la dernière image? Est-ce un index hors limites pour le tableau? – PeyloW

Répondre

0

En fin de compte, la solution était ces 2 lignes lorsque J'ai modifié le code:

NSString *imageName = [pagesAddress objectAtIndex:indexPath.row]; 
[detailViewController.imageView setImage:[UIImage imageNamed:imageName]]; 

Notez que j'ai dû c changer le setImage pour convertir le NSString à un UIImage ou Xcode se plaindre. Il s'est avéré que ça se brisait parce que dans le tableau où j'avais les noms d'image, j'avais mis 3 images dans une entrée (en gros j'ai oublié les virgules!) Donc c'était hors de portée.

Tim:

Cette ligne m'a donné

UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds]; 

est inutile parce que je l'ai déjà vue créé, il créerait une autre vue que je jamais utilisé. En outre, le remplacer par CGRect semble exagéré si j'ai déjà un espace réservé UIImage non?

En tout cas, cela fonctionne maintenant et je suis très reconnaissant pour toute l'aide. Le développement d'iPad avec Objectve-C est une route très épineuse et je pense que je vais vous embêter plus.

Vive.

-1

Essayez ceci:

UIImage *myImage = [[UIImage alloc] initWithData:[NSData dataWithConentsOfURL:[NSURL URLWithString:urlString]; 
// don't know if you already got the following? 
UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds]; 
[imageView setImage:myImage]; 
[self.view addSubview:imageView]; 

La première ligne est synchrone (= blocage), donc dans la production, vous devriez plutôt utiliser - [NSURLRequest start] pour cela (mais c'est un peu plus compliqué).


Ou utiliser pour vos images locales:

UIImage *myImage = [UIImage imageNamed:imageName]; 
// Now, follow the same steps as in the first code-example, just skip the first line. 
+0

Donc j'utiliserais toujours une URL pour une image? J'ai changé la vue de WebView en UIImageView en pensant que cela donnerait de meilleures performances puisqu'il suffisait de rendre l'image et pas tout l'URL? – kakubei

+0

Oh, c'est vrai, c'est correct. Je pensais que vous essayiez de présenter une image externe (à partir d'une URL). Je vais mettre à jour mon code maintenant :) ... – elslooo

+0

Ce code que vous m'avez donné remplace le contenu de la vue principale (celle qui contient les noms de pages) avec l'image. J'ai vraiment besoin de l'image pour charger dans les détails Voir. Le remplacement de self.view par detailViewController ne fonctionne pas et bloque l'application. Je l'ai eu travailler avec le code ci-dessus, mais il montre seulement la première image et aussi des accidents. – kakubei

-1

Essayez cette (sur iOS 4.0 et versions ultérieures):

// Execute a block of code on a background thread. 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), 
       ^(void) 
{ 
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; 
    UIImage* image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]]; 
    // When IO is done and image created, set it on the main thread. 
    dispatch_async(dispatch_get_main_queue(), 
        ^(void) 
    { 
     imageView.image = image; 
    }); 
    [pool release]; 
}); 
+0

Il veut charger une image locale, pas un externe. – elslooo

Questions connexes