0

我在 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 中,它加载但看不到动画。

有什么见解吗?

4

1 回答 1

0

除非您在 iOS 5 中使用新的父视图控制器支持,否则您不应该在另一个视图控制器中托管一个视图控制器。即使在 iOS 5 中,使用视图控制器来管理一个小的动画角色也是严重的矫枉过正,而且可能不太适合一点也不。最好创建 UIView 的自定义子类并使用它。

在另一个 iOS 5 之前的版本中托管一个视图控制器是可能的,但是你有责任让一切正常工作,你最终会在每一步都与操作系统设计作斗争。我在 iPhone SDK 的早期(一开始就知道它)进行了这场战斗并放弃了。从头到尾都是一场噩梦。我强烈建议不要这样做。

我知道一位主要的软件开发人员(Apple 合作伙伴级别)的应用程序 Apple 威胁要从商店中删除这样做的应用程序。

于 2012-06-10T00:02:39.747 回答