在滚动视图中加载大尺寸图像时崩溃iPad

问题描述:

我有31个图像,尺寸为1448 * 2048。我必须将它添加到滚动视图并在iPad上水平交换。但问题是当我交换第6张图片时。它与内存警告崩溃。在滚动视图中加载大尺寸图像时崩溃iPad

我已经使用了来自developer.apple.com的页面控制示例的逻辑。这个类的ViewDidload中的 我已经设置了与页面控件示例相同的滚动视图框架。

我的页面加载代码的功能是

- (void)loadPage:(int)page 
{ 

if (page < 0) return; 
    if (page >= [_imgArray count]) return; 

    // replace the placeholder if necessary aViewController is NSMutable Array. 
    ImageViewC *controller = [aViewControllers objectAtIndex:page]; 
    if ((NSNull *)controller == [NSNull null]) { 

     controller = [[ImageViewC alloc] initWithImage:[_imgArray objectAtIndex:page]]; 
    //controller.screen = currentPage; 
    [aViewControllers replaceObjectAtIndex:page withObject:controller]; 
     [controller release]; 
    } 

    // add the controller's view to the scroll view 
    if (nil == controller.view.superview) 
{ 
     CGRect frame = scrollView.frame; 
     frame.origin.x = frame.size.width * page; 
     frame.origin.y = 0; 
     controller.view.frame = frame; 
     [scrollView addSubview:controller.view]; 
    } 
} 

和滚动功能是

- (void)scrollViewDidScroll:(UIScrollView *)sender 
{ 

    // Switch the indicator when more than 50% of the previous/next page is visible 
    CGFloat pageWidth = scrollView.frame.size.width; 
    int page = floor((scrollView.contentOffset.x - pageWidth/2)/pageWidth) + 1; 

    self.currentPage = floor(scrollView.contentOffset.x/pageWidth) + 1; 
    // load the visible page and the page on either side of it (to avoid flashes when the user starts scrolling) 
    [self loadPage:page - 1]; 
    [self loadPage:page]; 
    [self loadPage:page + 1]; 

if (page == -1) 
    return; 
} 

任何一个可以帮助我。并请修改代码如何管理内存,以便我可以在此滚动上交换31个图像。

一张图片占用了超过11MB的RAM,因此您不应该对看到您的应用程序崩溃感到惊讶。

你需要释放不可见的图像,你也许应该分割你的图像。 loadPage:方法看起来过于复杂,我无法得到它在做什么,我不知道ImageViewC是什么。

如果您是Apple的注册开发人员,请查看WWDC视频,其中一个视频是关于UIScrollViews的,其中介绍了如何加载许多图像并获取处理权限。

+0

WWDC的例子是2010年的“photoscroller”该代码可用以及视频。两者都很棒! – JosephH 2010-09-04 12:56:45

+0

谢谢。在这个代码中,imageViewC是存在imageView的控制器类。你可以发送uwsrollviews的wwdc vedeos链接吗? – riyaz 2010-09-06 06:53:03

+0

这些视频在登录后可从Apple的网站获得 - 它会将您带到iTunes。 – Eiko 2010-09-06 07:46:53

您应该卸载当前不可见的图像。这应该有助于减少内存占用。