Я пытаюсь создать подкласс UIImageView, чтобы создать экземпляр подкласса, который воспроизводит разные анимации, в зависимости от переменной, которую я отправляю. Мой исходный код (до создания подкласса) для воспроизведения определенной 2-кадровой анимации выглядел следующим образом. 'bubbleAnimationTemp' - это просто объект UIImageView, который я объявил в заголовке:
UIImage *animImage1 = [UIImage imageNamed:@"HappyAnim1.png"];
UIImage *animImage2 = [UIImage imageNamed:@"HappyAnim2.png"];
NSArray *images = [[NSArray alloc] initWithObjects:animImage1, animImage2, nil];
bubbleAnimationTemp.animationImages = images;
[images release];
bubbleAnimationTemp.animationDuration = 0.5;
bubbleAnimationTemp.animationRepeatCount = 5;
[bubbleAnimationTemp startAnimating];
Итак, я попытался создать подкласс UIImageView следующим образом:
#import <UIKit/UIKit.h>
#import "Interaction.h"
@interface BubbleAnimation : UIImageView {
UIImage *emotAnim1;
UIImage *emotAnim2;
}
@property (nonatomic, retain) UIImage *emotAnim1;
@property (nonatomic, retain) UIImage *emotAnim2;
- (BubbleAnimation *)initWithMood:(NSString *)mood;
@ конец
#import "BubbleAnimation.h"
@implementation BubbleAnimation
@synthesize emotAnim1;
@synthesize emotAnim2;
- (BubbleAnimation *)initWithMood:(NSString *)mood {
if (self = [super init]) {
NSLog(@"Mood: %@", mood);
if ([mood isEqualToString:kGood]) {
emotAnim1 = [[UIImage alloc] initWithContentsOfFile:([[NSBundle mainBundle] pathForResource:@"HappyAnim1" ofType:@"png"])];
emotAnim2 = [[UIImage alloc] initWithContentsOfFile:([[NSBundle mainBundle] pathForResource:@"HappyAnim2" ofType:@"png"])];
//emotAnim1 = [UIImage imageNamed:@"HappyAnim1.png"];
//emotAnim2 = [UIImage imageNamed:@"HappyAnim2.png"];
}
else if ([mood isEqualToString:kNeutral]) {
emotAnim1 = [UIImage imageNamed:@"NeutralAnim1.png"];
emotAnim2 = [UIImage imageNamed:@"NeutralAnim2.png"];
}
else {
emotAnim1 = [UIImage imageNamed:@"SadAnim1.png"];
emotAnim2 = [UIImage imageNamed:@"SadAnim2.png"];
}
NSArray *images = [[NSArray alloc] initWithObjects:emotAnim1, emotAnim2, nil];
self.animationImages = images;
[images release];
}
return self;
}
Как видите, я попробовал два разных подхода к созданию UIImages для добавления в UIImageView. Но проблема в том, что при воспроизведении анимации ничего не появляется.
Я также попытался просто скопировать код из первого метода в этот подкласс, поэтому процесс по сути такой же, но все равно ничего не появляется.
Я проверил документацию на предмет замечаний о создании подкласса UIImageView, но, похоже, я ничего не пропустил. Я удостоверился, что изменил объект 'UIImageView', который я поместил в Интерфейсном Разработчике, в объект 'BubbleAnimation', так что это не так.
Любая помощь относительно того, почему ничего не появляется, будет очень цениться. Спасибо как всегда!
Майкл
**************** ***************** UPDATE 1020 *
Что ж, благодаря совету Калле ниже, это все исправлено. Тем не менее, сейчас повторяется похожая проблема, и мне интересно, что я делаю не так.
По сути, я хочу иметь маленькое сердце, которое появляется в пузыре мысли, рядом с анимацией. Я добавил UIImage в класс BubbleAnimation следующим образом:
@interface BubbleAnimation : UIImageView {
UIImage *emotAnim1;
UIImage *emotAnim2;
UIImage *heart;
}
@property (nonatomic, retain) UIImage *heart;
- (void)setMood:(NSString *)mood;
@end
И синтезируйте его в реализации, как обычно. Затем я установил для сердца правильный цвет в методе setMood:
- (void)setMood:(NSString *)mood {
if ([mood isEqualToString:kGood]) {
emotAnim1 = [UIImage imageNamed:@"Good1.png"];
emotAnim2 = [UIImage imageNamed:@"Good2.png"];
self.heart = [UIImage imageNamed:@"HeartRed.png"];
}
else if ...
В IB я добавил скрытый объект UIImageView и связал его с UIImageView IBOutlet в моем ViewController с именем bubbleHeart. Когда появляется пузырь мысли, я использую следующий код для отображения анимации и сердца:
[bubbleAnimation setMood:charachter.mood];
self.bubbleHeart.image = bubbleAnimation.heart;
bubbleAnimation.animationDuration = kAnimationDuration;
bubbleAnimation.animationRepeatCount = kAnimationRepeatCount;
[bubbleAnimation startAnimating];
bubbleHeart.hidden = FALSE;
Проблема в том, что появляется анимация, а маленькое сердце - нет. Я пробовал разные подходы - я создал UIImageView в классе BubbleAnimation вместо использования UIImage и попытался инициализировать его различными способами, но без радости. Если я вызываю что-то вроде self.bubbleHeart = [[UIImageView alloc] initWithImage:bubbleAnimation.heart];
, то, вероятно, я переинициализирую переменную, чтобы она не работала. Любая идея, почему это не появляется?
Большое спасибо!
Майкл