我正在爲iPad應用程序使用Nick Lockwood的iCarousel。現在它只是15個全屏幕圖像的旋轉木馬。iPad上的iCarousel性能問題
我建立一個單一的視圖項目,添加iCarousel視圖故事板,加上它的視圖控制器作爲數據源,並把對數據源的方法驗證碼:
- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel {
return 15;
}
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view {
UIImage* img = [UIImage imageNamed:[NSString stringWithFormat:@"image%d.jpg", index]];
UIImageView* imgView = [[UIImageView alloc] initWithImage:img];
return imgView;
}
這工作,但我第一次當新項目被添加到旋轉木馬時,滾動瀏覽所有項目,您可以注意到一點性能問題。這在我第二次瀏覽所有項目時不會發生。
你可以在這個分析器截圖中看到我的意思。上半場的高峯是我第一次滾動瀏覽所有圖像,然後再次進行,沒有高峯,也沒有表現。
我該如何解決這個問題?
編輯
我孤立在儀器的山峯之一,這是調用樹
編輯
與jcesa代碼r的建議
- (void)viewDidLoad {
[super viewDidLoad];
NSMutableArray* urls_aux = [[NSMutableArray alloc] init];
for (int i = 0; i<15; i++) {
NSString *urlPath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"captura%d", i] ofType:@"jpg"];
NSURL *url = [NSURL fileURLWithPath:urlPath];
[urls_aux addObject:url];
}
self.urls = urls_aux.copy;
self.carousel.dataSource = self;
self.carousel.type = iCarouselTypeLinear;
}
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view {
if (view == nil) {
view = [[[AsyncImageView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)] autorelease];
view.contentMode = UIViewContentModeScaleAspectFit;
}
[[AsyncImageLoader sharedLoader] cancelLoadingImagesForTarget:view];
((AsyncImageView *)view).imageURL = [self.urls objectAtIndex:index];
return view;
}
也許是異步加載圖像,他有一些例子以這種方式加載圖像 – jcesarmobile 2013-04-05 10:09:07
你能解釋你的答案嗎? – Odrakir 2013-04-05 10:22:17
是的,看看他的例子:https://github.com/nicklockwood/iCarousel/tree/master/Examples/Dynamic%20Downloads。他使用AsyncImageView代替UIImageView,以異步方式加載圖像。所以它不會嘗試同時加載所有15張圖像,我認爲它不應該有性能問題 – jcesarmobile 2013-04-05 10:32:25