2010-08-01 8 views
1

J'ai un UIImageView *picturel'aide du bouton iPhone

et UIButton *next

et un

- (IBAction)next { 
} 

Je veux changer l'image de la vue, mais seulement si l'image est égale à ... par exemple img1

Mais en utilisant le même bouton je veux aussi pouvoir changer l'image si l'image = img2 mais à une image différente (img3)

Jusqu'à présent, j'ai ce code, mais il me donne des erreurs:

- (IBAction)next { 
    if (picture UIImage = imageNamed:@"img01.jpg") { 
    [picture setImage: [UIImage imageNamed:@"img02.jpg" 
    } 
    if (picture UIImage = imageNamed:@"img02.jpg") { 
    [picture setImage: [UIImage imageNamed:@"img03.jpg" 
} 
} 

Répondre

1

j'ai tout compris maintenant tout ce que je ne faisais oublier de mettre .jpg à la fin du img% i;)

- (IBAction)next { 
    static int index = 0; // <-- here 
    index++; 
    // Set imageCount to as many images as are available 
    int imageCount=16; 
    if (index<=imageCount) { 
     NSString* imageName=[NSString stringWithFormat:@"img%i", index]; 
     [picture setImage: [UIImage imageNamed: imageName]]; 
    } 
} 
+0

Vous ne devriez pas utiliser de variables statiques, sauf si vous avez un besoin pressant. Vous n'avez plus aucun moyen de sortir cette fonction pour obtenir l'index de l'image. – mvds

0
- (IBAction)next { 
    if ([[picture image] isEqual: [UIImage imageNamed:@"img01.jpg"]]) { 

     [picture setImage: [UIImage imageNamed:@"img02.jpg"]]; 

    } else if ([[picture image] isEqual: [UIImage imageNamed:@"img02.jpg"]]) { 

     [picture setImage: [UIImage imageNamed:@"img03.jpg"]]; 
    } 
} 

De plus, c'est une façon assez rudimentaire de changer l'image. Une manière plus élégante serait d'avoir un int global qui avait l'index d'image actuel, ainsi cliquer sur "suivant" augmenterait simplement ce compte. Ensuite, si une image existe avec ce nom, basculer vers elle:

// Déclare index dans header.h

index=0; 

- (IBAction)next { 
    index++; 
    // Set imageCount to as many images as are available 
    int imageCount=2; 
    if (index<=imageCount) { 
     NSString* imageName=[NSString stringWithFormat:@"img%02i", index]; 
     [picture setImage: [UIImage imageNamed: imageName]]; 
    } 
} 
+0

IT quitte juste l'application ?? – Will

+0

S'il vous plaît pourriez-vous aider à dire que UIImageView peut ne pas répondre à UIImage – Will

+0

EDITED- désolé j'ai oublié de terminer ")" dans l'instruction if. De plus, mon second exemple pourrait être plus utile pour utiliser plus de 3 images. – pop850

0

Sous UIImageView et ajouter une propriété enum dans l'en-tête:

typedef enum _PictureType { 
    PictureTypeFirstImage = 0, 
    PictureTypeSecondImage, 
    PictureTypeThirdImage, 
    PictureTypes 
} PictureType; 

@interface MyImageView : UIImageView { 
    PictureType type; 
} 

@property (readwrite) PictureType type; 

Dans la mise en œuvre:

@synthesize type; 

Lors de l'initialisation de votre picture:

[picture setImage:[UIImage imageNamed:@"img01.jpg"]]; 
picture.type = PictureTypeFirstImage; 

Dans votre méthode d'action:

- (IBAction) next { 
    switch (picture.type) { 
     case (PictureTypeFirstImage): { 
      [picture setImage:[UIImage imageNamed:@"img02.jpg"]]; 
      picture.type = PictureTypeSecondImage; 
      break; 
     } 
     case (PictureTypeSecondImage): { 
      [picture setImage:[UIImage imageNamed:@"img03.jpg"]]; 
      picture.type = PictureTypeThirdImage; 
      break; 
     } 
     default: 
      break; 
    } 
} 
+0

erreur: aucun type ou classe de stockage ne peut être spécifié ici avant la 'implémentation' /Users/Will/Desktop/SUC/Classes/Pictures.m:15:0/ Users/Will/Desktop/SUC/Classes/Pictures. m: 15: erreur: identifiant attendu ou '(' avant 'synthétiser' /Utilisateurs /Will/Desktop/SUC/Classes/Pictures.m:41:0/ Utilisateurs/Will/Desktop/SUC/Classes/Images. m: 41: erreur fatale: déclaration de la méthode pas dans le contexte @interface – Will

+0

Je reçois ces erreurs s'il vous plaît aider erreur: aucun type ou classe de stockage peut être spécifié ici avant 'implémentation' erreur: identifiant attendu ou '(' avant 'synthétiser – Will

+0

Lorsque vous sous-classe 'UIImageView', la sous-classe a besoin de son propre en-tête séparé et fichiers d'implémentation. –

1
- (IBAction)next { 
    picture.tag++; 
    [picture setImage:[UIImage imageNamed: 
      [NSString stringWithFormat:@"img%02d.jpg",1+(picture.tag%2)] 
    ]]; 
} 

devrait être la solution la plus simple.

éditer à nouveau, va à img02.jpg, sur le deuxième clic de nouveau à img01.jpg encore. Augmenter la 2 pour permettre img03.jpg etc.

+0

Wow, j'ai vraiment dépassé ma réponse ... – pop850

Questions connexes