【发布时间】:2015-11-15 18:45:55
【问题描述】:
我的 iPhone 应用程序包含 170 张图片。我将它们读入一个数组,并在循环中在取景器中添加一张图片,然后将图像视图作为滚动视图的子视图。
运行我的应用程序时使用了过多的内存 700mb。我试图缩小图片的大小,但没有用。
我的一个朋友说我应该只添加图像#1和#2。当用户块滚动到第1张图片时,只显示第2张图片。然后删除第1张图片从图像查看器中添加图片编号 3。
他说这样我可以维持正常的内存消耗。但我不明白如何做到这一点? : D
你能举个例子吗?提前致谢。
不使用 UICollectionView
这是我的代码:
- (void) addImageViewToScrollView {
//create ArrayImages
NSMutableArray *tempArray = [[NSMutableArray alloc] init];
for (int x = 0; x < 170; x++) {
[tempArray addObject:[UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg",x]]];
}
self.imagesArray = [NSArray arrayWithArray:tempArray];
//Frame ScrollView in UIView
self.scrollView.contentSize =
CGSizeMake(self.scrollView.frame.size.width * self.imagesArray.count,
self.scrollView.frame.size.height);
//scrollView add subview ImageView
for (int i = 0; i < self.imagesArray.count; i++) {
CGRect frame;
frame.origin.x = self.scrollView.frame.size.width * i;
frame.origin.y = 0;
frame.size = self.scrollView.frame.size;
_imageView = [[UIImageView alloc] init];
_imageView.image = [self.imagesArray objectAtIndex:i];
_imageView.frame = frame;
[scrollView addSubview:_imageView];
}
self.pageControll.currentPage = 0;
self.pageControll.numberOfPages = self.imagesArray.count;
}
为了便于阅读,我决定拆分代码
- (void)scrollViewDidScroll:(UIScrollView *)sender {
CGFloat pageWidth = self.scrollView.frame.size.width;
int page = floor((self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
self.pageControll.currentPage = page;
self.imageIndex = page;
}
#pragma mark - ChangePage
- (IBAction)changePage {
CGRect frame;
frame.origin.x = self.scrollView.frame.size.width * self.pageControll.currentPage;
frame.origin.y = 0;
frame.size = self.scrollView.frame.size;
[self.scrollView scrollRectToVisible:frame animated:YES];
pageControlBeingUsed = YES;
}
【问题讨论】:
-
使用
UICollectionView。它使这一切变得容易得多。 -
@rmaddy 我非常不喜欢简单的编程方式,但也难倒优秀的程序员!
-
真的吗?您宁愿编写非标准的、难以处理的代码,也不愿使用 Apple 提供的标准工具,该工具可以更轻松地编写此类 UI,同时减少错误并改善内存管理?
标签: ios objective-c memory-management