2010-03-12 5 views
1

Simplement, j'ai placé une image avec l'Interface Builder dans un UIView. Maintenant, je veux exécuter une méthode/fonction lorsque je touche cette image, par exemple lorsqu'une autre image doit être chargée.Xcode: Comment changer l'image en touchant une image (même position)?

Mon code:

- (void)touchesended:(NSSet*) touches withEvent:(UIEvent *)event 
{ 
    // UITouch *touch = [touch anyObject]; 
    bild_1_1.image = [UIImage imageNamed:@"t_1_4.jpg"]; 
} 

Répondre

2

Vous avez besoin de gérer un événement tactile depuis votre UIView. Pour ce faire, vous devez créer la sous-classe de UIView et ajoutez votre réalisation de touchesBegan: withEvent: méthode, par exemple ici plus simple:

// TouchSimpleView.h 
@interface TouchSimpleView : UIImageView { 
    id delegate; 
} 
@property(retain) id delegate; 
@end 

@interface NSObject(TouchSimpleView) 
-(void)didTouchView:(UIView *)aView; 
@end 

// TouchSimpleView.m 
#import "TouchSimpleView.h" 
@implementation TouchSimpleView 
@synthesize delegate; 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touchesBegan!!! "); 
    if (delegate != nil && [delegate respondsToSelector:@selector(didTouchView:)]) { 
     [delegate didTouchView:self]; 
    } 
    [super touchesBegan:touches withEvent:event]; 
} 
@end 

Ensuite, vous pouvez utiliser des vues de cette classe lorsque vous souhaitez traiter des touches, par exemple :

- (void)applicationDidFinishLaunching:(UIApplication *)application {  
    [window makeKeyAndVisible]; 
    touchView = [[TouchSimpleView alloc] initWithFrame:CGRectMake(50, 50, 200, 300)]; 
    touchView.delegate = self; 
    [window addSubview:touchView]; 

    imageView =[[UIImageView alloc] initWithFrame:touchView.frame]; 
    imageView.image = [UIImage imageNamed:@"image1.png"]; 
    [touchView addSubview:imageView]; 
} 

-(void)didTouchView:(UIView *)aView{ 
    NSLog(@"view touched, changing image"); 
    imageView.image = [UIImage imageNamed:@"image2.png"]; 
} 
+0

Dois-je déclarer touchView ou dois-je coller tout sauf [window ...]; dans la fonction (vide) applicationDidFin ....? –

+0

Dans le morceau de code ci-dessus, il est censé TouchView et imageView a été déclarée dans le fichier h: //MyAppDelegate.h @interface MyAppDelegate: NSObject { UIWindow * fenêtre; UIImageView * imageView; TouchSimpleView * touchView; // ... Notez que vous pouvez utiliser des objets TouchSimpleView n'importe où, et pas seulement dans le délégué de l'application. Notez également que vous pouvez créer d'autres méthodes de délégué, par exemple envoyer aussi des cordons de contact, ou gérer non seulement touchBegan ... mais aussi touchMoved ou touchCanceled events. – Vladimir

2

Qu'est-ce que vous voulez peut être facilement fait en plaçant UIButton au lieu de UIImage et de changer son image d'arrière-plan en utilisant la méthode setBackgroundImage: forState: au gestionnaire d'événements TouchUpInside.

+0

Merci pour la 1ère réponse! Mais un bouton ne fonctionne pas bien pour mes étapes planifiées. –

1

une autre solution:

dans le fichier .h

place un IBOutlet UIImagView * imageButton;

et

-(IBAction)doSomething:(id)sender; 

dans le fichier .m

-(IBAction)dosomething:(id)sender { 

    // your code 

    [imageButton setImage:[UIImage imageNamed:@""t_1_4.jpg"} forState:UIControlStateNormal]; 
} 

œuvres à mon code très bien

0

il travaille avec moi sans créer de sous-classe, dans le fichier .h vous ajoutez UIImageView

#import <UIKit/UIKit.h> 
@interface YourClassName : UIViewController{ 
    IBOutlet UIImageView *wallpaper; 
} 
@property (nonatomic, retain) IBOutlet UIImageView *wallpaper; 
@end 

puis en .m vous pouvez utiliser votre méthode

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [wallpaper setImage:[UIImage imageNamed: @"image.png"]]; 
} 
Questions connexes