Tôi có một với ba ảnh trên mỗi hàng, được triển khai bằng cách sử dụng UITableView
.Đạt được cuộn mượt cho Lưới ảnh với hàng nghìn hình ảnh từ đĩa
Tôi có bộ nhớ trong (sử dụng NSCache) có dung lượng 100 hình ảnh, vì vậy một lần tôi sẽ có tối đa 100 ảnh trong bộ nhớ mặc dù tôi có hàng nghìn ảnh trên đĩa để hiển thị Cái lưới sắt.
Tất cả hình ảnh của tôi là JPEG 4KB-20KB.
Vì vậy, với cơ sở hạ tầng này, các hình ảnh được tải liên tục và được tải xuống từ NSCache khi người dùng cuộn qua lưới ảnh. Với việc di chuyển bình thường mọi thứ có vẻ tốt, tôi nhận được khoảng 55-58 khung hình/giây.
Khi người dùng bắt đầu di chuyển nhanh hơn qua lại, tôi có hai trường hợp:
Nếu tôi tách ra nhiệm vụ tải ảnh từ chủ đề chính, tôi kết thúc thiếu hình ảnh trên lưới điện ảnh, bởi vì tôi các ô được hiển thị trước khi hình ảnh được đọc vào bộ nhớ.
(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ UIImage *image = getImageFromCacheForImagePath:imagePath; dispatch_async(dispatch_get_main_queue(), ^{ cell.leftGridItem.imageView.image = image; }); }); }
Nếu tôi có tác vụ tải hình ảnh trên chủ đề chính, có một đoạn nói lắp. Tôi nhận được khoảng 36-45fps.
(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UIImage *image = getImageFromCacheForImagePath:imagePath; cell.leftGridItem.imageView.image = image; }
getImageFromCacheForImagePath:imagePath
được hình ảnh ngay lập tức từ NSCache nếu nó tồn tại, nếu không, các hình ảnh được tải từ tập tin và được đặt vào NSCache để sử dụng sau, nhưng tôi thiết lập các giới hạn của NSCache
100.
Những điều tôi đã cố gắng/tinh chỉnh:
- Tránh
clipsToBounds
cho xem hình ảnh lưới. - Đang tải hình ảnh lên chủ đề nền.
- Sử dụng
NSOperation
Hàng đợi. - Tải hình ảnh theo lô 100 (công trình, nhưng với việc cuộn nhanh, thời gian tải hình ảnh bị trì hoãn).
Tôi đang cố gắng đạt được cảm giác tương tự như ứng dụng Ảnh gốc.
Đề xuất của bạn được đánh giá cao.
Vui lòng xem lại mã trong câu hỏi của bạn. Việc định dạng cần thiết giúp đỡ, và khi thực hiện đã tiết lộ một số vấn đề (xem mã '^ {' trông giống như nó sẽ bắt đầu một khối mã mới nhưng dường như không chính xác với tôi). Chúng tôi đã cố gắng giúp bạn làm cho nó được định dạng đúng, nhưng nó không thực sự rõ ràng. – ErikE
Tôi tự hỏi nếu họ không tạo hình thu nhỏ ngoại tuyến, như lúc nhập, và sau đó kích thước nhỏ của hình thu nhỏ mang lại cho họ một lợi thế đáng kể cho tải chủ đề chính. –