2010-03-23 4 views
0

У меня есть три изображения, которые я хочу прокрутить, щелкнув по UIButton.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 
} 
} 

Идеи?

Любая помощь будет принята с благодарностью! Благодаря!

ответ

1

Предложение Стивена подкласса UIButton является хорошим. После того, как вы получите больше опыта с Objective C, вы должны рассмотреть его подход, но я могу сказать по коду, который вы опубликовали, что вы новичок в Objective C, поэтому вам может потребоваться сначала изучить базовые классы Foundation ,

Одна из причин, по которой ваш код не работает, заключается в том, что вы пытаетесь передать строковые литералы C в pathForResource :, для чего требуется объект NSString. NSStrings являются объектами Objective C, а не указателями символов, так как они находятся в C. Вы можете построить объект NSString с использованием литерала синтаксиса @ "quotes-with-an-at-in-front".

Вот код, который реализует алгоритм вы пытались написать, используя 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 
+0

Спасибо! Это сработало чудесно. – dot

0

Вы захотите подкласса UIButton и добавьте новое свойство, которое поддерживает состояние. Вы также захотите иметь три свойства для сохранения изображений трех новых состояний. Затем в вашем методе «drawRect:» замените стандартные изображения кнопок на основе вашего состояния, а затем вызовите метод [super drawRect:].

+0

, что кажется очень сложным способом решения этой проблемы. это единственный способ? – dot

Смежные вопросы