0

スクロールビューのコンテンツでアニメーションを作成しましたが、メモリに問題があります。したがって、UITabBarControllerがあり、3つのタブにUIScrollViewを持つカスタムUIViewがあります。これを使用して、水平方向のコンテンツスクロールをアニメーション化します。

- (void)beginAnimation
{
if (isAnimating) {
    return;
}

[scrollView setContentOffset:[self startOffset]];

isAnimating = YES;

NSTimeInterval animationDuration = (scrollView.contentSize.width / self.tickerSpeed);

[UIView animateWithDuration:animationDuration
                      delay:0
                    options:UIViewAnimationOptionCurveLinear
                 animations:^{
                     CGPoint finalPoint = CGPointZero;

                     if (self.scrollingDirection == BBScrollingDirectionFromRightToLeft) {
                         finalPoint = CGPointMake(scrollView.contentSize.width, 0);
                     } else if (self.scrollingDirection == BBScrollingDirectionFromLeftToRight) {
                         finalPoint = CGPointMake(-scrollView.contentSize.width + self.frame.size.width, 0);
                     }

                     scrollView.contentOffset = finalPoint;
                 } completion:^(BOOL finished) {
                         isAnimating = NO;

                         [self beginAnimation];
                 }];
}

アプリを起動して最初のタブにいるときはすべて問題ありませんが、別のタブに切り替えると、楽器の割り当ての全体的なバイト数が急速に増加し始め、ライブバイト数は実質的に同じになります。誰かが私に何が起こっているのか説明できますか?

4

1 に答える 1

1

私はあなたがによって無限ループを作成していると思います

completion:^(BOOL finished) {
                         isAnimating = NO;

                         [self beginAnimation];
                 }];

完了ブロックを介してアニメーションの開始を再帰的に呼び出すのはなぜですか?それはあなたのメモリの問題についての私の推測です、ブロックは他のobj-cオブジェクトのようにメモリに保存され、それらはスペースを占有します。

編集:

このようにアニメーション呼び出しをsmtに変更し、メモリの問題があるかどうかをもう一度確認することをお勧めします。

[UIView animateWithDuration:animationDuration
                      delay:0
                    //I added autoreverse option also bc it seems like a good fit for your purpose
                    options:UIViewAnimationOptionCurveLinear | UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse
                 animations:^{
                     [UIView setAnimationRepeatCount:10.0]; //This a class method, set repeat count to a high value, use predefined constants (ie HUGE_VALF) if it works for you 
                     ...
                 }
];
于 2013-02-24T22:22:42.557 に答える