我在ViewController B中加载ViewControllerA。它是一个小动画角色,在一个更大的场景中。
在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中,它会加载但不会看到动画。
有什么见解?
答案 0 :(得分:0)
除非您在iOS 5中使用新的父视图控制器支持,否则您不应该在另一个视图控制器中托管一个视图控制器。即使在iOS 5中,使用视图控制器来管理小动画角色也是严重的过度杀伤,可能不是一点都不合适。最好创建一个UIView的自定义子类并使用它。
在iOS 5之前的另一个视图控制器中托管一个视图控制器是可能的,但是你要负担得起所有工作的负担,并且每走一步都要与OS设计作斗争。我在iPhone SDK的早期就开始了这场战斗(因为它最初是众所周知的)而放弃了。从开始到结束都是一场噩梦。我强烈建议不要这样做。
我知道一个主要的软件开发人员(苹果合作伙伴级别),他的应用程序Apple威胁要从商店取下来这样做。