Анимированный 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 угрожало забрать из магазина за это.