Анимированный ViewController работает в iOS 5, но не в iOS 4

Я загружаю ViewControllerA внутри ViewController B. Это небольшой анимированный персонаж внутри большой сцены.

Внутри ViewControllerA есть анимация вращения, например:

CAKeyframeAnimation *bobble = [CAKeyframeAnimation           animationWithKeyPath:@"transform.rotation"];

NSArray *times = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0],
                  [NSNumber numberWithFloat:0.25],
                  [NSNumber numberWithFloat:0.5],
                  [NSNumber numberWithFloat:0.75],
                  [NSNumber numberWithFloat:1.0],
                  nil];

[bobble setKeyTimes:times];

NSArray *values = [NSArray arrayWithObjects:
                 [NSNumber numberWithFloat:degreesToRadian(0)],
                 [NSNumber numberWithFloat:degreesToRadian(5)],
                 [NSNumber numberWithFloat:degreesToRadian(0)],
                 [NSNumber numberWithFloat:degreesToRadian(-5)],
                 [NSNumber numberWithFloat:degreesToRadian(0)],
                 nil];

[bobble setValues:values];

bobble.repeatCount = HUGE_VALF;
bobble.autoreverses = YES;
bobble.duration = 5.0;
bobble.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
[self.view.layer addAnimation:bobble forKey:@"transform.rotation"];

Это собственные viewDidLoad и viewDidAppear выглядят так:

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
self.view.center = CGPointMake(640, 201);
[self.view setAnchorPointAndReposition:CGPointMake(.7, .7)];


}

- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self bobble];
[NSTimer scheduledTimerWithTimeInterval:3. target:self   selector:@selector(blinkFromTimer:) userInfo:nil repeats:YES];
}

В iOS5+ он загружается и анимируется очень хорошо, в iOS 4.3 он загружается, но никакой анимации не видно.

Любое понимание?

1 ответ

Решение

Вы не должны размещать один контроллер представления внутри другого, если только вы не используете поддержку нового родительского контроллера представления в iOS 5. Даже в iOS 5 использование контроллера представления для управления маленьким анимированным персонажем является серьезным излишним и, вероятно, не очень удачным решением. совсем. Лучше создать собственный подкласс UIView и использовать его.

МОЖНО разместить один контроллер представления внутри другого до iOS 5, но на вас лежит бремя, чтобы все работало, и вы столкнетесь с борьбой против дизайна ОС на каждом шагу. Я сражался в этой битве в начале iPhone SDK (как это было известно вначале) и сдался. Это кошмар от начала до конца. Я настоятельно советую против этого.

Я знаю одного крупного разработчика программного обеспечения (уровень партнера Apple), чье приложение Apple угрожало забрать из магазина за это.

Другие вопросы по тегам