SUPER EDIT:Cuộn mượt với hơn 500 hình ảnh
Được rồi, sau một vài sửa đổi khác nhau, tôi có một câu hỏi rõ ràng hơn. Về cơ bản tôi đang đấu tranh với việc sử dụng NSCache. Tôi có một chế độ xem bộ sưu tập như bạn có thể thấy bên dưới và tôi muốn có thể thu nhỏ độ trễ cuộn với hình ảnh mà tôi đang thực hiện cho hầu hết các phần. Phần khó khăn đang chuyển sang hình ảnh fullsize. Đó là trong một cái nhìn khác và tôi muốn chuyển đổi sang hình ảnh kích thước đầy đủ cũng như Apple không với ứng dụng hình ảnh của họ.
Dường như Apple đang lưu vào bộ nhớ cache hình ảnh và truy cập chúng khác nhau. Tôi đã tìm thấy rằng tôi cần phải tải hình thu nhỏ ban đầu sau đó khi hình ảnh fullsize được tải về, tôi có thể thay thế nó. Nhưng tôi không chắc chắn làm thế nào để làm điều này.
Cho đến nay những gì tôi có là:
UICollectionview
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.myCache = [[NSCache alloc] init];
}
//Reusable cell structure
- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {
//cell
CoverPhotoCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"CoverImgCell" forIndexPath:indexPath];
cell.backgroundColor = [UIColor blackColor];
cell.clipsToBounds = YES;
cell.opaque = YES;
cell.layer.shouldRasterize = YES;
cell.layer.rasterizationScale = [UIScreen mainScreen].scale;
Media *object = [[Media alloc] init];
object = [self.photoListArray objectAtIndex:indexPath.item];
//Remove old cell
for (UIView *subview in [cell subviews]){
if (subview.tag != 0)
{
[subview removeFromSuperview];
}
}
//UIImage
UIImage *thumbImg = [_myCache objectForKey:object.url];
if (thumbImg) {
cell.imageView.image = thumbImg;
}
else {
cell.imageView.image = nil;
UIImage *thumbImg = [[UIImage alloc] initWithCGImage:[object.asset aspectRatioThumbnail]];
dispatch_async(dispatch_get_main_queue(), ^{
cell.imageView.image = thumbImg;
});
[_myCache setObject:thumbImg forKey:object.url];
}
//thumbnail
cell.imageView.tag = indexPath.row + 1;
cell.imageView.layer.borderWidth = 5;
cell.imageView.layer.borderColor = [UIColor whiteColor].CGColor;
cell.imageView.contentMode = UIViewContentModeScaleAspectFit;
cell.imageView.frame = CGRectMake(0, 0, 125, 125);
return cell;
}
//User taps image
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"PhotoSegue"]) {
DetailPageController *controller = segue.destinationViewController;
NSIndexPath *selectedIndex = [self.collectionView indexPathsForSelectedItems][0];
controller.initialIndex = (NSUInteger)selectedIndex.item;
controller.photos = self.photoListArray;
}
}
Vì vậy, đó là mã NSCache tôi, sau đó tôi sử dụng một segue với bộ điều khiển cái nhìn đầy đủ mà hiển thị các hình ảnh độ phân giải đầy đủ. Làm cách nào để tải hình thu nhỏ trước và sau đó là hình ảnh có kích thước đầy đủ.
Ngoài ra có bất kỳ suy nghĩ về cách táo tải hình ảnh của mình một cách nhanh chóng? Họ đang sử dụng một cách khác để cache? Hay tôi đang làm điều gì đó không chính xác.
Sửa Refined:
Có thể ai đó đường bưu điện hoặc ít nhất là điểm tôi hướng tới một số mẫu mã mà tôi cho thấy một hình ảnh thu nhỏ khi người dùng cuộn nhanh và tải các hình ảnh thực tế khi họ chậm lại, tương tự như tôi đoán ứng dụng đoạn phim quảng cáo táo.
* "Phần khó khăn đang chuyển sang hình ảnh fullsize Đó là theo quan điểm khác và tôi muốn chuyển đổi sang ảnh fullsize cũng như Apple đã làm với ứng dụng hình ảnh của họ." * - làm bạn có một số liệu cụ thể trong tâm trí? * "Có vẻ như Apple đang lưu vào bộ nhớ đệm hình ảnh và truy cập chúng một cách khác nhau. Tôi đã tìm thấy rằng tôi cần tải hình thu nhỏ ban đầu, sau đó khi hình ảnh đầy đủ được tải xuống, tôi có thể thay thế. Nhưng tôi không chắc chắn cách làm điều này. "* Bạn có thể làm rõ điều đó không? Làm cách nào họ truy cập nó 'khác'? Bạn không chắc chắn về điều gì? –