У меня есть a UIImageView *picture
и a UIButton *next
и
- (IBAction)next {
}
Я хочу изменить изображение на представлении, но только если изображение равняется..., например, img1
Но с помощью той же кнопки я хочу также смочь изменить изображение если изображение = img2, но к другому изображению (img3)
До сих пор у меня есть этот код, но он дает мне ошибки:
- (IBAction)next {
if (picture UIImage = imageNamed:@"img01.jpg") {
[picture setImage: [UIImage imageNamed:@"img02.jpg"
}
if (picture UIImage = imageNamed:@"img02.jpg") {
[picture setImage: [UIImage imageNamed:@"img03.jpg"
}
}
Я понял это сейчас, все, что я сделал, это забыл поставить .jpg в конец img% i;)
- (IBAction)next {
static int index = 0; // <-- here
index++;
// Set imageCount to as many images as are available
int imageCount=16;
if (index<=imageCount) {
NSString* imageName=[NSString stringWithFormat:@"img%i", index];
[picture setImage: [UIImage imageNamed: imageName]];
}
}
- (IBAction)next {
picture.tag++;
[picture setImage:[UIImage imageNamed:
[NSString stringWithFormat:@"img%02d.jpg",1+(picture.tag%2)]
]];
}
должно быть самым простым решением.
редактировать при первом щелчке мыши переходит к img02.jpg
, при втором щелчке снова возвращается к img01.jpg
. Увеличьте 2
, чтобы учесть img03.jpg
и т. Д.
Подкласс UIImageView
и добавьте свойство enum
в заголовок:
typedef enum _PictureType {
PictureTypeFirstImage = 0,
PictureTypeSecondImage,
PictureTypeThirdImage,
PictureTypes
} PictureType;
@interface MyImageView : UIImageView {
PictureType type;
}
@property (readwrite) PictureType type;
В реализации:
@synthesize type;
При инициализации изображения
:
[picture setImage:[UIImage imageNamed:@"img01.jpg"]];
picture.type = PictureTypeFirstImage;
В методе действия:
- (IBAction) next {
switch (picture.type) {
case (PictureTypeFirstImage): {
[picture setImage:[UIImage imageNamed:@"img02.jpg"]];
picture.type = PictureTypeSecondImage;
break;
}
case (PictureTypeSecondImage): {
[picture setImage:[UIImage imageNamed:@"img03.jpg"]];
picture.type = PictureTypeThirdImage;
break;
}
default:
break;
}
}
- (IBAction)next {
if ([[picture image] isEqual: [UIImage imageNamed:@"img01.jpg"]]) {
[picture setImage: [UIImage imageNamed:@"img02.jpg"]];
} else if ([[picture image] isEqual: [UIImage imageNamed:@"img02.jpg"]]) {
[picture setImage: [UIImage imageNamed:@"img03.jpg"]];
}
}
Кроме того, это довольно примитивный способ изменения изображения. Более элегантным способом было бы иметь глобальный int
, который имел бы индекс текущего изображения, так что нажатие кнопки "next" просто увеличивало бы этот счетчик. Затем, если существует изображение с таким именем, переключиться на него:
// Объявить индекс в Header.h
index=0;
- (IBAction)next {
index++;
// Set imageCount to as many images as are available
int imageCount=2;
if (index<=imageCount) {
NSString* imageName=[NSString stringWithFormat:@"img%02i", index];
[picture setImage: [UIImage imageNamed: imageName]];
}
}