我有一个动画角色与xib中的其他传统控件共存。 一切顺利。没问题。动画是通过UIImageView图像翻转完成的。由计时器触发的动画引擎(状态机)运行该节目。角色使用六个UIImageViews来渲染需要动画的角色的不同部分。
现在我通过添加更多的UIViewControllers(和他们的xib)来看看应用程序变得更复杂的可能性。正如你可能已经猜到的那样,我的角色必须存在于前一个滑动的任何xib上。
实施此方法的最佳方法是什么?我想我可以复制粘贴UIImageView并实例化一个新的动画引擎(或传递指针)到每个新的xib。
我需要的很多方法是新的xib只覆盖先前xib的2/3而且会这样做,但我不确定这是否有效。不确定事件以及它们如何使用两个重叠的xib(如果可能的话)。
在我进行实验的过程中,我想我会问,看看之前来过这里的人是否有一两个有趣的方法可以分享。
答案 0 :(得分:2)
你的问题似乎是关于所有权而不是关于动画。尝试将字符隔离到自己的xib中(例如 Character.xib )并创建 CharacterLoader 类。 CharacterLoader 类的属性为 character ,如下所示:
<强> 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。另一种选择是以编程方式创建 Character 和所有其他共享内容,但这可能不适合您,因为您有意通过使用nib来接近它。
答案 1 :(得分:1)
为了关闭循环,这就是我最终做的事情:
我用nib文件创建了一个UIViewController子类。称之为“AnimatedCharacter”。
“AnimatedCharacter.xib”由创建角色所需的所有元素组成。它有一系列控件连接到IBOutlets和由“AnimatedCharacter.m”驱动的IBActions。在我的例子中,“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”中的各种成员函数控制我认为合适的角色。这有效地作为笔尖内的笔尖。不是单独的线程,但两个笔尖都按预期履行职责,接收输入并运行各自的节目。
我对我选择做的好/坏/丑陋方面的评论感兴趣。