2011-04-11 83 views
1

我有一個動畫人物與xib中的其他常規控件共存。 一切正常。那裏沒有問題。動畫是通過UIImageView圖像翻轉完成的。由定時器觸發的動畫引擎(狀態機)運行該節目。該角色使用六個UIImageView來渲染需要動畫的角色的不同部分。如何通過多個視圖控制器訪問常見的xib或控件?

現在我正在研究通過添加更多的UIViewControllers(以及它們的xib)來讓應用變得更加複雜的可能性。正如你可能已經猜到的那樣,我的角色必須存在於前一個幻燈片上的任何xib中。

什麼可能是實現這個最好的方法?我想我可以複製粘貼UIImageView並實例化一個新的動畫引擎(或傳遞一個指針)到每個新的xib。

我需要的很多方法是讓一個新的xib只覆蓋之前xib的2/3,這樣做,但我不確定這是否有效。不確定事件以及他們如何處理兩個重疊的xib(如果甚至可能的話)。

雖然我在實驗中,我想我會問,看看之前在這裏的人是否可能有一個有趣的方法或兩個分享。

+0

順便提一下,您的問題標題可能會帶來一些誤導,因爲您在尋求關於XIB/View Controller構造的幫助,而不是動畫。 – makdad 2011-04-11 03:46:23

+0

感謝您的評論。改變了標題。那個更好嗎? – 2011-04-11 17:38:03

回答

1

在封閉循環的利益,這就是我最終行動做:

我創建了一個UIViewController子類用筆尖文件。稱它爲「AnimatedCharacter」。

「AnimatedCharacter.xib」由創建角色所需的所有元素組成。它有一系列連接到由「AnimatedCharacter.m」驅動的IBOutlets和IBAction的控件。在我的例子中,「AnimatedCharacter.m」創建一個NSTimer,它定期觸發狀態機來決定如何處理角色。它還通過標準方式實現音頻回放。

除此之外,這些文件/代碼沒有什麼特別之處。換句話說,我沒有做任何不尋常的事情來準備插入另一個UIViewController。

在主視圖控制器中。.h文件:

#import "AnimatedCharacter.h" 

... 

AnimatedCharacter *character; 

... 

@property (nonatomic, retain) AnimatedCharacter *character; 

然後,在主視圖控制器的.m文件:

@synthesize character; 

... 

- (void)viewDidLoad 
{ 
character = [[AnimatedCharacter alloc] init]; 
character.view.frame = CGRectMake(54.0, 0.0, 150.0, 150.0); 
[self.view addSubview:character.view]; 

... 

隨着在地方,我現在可以做的事情一樣:

-(void)FadeOut:(SEL)selector 
{ 
[UIView beginAnimations:@"resize" context:NULL]; 

    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector:selector]; 

    character.view.frame = CGRectMake(0.0, 0.0, 50.0, 50.0); 

[UIView commitAnimations]; 
} 

而且,一般控制通過「AnimatedCharacter.m」中的各種成員函數,我認爲這個角色是合適的。這是在筆尖內作爲筆尖的有效工作。不是單獨的線程,但兩個筆尖按預期履行職責,接收輸入並運行各自的節目。

我會對我選擇做的好/壞/醜的方面感興趣。

2

你的問題似乎是關於所有權,而不是關於動畫。嘗試將字符分隔到其自己的xib中(例如,Character.xib),並創建一個CharacterLoader類。該CharacterLoader類將有字符的屬性,類似於:

CharacterLoader.h

@interface CharacterLoader : NSObject { 
} 

@property(nonatomic, retain) IBOutlet Character *character; 

+ (Character *)loadCharacter; 

@end 

CharacterLoader.m

... 

+ (Character *)loadCharacter { 
    CharacterLoader *loader = [[CharacterLoader alloc] init]; 
    [[NSBundle mainBundle] loadNibNamed:@"Character" owner:loader options:nil]; 
    Character *character = [loader.character autorelease]; 
    [loader release]; 
    return character; 
} 

... 

如果你發現自己製作很多這些裝載機類,你可以把它們推到單一的位置e類的作用是基本像這樣以編程方式加載nib。另一種方法是以編程方式創建字符和所有其他共享內容,但這可能不適合您,因爲您有意使用nib來接近它。

+0

有趣。沒有想到這一點。我實際上是在玩你提出的第二個想法,即以編程方式創造角色。以這種方式創建和管理一大堆UIImageView並不是那麼困難。所以,是的,如果我走這條路線,我並不需要單獨的xib,這可能是個好主意。 – 2011-04-11 17:23:27

相關問題