0

我试图在使用核心动画时淡入一些视图。一切都很好,直到第 4 或第 5 个视图淡入。动画停止,几秒钟后,其余视图仅显示在屏幕上(没有动画发生)。我在第三代 iPad 上进行了测试,所以它不会是硬件过时的问题。代码:

viewDidLoad

- (void)viewDidLoad {
    [super viewDidLoad];
    self.subViews = self.view.subviews;

    for (UIView *view in self.subViews) {
        view.backgroundColor = [UIColor clearColor];
        PhotoFrame *photoFrame = [[PhotoFrame alloc] init];
        photoFrame.photo.image = [UIImage imageNamed:[NSString stringWithFormat:@"test%d.jpg", arc4random() % 6 + 1]];
        [view addSubview:photoFrame];
        view.layer.opacity = 0;
    }
}

viewDidAppear

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self startAnimations];
}

开始动画

- (void)startAnimations {
    int count = 1;
    for (UIView *view in self.subViews) {
        CALayer *animationLayer = view.layer;

        CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
        animation.fromValue = @0.0;
        animation.toValue = @1.0;
        animation.duration = 0.3;
        animation.beginTime = CACurrentMediaTime() + count * 0.3;
        animation.removedOnCompletion = NO;
        animation.fillMode = kCAFillModeForwards;

        [animationLayer addAnimation:animation forKey:@"opacityAnimation"];
        count++;
    }
}

我希望任何人都可以帮助我。

4

3 回答 3

1

我建议要么切换到 UIView 动画方法animateWithDuration:animations:,或者在提交动画而不使用removedOnCompletion = TRUE. 正如我在上面的评论中所说,removedOnCompletion 实际上会使动画保持活动状态,并应用于渲染的每一帧。我发现当有很多动画处于活动状态时,事情会变慢。

于 2012-06-25T10:51:35.667 回答
0

为什么不使用 UIView animateWithDuration?

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html

它也会在你的观点中消失,我从来没有遇到过任何问题。

于 2012-06-24T18:06:18.357 回答
0

您可以尝试在 a 中执行所有动画以CATransaction将它们批处理在一起,或者您可以将它们全部添加到一个公共容器视图中,并且只为容器视图的不透明度设置动画。由于视图不需要在动画期间重绘,您也可以使用shouldRasterize = YES;

所有这些事情可能会或可能不会影响性能,在某些情况下,光栅化甚至可能使情况变得更糟。

此外,如果涉及到阴影,您应该每个阴影设置一个阴影路径,因为当涉及到阴影时,这将大大提高性能。

于 2012-06-24T20:11:40.527 回答