Pergunta

My general question is how do you have an object with an image array:

#import <Foundation/Foundation.h>

@interface Object: NSObject {
    UIImage *image[imageNumber];
}

And then take these images and apply them to a button in a different class, starting with imageArray[0] and every few seconds changing it to imageArray[1], etc, but stopping the loop at the last image.


What I specifically did was create a Plant object:

#import <Foundation/Foundation.h>

@interface Plant : NSObject {

    UIImage *plantImage[3];
    int imageNumber; //to specify which image to display, increments with timer
    NSTimer *plantImageTimer;
}

and declared then made a few methods like

-(void)addPlantImages:(UIImage *) firstImage withPlantImage2:(UIImage *) secondImage withPlantImage3:(UIImage *) thirdImage{

    plantImage[0] = firstImage;
    plantImage[1] = secondImage;
    plantImage[2] = thirdImage;

}

//this makes the Plant into a button 
-(void)createPlantButtonForPlant:(Plant *) plantType forView:(UIView *) view withButtonRect:(CGRect) buttonRect{

    imageNumber=0;
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame = buttonRect;
    button.hidden = NO;
    [view addSubview:button];
    [plantType growPlant:button]; //explained in code below

}

And from here I don't know what to do anymore. I tried using an NSTimer, but you can't put parameters into the selector, so I can't specify which button (or Plant) I want to cycle images through.


Extra tidbits of code in Plant that I have (which do not work); I'm using NSTimer userinfo incorrectly, but I don't understand how to use it, to be honest.

-(void)growPlant:(UIButton *) button{

    plantImageTimer = [NSTimer scheduledTimerWithTimeInterval:2 target:self     selector:@selector(changePlantImage:) userInfo:button repeats:YES];
}

-(void)changePlantImage: (UIButton *) plantButton{

    if(imageNumber == 3){
    [plantImageTimer invalidate];
    } else {

    [plantButton setImage:plantImage[imageNumber] forState:UIControlStateNormal];

    imageNumber++;
    }
}

I imported Plant into my view controller (called PracticeViewController) and tried to make it so that when I clicked a button, a Plant button popped up and cycled through the images.

(void)buttonAction{

    theButton.hidden = YES; //I did make this button, just didn't add the code here. Declared in header.

    CGRect imageViewRect = CGRectMake(100, 100, 100, 100);
    Plant *testPlant = [Plant new];
    [testPlant addPlantImages:[UIImage imageNamed:@"plant2.png"] withPlantImage2:[UIImage imageNamed:@"plant2.png"] withPlantImage3:[UIImage imageNamed:@"plant2.png"];
    [testPlant createButtonForPlant:testPlant forView:self.view withButtonRect:imageViewRect];
}

If you need more code or other information, just comment below and I will reply asap.

Foi útil?

Solução

Now that I've done more programming, I realize how complicated I made this code lol. Anyway, all I would have had to do was add

    [button addTarget:self action:@selector(changePlantImage) forControlEvents:UIControlEventTouchUpInside];

after making the button instance. This would then scroll through whichever images the plant had in its array.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top