5

ユーザーがギャラリー画像を閲覧できるIOSで画像ギャラリーアプリケーションを作成しています。このサンプル コードUIScrollViewのようにページングを有効にしました。すべてが機能しています。しかし問題は、ページをスクロールしているときに、多数のコア アニメーション オブジェクトが作成され、決して解放されないことです。


|Graph---|Category------------------|Live Bytes---|#Living----|#Transient

|1-------|All Heap & Anonymous VM   |58.69 MB-----|270335-----|828951   
|0-------|All Heap Allocations------|15.30 MB-----|269980-----|826939   
|0-------|All Anonymous VM----------|43.39 MB-----|355--------|2012     
|0-------|VM: CoreAnimation---------|27.01 MB-----|222--------|58  
|0-------|VM: CG image--------------|7.40 MB------|3----------|189      
|0-------|VM: UITextFieldLabel------|4.30 MB------|25---------|0

楽器を使用して、ページングごとに4〜6個のオブジェクトが作成されることを観察しました。しかし、私が離れても解放されません。View Controller

ページングごとに次の方法を使用して、レイヤーからアニメーションを削除しようとしました。しかし、それは機能しません。

 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{

CGFloat pageHeight = CGRectGetHeight(self.ImageSlider.frame);
NSUInteger page = floor((self.ImageSlider.contentOffset.y - pageHeight / 2) / pageHeight) + 1;
currentPage = page;
delegate.currentPage = page;
[delegate refreshTags];

[self unloadPageFromScrollView:currentPage-2];
[self unloadPageFromScrollView:currentPage+2];

[self loadScrollViewWithPage:currentPage - 1];
[self loadScrollViewWithPage:currentPage];
[self loadScrollViewWithPage:currentPage + 1];

}

- (void)unloadPageFromScrollView:(NSUInteger)page
{
    @autoreleasepool {
        if (page > docList.count-1) {
            return;
        }

    if ((NSNull *)[self.viewControllers objectAtIndex:page] != [NSNull null]) {
        PageViewController1 *controller = [self.viewControllers objectAtIndex:page];
        for (CALayer* layer in [self.view.layer sublayers]) {
                [layer removeAllAnimations];
        }
        [controller.view removeFromSuperview];

        [self.viewControllers replaceObjectAtIndex:page withObject:[NSNull null]];

        }
    }

}

これらのコア アニメーション オブジェクトを解放する方法を誰かが知っている場合は、私を助けてください。

4

1 に答える 1

8

Found out that animation caused by the inner pages.

Inside the pageViewController(viewController that added to the scrollView as a page) on viewWillDisappear:(BOOL)animated method I added this

    for (CALayer* layer in [self.view.layer sublayers])
    {
        [layer removeAllAnimations];
    }

it resolved the problem.

于 2013-09-30T03:34:27.653 に答える