在时间间隔内循环通过对象内的图像数组(Objective-C)

时间:2014-03-22 22:09:33

标签: objective-c arrays uibutton uiimage nstimer

我的一般问题是你如何拥有一个带有图像数组的对象:

#import <Foundation/Foundation.h>

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

然后拍摄这些图像并将它们应用到不同类中的按钮,从imageArray [0]开始,每隔几秒将其更改为imageArray [1]等,但停止循环在最后一张图片。


我特别做的是创建一个Plant对象:

#import <Foundation/Foundation.h>

@interface Plant : NSObject {

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

并宣布然后做了几个方法,如

-(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

}

从这里开始,我不知道该怎么做了。 我尝试使用NSTimer,但是您无法将参数放入选择器,因此我无法指定我想要循环图像的按钮(或工厂)。


我所拥有的植物中的额外花絮(不起作用);我错误地使用了NSTimer userinfo,但说实话,我不明白如何使用它。

-(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++;
    }
}

我将Plant导入我的视图控制器(称为PracticeViewController)并试图使其成为当我单击一个按钮时,弹出一个Plant按钮并循环显示图像。

(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];
}

如果您需要更多代码或其他信息,请在下方发表评论,我会尽快回复。

1 个答案:

答案 0 :(得分:0)

既然我已经完成了更多编程,我意识到我制作这段代码有多复杂了。无论如何,我所要做的就是添加

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

制作按钮实例后。然后,这将滚动植物在其阵列中的任何图像。