0

Core Animation を使用していくつかのビューをフェードインしようとしています。4 番目または 5 番目のビューがフェード インするまで、すべて問題ありません。アニメーションが停止し、数秒後に残りのビューが画面に表示されます (アニメーションは発生しません)。第 3 世代の 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];
}

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

内のすべてのアニメーションをCATransactionまとめてバッチ処理するか、それらすべてを共通のコンテナー ビューに追加して、コンテナー ビューの不透明度のみをアニメーション化することができます。アニメーション中にビューを再描画する必要がないため、使用することもできますshouldRasterize = YES;

これらすべてがパフォーマンスに影響する場合としない場合があります。

また、影が関係している場合は、すべての影に影のパスを設定する必要があります。これにより、影が関係している場合のパフォーマンスが大幅に向上します

于 2012-06-24T20:11:40.527 に答える