TheInterestedOne
TheInterestedOne

Reputation: 768

Changing image on UIButton when user presses that button removing previous image

I want to change an image on my UIButton when a user presses on it. The image has transparency effects (it is a .png that shows only an edge). The problem is that when the button is tapped, all works fine (other functions connected to it), but the app overwrites the 2 different images one over the second! When the button is pressed I want to show the second image, and remove the first (that becomes unnecessary). PS: I don't want to use array of images. Here the code for the button

UIButton *overlayButton = [UIButton buttonWithType:UIButtonTypeCustom];
[overlayButton setImage:[UIImage imageNamed:@"image1.png"] forState:UIControlStateNormal];
[overlayButton setFrame:CGRectMake(20, 382, 120, 60)];
[overlayButton addTarget:self action:@selector(scanButtonPressed) forControlEvents:UIControlEventTouchUpInside]; //just graphics
[overlayButton addTarget:self action:@selector(buttonshapeClicked:) forControlEvents:UIControlEventTouchUpInside]; //just to set a variable i++ for my cycle
[overlayButton addTarget:self action:@selector(changeshape:) forControlEvents:UIControlEventTouchUpInside];  //function that changes another shape
[[self view] addSubview:overlayButton];    

my simple cycle

- (void)buttonshapeClicked:(id)sender{
shape++;
if (shape == 4) {
    shape = 1;
        }}     

here the main function that allows to change a primary shape on the screen

 -(void) changeshape:(id)sender {
if (shape==1 && people==2) {
    //bottone forma
    UIButton *overlayButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [overlayButton setImage:[UIImage imageNamed:@"passaquadrato.png"] forState:UIControlStateNormal];
    [overlayButton setFrame:CGRectMake(20, 382, 120, 60)];
    [overlayButton addTarget:self action:@selector(scanButtonPressed) forControlEvents:UIControlEventTouchUpInside];
    [overlayButton addTarget:self action:@selector(buttonshapeClicked:) forControlEvents:UIControlEventTouchUpInside];
    [overlayButton addTarget:self action:@selector(changeshape:) forControlEvents:UIControlEventTouchUpInside];
    [[self view] addSubview:overlayButton];

    //bottone people
    UIButton *overlayButtonp = [UIButton buttonWithType:UIButtonTypeCustom];
    [overlayButtonp setImage:[UIImage imageNamed:@"passatre.png"] forState:UIControlStateNormal];
    [overlayButtonp setFrame:CGRectMake(180, 382, 120, 60)];
    [overlayButtonp addTarget:self action:@selector(scanButtonPressed) forControlEvents:UIControlEventTouchUpInside];
    [[self view] addSubview:overlayButtonp];

    UIImageView *overlayImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"circle2.png"]];
    [overlayImageView setFrame:CGRectMake(20, 88, 280, 280)];
    [[self view] addSubview:overlayImageView];
}


else if (shape==2 && people==2) {
    //bottone forma
    UIButton *overlayButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [overlayButton setImage:[UIImage imageNamed:@"passarettangolo.png"] forState:UIControlStateNormal];
    [overlayButton setFrame:CGRectMake(20, 382, 120, 60)];
    [overlayButton addTarget:self action:@selector(scanButtonPressed) forControlEvents:UIControlEventTouchUpInside];
    [overlayButton addTarget:self action:@selector(buttonshapeClicked:) forControlEvents:UIControlEventTouchUpInside];
    [overlayButton addTarget:self action:@selector(changeshape:) forControlEvents:UIControlEventTouchUpInside];
    [[self view] addSubview:overlayButton];

    //bottone people
    UIButton *overlayButtonp = [UIButton buttonWithType:UIButtonTypeCustom];
    [overlayButtonp setImage:[UIImage imageNamed:@"passatre.png"] forState:UIControlStateNormal];
    [overlayButtonp setFrame:CGRectMake(180, 382, 120, 60)];
    [overlayButtonp addTarget:self action:@selector(scanButtonPressed) forControlEvents:UIControlEventTouchUpInside];
    [[self view] addSubview:overlayButtonp];

    UIImageView *overlayImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"square2.png"]];
    [overlayImageView setFrame:CGRectMake(20, 88, 280, 280)];
    [[self view] addSubview:overlayImageView];
}}

Upvotes: 0

Views: 1028

Answers (1)

Dee
Dee

Reputation: 1897

Try like this:

UIButton *overlayButton = [UIButton buttonWithType:UIButtonTypeCustom];
[overlayButton setImage:[UIImage imageNamed:@"image1.png"] forState:UIControlStateNormal];
[overlayButton setFrame:CGRectMake(20, 382, 120, 60)];
[overlayButton addTarget:self action:@selector(setRightActionToButton:) forControlEvents:UIControlEventTouchUpInside];
[[self view] addSubview:overlayButton];

-(void)setRightActionToButton:(id)sender {
    UIButton *button = (UIButton *)sender;

    if (shape==1 && people==2) {
        [button setImage:[UIImage imageNamed:@"image2.png"] forState:UIControlStateNormal];
        [self scanButtonPressed:button]
    }

    else if (shape==2 && people==2) {
        [button setImage:[UIImage imageNamed:@"image3.png"] forState:UIControlStateNormal];
        [self buttonshapeClicked:button]
    }

    else if (shape==3 && people==2) {
        [button setImage:[UIImage imageNamed:@"image4.png"] forState:UIControlStateNormal];
        [self changeshape:button];
    }
}

Upvotes: 1

Related Questions