2010-10-29 5 views
0

J'ai une vue avec un UIImageView et un curseur. Slider Min 1 Max 10. Lorsque le curseur est déplacé, UIImageView doit afficher une image différente. Slider is 1 test1.png va afficher, slider est 2 test2.png va afficher, slider est 3 test3.png affichera etc ...Modification d'une image UIImageView avec un curseur

Dans Interface Builder, j'ai connecté le curseur IBOutlet au curseur Horizontal, IBOutlet image to Image View, & IBAction changeImage au curseur horizontal "Valeur modifiée"

J'ai glissé le curseur vers int. Placé une instruction NSLog dans IBAction changeImage pour s'assurer que la méthode est appelée, c'est. Je ne reçois aucun message d'erreur lors de la construction. Cependant, quand je construis & Exécuter et déplacer le curseur dans l'image du simulateur dans UIImageView ne change pas. Le problème doit être "logique" J'ai frappé un mur et ne peux pas le comprendre.

#import <UIKit/UIKit.h> 

@interface SliderViewController : UIViewController { 

    IBOutlet UISlider *slider; 
    IBOutlet UIImageView *image; 

} 

@property (nonatomic, retain) IBOutlet UISlider *slider; 

@property (nonatomic, retain) IBOutlet UIImageView *image; 

- (IBAction)changeImage; 

@end 



#import "SliderViewController.h" 

@implementation SliderViewController 


@synthesize slider; 
@synthesize image; 


- (IBAction)changeImage { 

    NSLog(@"changeImage method being called!!!!"); 

    int intSlider = (int)(slider.value); 


    if (intSlider == 0) { 


       image.image = [UIImage imageNamed:@"ash1.png"]; 
    } 

    if (intSlider == 1) { 


     image.image = [UIImage imageNamed:@"ash2.png"]; 
    } 

    if (intSlider == 2) { 


     image.image = [UIImage imageNamed:@"ash3.png"]; 
    } 

    if (intSlider == 3) { 


     image.image = [UIImage imageNamed:@"ash4.png"]; 
    } 

    if (intSlider == 4) { 


     image.image = [UIImage imageNamed:@"ash5.png"]; 
    } 

    if (intSlider == 5) { 


     image.image = [UIImage imageNamed:@"ash6.png"]; 
    } 

    if (intSlider == 6) { 


     image.image = [UIImage imageNamed:@"ash7.png"]; 
    } 

    if (intSlider == 7) { 


     image.image = [UIImage imageNamed:@"ash8.png"]; 
    } 

    if (intSlider == 8) { 


     image.image = [UIImage imageNamed:@"ash9.png"]; 
    } 

    if (intSlider == 9) { 


     image.image = [UIImage imageNamed:@"ash10.png"]; 
    } 

    if (intSlider == 10) { 


     image.image = [UIImage imageNamed:@"ash11.png"]; 
    } 

} 

Répondre

0

Selon les forums une méthode serait d'essayer d'appeler setNeedsDisplay pour rafraîchir la vue:

myApp = (MyApp *)[[UIApplication sharedApplication] delegate]; 
[myApp.statView setNeedsDisplay]; 

Je suis sûr que vous pourriez appeler cela sur « moi » de votre point de vue.

[self.view setNeedsDisplay]; 

Selon this post l'appel doit être dans le thread principal de l'application aussi bien. Je ne sais pas si cela va marcher, mais ça vaut le coup d'essayer.

1

Assurez-vous que les noms d'image sont exactement corrects et que vous les avez réellement ajoutés au projet (pas seulement les copiés à l'aide du Finder). Par ailleurs, une instruction switch-case serait meilleure qu'une série d'instructions if-then ici.

Une autre chose mineure est que le cas if (intSlider == 0) ne se produira jamais puisque vous définissez le minimum à 1.

Questions connexes