В интересах закрытия цикла, это то, что я закончил:
Я создал подкласс UIViewController с файлом пера. Называется "AnimatedCharacter".
«AnimatedCharacter.xib» состоит из всех элементов, необходимых для создания персонажа. Он имеет ряд элементов управления, связанных с IBOutlets и IBActions, управляемыми из "AnimatedCharacter.m". В моем случае «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". Это эффективно работает как кончик внутри кончика. Не отдельные потоки, но оба пера выполняют свои обязанности, как и ожидалось, получают входные данные и запускают свои соответствующие шоу.
Меня будут интересовать комментарии относительно хороших / плохих / уродливых аспектов того, что я решил сделать.