2013-03-14 66 views
0

在我的iPhone應用程序中,我從Web服務器獲取約300張圖像url,我需要以3x3行和列格式在UIScrollView上顯示所有圖像。一旦我從Web服務器獲得所有的URL,將它們轉換爲UIImage並顯示圖像。一切工作正常,但加載200圖像應用程序崩潰後,我已經讀了很多與UIScrollView有關的內存類型的問題,所以我們如何處理這個問題。我也讀過蘋果文檔,但不清楚。如何在iPhone中的UIScrollView中動態添加圖像

+0

可能重複崩潰](http://stackoverflow.com/questions/6786614/uiscrollview-lazy-loading-of-images-to-reduce-memory-usage-and-avoid-crash) – 2013-03-14 10:02:45

回答

-1

我不明白爲什麼你正在做的是一個問題。可能是你有記憶問題。在這種情況下,模擬器和設備結果應該不同。

如果這是一個內存問題,您應該使用tableview而不是滾動視圖。在每個表格視圖單元格中放置3個圖像,並且應該這樣做。

CDT

0

我得到的印象是,你是在一次下載所有300個圖像融合在一起,並在內存中保持並增加了UIScrollView的..

有一個叫LazyLoad技術,手段不加載所有的圖像一次,隊列中加載它..

您可以參考此鏈接http://lazyloadinginuiscrollviewiniphone.blogspot.in/2011/12/iphone-uiscrollview-lazy-image-loading.html它可以幫助你實現一切順利..

所有最優秀的

+0

是的,我正在閱讀圖像並顯示它們UIScrollView動態增加uiscrollview的內容大小,一旦內存不足就會崩潰。 – user748001 2013-03-14 10:02:14

+0

做它懶惰的方式.. – iphonic 2013-03-14 10:03:56

0

您是否發佈了不再可見的元素? UITableView可以做到這一點(這就是Sandro建議它的原因)。 你的UIScrollView的實現應該這樣做。

您也可以考慮UICollectionViewGMGridView網格實現考慮到這一點。

1

這裏是解決方案,我已經在我的應用程序中實現了它。這裏是我的代碼 sv_port是我的scrollView。 下載SDWebImageDownloader類文件並將其導入到您的項目中。在您的項目中添加相關框架。像imageIO.framework,QuartzCore

現在,在您的m添加

#import "UIImageView+WebCache.h" 
#import "SDImageCache.h" 
#import "SDWebImageCompat.h" 

//function for adding image in your scrollview 
-(void)populateImages 
{ 
int x=6,y=6; 

for(UIView * view in sv_port.subviews){ 
    if([view isKindOfClass:[UIImageView class]]) 
    { 
     [view removeFromSuperview]; view = nil; 
    } 
    if([view isKindOfClass:[UIButton class]]) 
    { 
     [view removeFromSuperview]; view = nil; 
    } 
} 

for(int p=0;p<[Manufacturer count];p++) 
{ 
    UIButton *btnImageButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    btnImageButton.frame = CGRectMake(x,y,70,70); 
    [btnImageButton setTag:p]; 
    [btnImageButton addTarget:self action:@selector(nextview:) forControlEvents:UIControlEventTouchUpInside]; 

    UIActivityIndicatorView *spinny = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    spinny.frame=CGRectMake(btnImageButton.frame.origin.x+25,btnImageButton.frame.origin.y+25, 20, 20); 
    spinny.backgroundColor=[UIColor clearColor]; 
    [spinny startAnimating]; 

    [sv_port setScrollEnabled:YES]; 
    [sv_port addSubview:spinny]; 

    UIImageView *asyncImageView = [[[UIImageView alloc] initWithFrame:btnImageButton.frame] autorelease]; 
    asyncImageView.backgroundColor=[UIColor clearColor]; 
    CALayer *layer; 
    layer = asyncImageView.layer; 
    layer.borderWidth = 0.5; 
    layer.cornerRadius = 5; 
    layer.masksToBounds = YES; 


    [asyncImageView setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@", yourUrl] ] placeholderImage:[UIImage imageNamed:nil] options:0 andResize:CGSizeMake(btnImageButton.frame.size.width,btnImageButton.frame.size.height) withContentMode:UIViewContentModeScaleAspectFit]; 
    asyncImageView.contentMode = UIViewContentModeScaleAspectFit; 

    [sv_port addSubview:btnImageButton]; 
    [sv_port addSubview:asyncImageView]; 
    int imgCntPort=0; 

    imgCntPort=(sv_port.frame.size.width/(asyncImageView.frame.size.width)); 

    ////NSLog(@"imgport %d",imgCntPort); 
    if((p+1)%imgCntPort==0) 
    { 
     x=5; 
     y=y+80; 
    } 
    else 
    { 
     x=x+80; 
    } 
} 
sv_port.contentSize = CGSizeMake(0, y); 
glob_x =0; glob_y =y; 
} 

希望它有助於..

+0

製造商是你的網址陣列。 – Dhruvik 2013-03-15 05:16:26

1
-(void)scrollimage 
{ 
    [AsyncImageLoader sharedLoader].cache = nil; 
    NSArray *viewsToRemove = [_scrollview_gallary subviews]; 
    for (UIView *v in viewsToRemove) { 
     [v removeFromSuperview]; 
    } 

    CGFloat width =_scrollview_gallary.bounds.size.width; 

    _scrollview_gallary.contentSize=CGSizeMake(width*[tmpArr count]-1, 360); 
    [_scrollview_gallary setShowsHorizontalScrollIndicator:NO]; 
    [_scrollview_gallary setShowsVerticalScrollIndicator:NO]; 
    int x=0; 
    int y=0; 
    for (int i=0; i<[tmpArr count]; i++) 
    { 
     AsyncImageView *imgv; 
     imgv =[[AsyncImageView alloc] initWithFrame:CGRectMake(x,y,width,360)]; 
     imgv.contentMode = UIViewContentModeScaleToFill; 
     imgv.activityIndicatorStyle = UIActivityIndicatorViewStyleWhite; 
     NSString *strimag=[NSString stringWithFormat:@"%@",[tmpArr objectAtIndex:i]]; 
     imgv.imageURL=[NSURL URLWithString:[tmpArr objectAtIndex:i]]; 
     [_scrollview_gallary addSubview:imgv]; 
     x=x+width; 
    } 
    _pageview.numberOfPages=([tmpArr count]); 
    _scrollview_gallary.pagingEnabled = YES; 
} 
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    int page; 
    CGFloat pageWidth = _scrollview_gallary.frame.size.width; 
    page = floor((_scrollview_gallary.contentOffset.x - pageWidth/2)/pageWidth) + 1; 
    self.pageview.currentPage = page; 

} 
圖像[UIScrollView的延遲加載,以減少內存使用,避免
相關問題