我想要繼承UIImageView以創建一個實例,它可以播放不同的動畫,具體取決於我發送的變量。我最初的代碼(在繼承之前)播放特定的2幀動畫看起來像這樣。 'bubbleAnimationTemp' 只是一個UIImageView對象我的頭部聲明:Subclassing 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;
@end
#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;
}
正如你所看到的,我嘗試了兩種不同的方法來創建UIImage以添加到UIImageView。但是我遇到的問題是動畫播放時什麼也沒有顯示出來。
我也試着簡單地將代碼從第一個方法複製到這個子類中,所以這個過程本質上是一樣的,但仍然沒有出現。
我已經檢查了UIImageView的子類注意事項的文檔,但似乎沒有任何東西我失蹤。我已經確保將放置在Interface Builder中的'UIImageView'對象更改爲'BubbleAnimation'對象,所以不是這樣。
任何幫助,爲什麼什麼都不顯示將非常感激。一如既往地感謝!
邁克爾
**************** UPDATE ****************
好了,感謝卡勒的建議如下,這一切都是固定的。但是,現在又出現了類似的問題,我想知道我做錯了什麼。
基本上,我想有一個出現在思想泡泡中的小心臟,與動畫一起。我添加了一個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;
的問題是,出現的動畫,但小心臟沒有。我嘗試了各種方法 - 我在BubbleAnimation類中創建了UIImageView,而不是使用UIImage,並試圖用各種不同的方式初始化它,但沒有喜悅。如果我打電話像self.bubbleHeart = [[UIImageView alloc] initWithImage:bubbleAnimation.heart];
那麼大概我正在重新初始化變量,以至於不起作用。任何想法爲什麼它不出現?
非常感謝!
邁克爾
順便說一句,這是我我打電話的動畫播放(抱歉格式化!): bubbleAnimation = [[BubbleAnimation alloc] initWithMood:charcter.mood]; \t bubbleAnimation.animationDuration = 0.5; \t bubbleAnimation.animationRepeatCount = 5; \t [bubbleAnimation startAnimating]; – Smikey 2010-07-05 15:12:06
括號,但:您可以編輯您的問題(這是首選),以獲得漂亮的格式等。 ;) – Kalle 2010-07-06 09:49:12