点击UIButton时,我想要循环显示三张图像。
我将如何做到这一点?
这是我到目前为止所做的,但它并没有真正起作用。
//the images
NSString* imageNames[] = {"MyFirstImage", "AnotherImage", whatever else};
int currentImageIndex = 0;
和
- (IBAction)change{
UIImage* imageToShow = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource: imageNames[currentImageIndex] ofType:@"png"];
if( currentImageIndex++ == sizeof(imageNames)/sizeof(NSString)) //check to see if you hit the last image
{
currentImageIndex = 0; //start over
}
}
想法?
任何帮助将不胜感激!谢谢!
答案 0 :(得分:1)
Steven建议将UIButton子类化为一个很好的建议。一旦你获得了更多关于Objective C的经验,你应该考虑他的方法,但我可以通过你发布的代码告诉你,你是Objective C的新手,所以你可能需要先学习使用基础的基础类。
您的代码无法正常工作的一个原因是您尝试将C字符串文字传递给pathForResource:,这需要一个NSString对象。 NSStrings是Objective C中的对象,而不是C中的字符指针。您可以使用文字语法构建NSString对象,@“引用前置”。
以下是使用Objective C Foundation类而不是C数据类型实现您尝试编写的算法的代码:
// YourController.h
@interface YourController : UIViewController {
NSArray *imageNames;
NSInteger currentImageIndex;
UIButton *yourButton;
}
@property (nonatomic, retain) NSArray *imageNames;
@property (nonatomic, retain) IBOutlet UIButton *yourButton; // Presumably connected in IB
- (IBAction)change;
@end
// YourController.m
#import "YourController.h"
@implementation YourController
@synthesize imageNames, yourButton;
- (void)dealloc {
self.imageNames = nil;
self.yourButton = nil;
[super dealloc];
}
- (void)viewDidLoad {
self.imageNames = [NSArray arrayWithObjects:@"MyFirstImage", @"AnotherImage", nil];
currentImageIndex = 0;
[super viewDidLoad];
}
- (IBAction)change {
UIImage* imageToShow = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[imageNames objectAtIndex:currentImageIndex] ofType:@"png"];
currentImageIndex++;
if (currentImageIndex >= imageNames.count) {
currentImageIndex = 0;
}
[yourButton setImage:imageToShow forState:UIControlStateNormal];
}
@end
答案 1 :(得分:0)
您需要子类化UIButton并添加一个维护状态的新属性。您还需要具有三个属性来维护三个新状态的图像。然后在你的“drawRect:”方法中,根据你的状态换出标准按钮图像,然后调用[super drawRect:]方法。