如何处理跨多个视图控制器的公共xib或控件



我有一个动画角色与xib中的其他常规控件共存。一切正常。没有问题。动画是通过UIImageView图像翻转完成的。由计时器触发的动画引擎(状态机)运行该节目。角色使用六个UIImageViews来渲染需要动画的角色的不同部分。

现在我正在考虑通过添加更多的uiviewcontroller(和它们的xib)来增加应用程序变得更复杂的可能性。你可能已经猜到了,我的字符必须存在于滑到前一个字符之上的任何xib中。

实现这一点的最佳方法是什么?我想我可以复制粘贴UIImageView的和实例化一个新的动画引擎(或传递一个指针)到每个新的xib。

我需要的很多方式是一个新的xib只覆盖前xib的2/3,这将做到这一点,但我不确定这是否有效。不确定事件以及它们如何与两个重叠的xib一起工作(如果可能的话)。

在我做实验的时候,我想我应该问一下,看看有没有人以前在这里有过有趣的方法可以分享。

你的问题似乎是关于所有权,而不是关于动画。尝试将字符隔离到它自己的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;
 }
 ...

如果你发现自己做了很多这样的加载器类,你可以把它们卷成一个类,它的作用基本上是像这样以编程方式加载nib。另一种替代方法是通过编程方式创建字符和所有其他共享内容,但这可能不适合您,因为您有意使用笔尖来接近它。

为了结束循环,我最后这样做了:

我创建了一个带有nib文件的UIViewController子类。命名为"AnimatedCharacter"

" AnimatedCharacter。"Xib"包含了创造角色所需的所有元素。它有一系列的控件连接到iboutlet和ibaction,这些控件由"AnimatedCharacter.m"驱动。在我的例子中是"AnimatedCharacter"。m"创建一个ntimer,它定期启动状态机来决定如何处理字符。它还通过标准手段实现音频播放。

除此之外,这些文件/代码没有什么特别的。换句话说,我没有做任何不寻常的事情来准备它们插入到另一个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"中的各种成员函数来控制我认为合适的字符。这有效地作为笔尖中的笔尖工作。不是单独的线程,但两个nib都按预期履行职责,接收输入并运行各自的节目。

我对我选择做的事情的好/坏/丑陋方面的评论很感兴趣。

最新更新