我在尝试编写照片库时遇到了一些问题:
一切都很好但是当我在单元格中插入我的图像时,我总是得到“收到的内存警告”或“应用程序因内存压力而完成”错误。
我在发布之前尝试过很多东西,但没有任何效果......
请帮帮我:)这是我的代码:
ViewDidLoad:
self.photosDictionary = [[NSDictionary alloc]initWithObjectsAndKeys:@"1.jpeg",@0,@"2.jpeg",@1, @"3.jpeg",@2,@"4.jpeg",@3,@"5.jpeg",
@4,@"6.jpeg",@5,@"7.jpeg",@6,@"8.jpeg",@7,@"9.jpeg",@8,
@"10.jpeg",@9,@"11.jpeg",@10,@"12.jpeg",@11,@"13.jpeg",
@12,@"14.jpeg",@13,@"15.jpeg",@14,@"16.jpeg",@15,@"17.jpeg",
@16,@"18.jpeg",@17, @"19.jpeg",@18,@"20.jpeg",@19,nil];
-(UICollectionViewCell*) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
if(cell.backgroundView == nil){
cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[self.photosDictionary objectForKey:@(indexPath.row)]]];
}
}
答案 0 :(得分:1)
这些图片有多大?我在最近的应用程序中遇到了类似的问题。我的第一个建议是加载这些照片的缩略图版本。这是我们的方法:
- (UIImage*)imageScaled:(UIImage *) image toMaxSideSize:(int) maxSize
{
float scaleFactor = 0;
if(image.size.width > image.size.height)scaleFactor = maxSize / image.size.width;
else scaleFactor = maxSize / image.size.height;
CGSize newSize = CGSizeMake(image.size.width * scaleFactor, image.size.height * scaleFactor);
UIGraphicsBeginImageContext(newSize);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage* updatedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return updatedImage;
}
因此,我们不是将完整图像加载到每个UITableViewCell中,而是像这样加载缩略图。在cellForRowAtIndexPath中:
UIImage * thumbnail = [self imageScaled:[UIImage imageNamed:[self.photosDictionary objectForKey:@(indexPath.row)]] toMaxSideSize:200];
This StackOverflow post涵盖了重新缩放的其他一些选项。 cell.backgroundView.image = thumbnail;