在我的iPhone應用程序中,我從Web服務器獲取約300張圖像url,我需要以3x3行和列格式在UIScrollView上顯示所有圖像。一旦我從Web服務器獲得所有的URL,將它們轉換爲UIImage並顯示圖像。一切工作正常,但加載200圖像應用程序崩潰後,我已經讀了很多與UIScrollView有關的內存類型的問題,所以我們如何處理這個問題。我也讀過蘋果文檔,但不清楚。如何在iPhone中的UIScrollView中動態添加圖像
回答
我不明白爲什麼你正在做的是一個問題。可能是你有記憶問題。在這種情況下,模擬器和設備結果應該不同。
如果這是一個內存問題,您應該使用tableview而不是滾動視圖。在每個表格視圖單元格中放置3個圖像,並且應該這樣做。
CDT
我得到的印象是,你是在一次下載所有300個圖像融合在一起,並在內存中保持並增加了UIScrollView的..
有一個叫LazyLoad技術,手段不加載所有的圖像一次,隊列中加載它..
您可以參考此鏈接http://lazyloadinginuiscrollviewiniphone.blogspot.in/2011/12/iphone-uiscrollview-lazy-image-loading.html它可以幫助你實現一切順利..
所有最優秀的。
是的,我正在閱讀圖像並顯示它們UIScrollView動態增加uiscrollview的內容大小,一旦內存不足就會崩潰。 – user748001 2013-03-14 10:02:14
做它懶惰的方式.. – iphonic 2013-03-14 10:03:56
如果要以GridView格式顯示圖像,則可以使用PSTCollectionView。對於圖像的延遲加載,您可以使用SDWebImage。
您是否發佈了不再可見的元素? UITableView可以做到這一點(這就是Sandro建議它的原因)。 你的UIScrollView的實現應該這樣做。
您也可以考慮UICollectionView或GMGridView網格實現考慮到這一點。
這裏是解決方案,我已經在我的應用程序中實現了它。這裏是我的代碼 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;
}
希望它有助於..
製造商是你的網址陣列。 – Dhruvik 2013-03-15 05:16:26
-(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的延遲加載,以減少內存使用,避免
- 1. 如何動態添加圖像到UIScrollView?
- 2. 在iPhone中的UIScrollView中滾動圖像
- 3. 如何在uiscrollview中添加uiview iphone/ipad
- 4. UIScrollView - 動態加載圖像,如何在scrollview中重新加載更多圖像?
- 5. 將大於iphone視圖的圖像添加到UIScrollView中
- 6. 在iPhone中的UILabel中添加圖像
- 7. 在iOS中動態添加圖像
- 8. 在iOS中動態添加圖像
- 9. jquery在fancybox中動態添加圖像
- 10. 將動態圖像加載到UIScrollVIew
- 11. iphone UITableViewCell中添加圖像
- 12. 將動態視圖添加到UIScrollView
- 13. 如何在Flex中添加動態圖像的數據行?
- 14. 如何在動態創建的div中添加圖像?
- 15. 如何動態添加透明度到iPhone圖像?
- 16. iphone sdk如何動態添加uitableview細胞圖像?
- 17. iphone - 滾動收縮圖像在UIScrollView
- 18. 在UIScrollView中動態添加子視圖不出現
- 19. 如何在iphone中添加多個圖像並刪除添加圖像?
- 20. 如何在uiscrollview中滑動圖像時添加短小的聲音
- 21. 如何動態地加載圖像使用的UIScrollView
- 22. 如何動態添加圖像android
- 23. 如何添加MenuStripItems與圖像動態
- 24. 如何動態添加圖像到ScrollView?
- 25. 如何在iPhone的UIScrollView中添加兩個UILabels?
- 26. iphone中的uibutton programmaticaly中添加圖像
- 27. 如何動態添加圖像以顯示在DataGridViewImageColumn中?
- 28. 如何在JTable中動態添加圖像
- 29. 如何在ViewFlipper中添加動態圖像?
- 30. 如何在D3js中動態地將圖像添加到圓形
可能重複崩潰](http://stackoverflow.com/questions/6786614/uiscrollview-lazy-loading-of-images-to-reduce-memory-usage-and-avoid-crash) – 2013-03-14 10:02:45