2013-09-26 13 views
5

Tworzę aplikację galerii obrazów w IOS, gdzie użytkownik może przeglądać obrazy galerii. Użyłem stronicowania z włączonym UIScrollView jak w this przykładowym kodzie. Wszystko działa. Ale problem polega na tym, że podczas przewijania stron tworzona jest liczba rdzennych obiektów animacji i nigdy nie są one wydawane.Obiekty IOS Core Animation nie zwalniają


|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 

wykorzystujące instrumenty i zauważył, że dla każdego stronicowania 4-6 obiekty są tworzone. Ale nie zostaną one zwolnione, nawet jeśli porzuciłem próbę usunięcia animacji z warstw przy użyciu następującej metody po każdym przywoływaniu. ale to nie działa.

- (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]]; 

     } 
    } 

} 

Proszę mi pomóc, jeśli ktoś wie, jak uwolnić te podstawowe obiekty animacji.

+0

Wygląda na to, że główne obiekty animacji nie są wynikiem stronicowania lub 'UIpageView'. Wewnątrz strony przesuwalam 'UILabel's, aby je ustawić. Tam, gdzie pojawia się animacja. Ale te animacje nie zwalniają, kiedy rozładowuję stronę. Opublikuję odpowiedź, jeśli uda mi się je zwolnić. –

Odpowiedz

8

Wykryto animację spowodowaną przez wewnętrzne strony.

Wewnątrz pageViewController (viewController że dodany do scrollView jako stronę) na viewWillDisappear:(BOOL)animated metody dodałem ten

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

to rozwiązało problem.

Powiązane problemy