Ale*_*akh 18 uitableview uiimage smooth-scrolling ios xamarin
我在UITableView上使用包含UIImageView的UITableViewCell进行平滑滚动问题.在StrackOverflow上可以找到类似的问题,但是所提出的解决方案都没有帮助我彻底摆脱滞后.
我的情况很常见:
我遵循了多个优化技巧,并设法优化滚动.不幸的是它仍然不完美.这是我的情景:
最初在开始新的后台线程之前获取图像(步骤1)是没有后台线程的UIImage缓存检查.在这种情况下,如果我们在缓存中有图像,我们会立即分配它,这会在快速滚动期间引入很大的延迟(只要我们立即获取图像,我们就会经常分配图像).我在下面的例子中评论了这些行.
还有两个问题:
任何建议如何处理这两个问题或如何优化我的方案表示赞赏
请考虑使用Xamarin编写的示例,但我不相信Xamarin是导致问题的原因,只要我对ObjectiveC中编写的应用程序也有同样的问题.
lon*_*ngi 10
你们每个人都试图TableView只用一张保存在你身上的120x120图片Bundle吗?这样你可以检查你的问题是否发生Image rendering
我建议您创建并使用所有图像的缩略图,而不是将所有图像的大小调整为120x120并将其保存在缓存中.你已经在某种程度上这样做了,但是你这样做了几次(每次你滚动或者你的缓存已经满了).
在我们的上一个项目中,我们有UICollectionView书籍封面.大多数封面都在400-800kb之间,滚动时的感觉非常糟糕.所以我们为每个图像创建了一个缩略图(缩略图大约40-50kb),并使用缩略图而不是真正的封面.奇迹般有效!我附上了缩略图创建功能
- (BOOL) createThumbnailForImageAtFilePath:(NSString *)sourcePath withName:(NSString *)name {
UIImage* sourceImage = [UIImage imageWithContentsOfFile:sourcePath];
if (!sourceImage) {
//...
return NO;
}
CGSize thumbnailSize = CGSizeMake(128,198);
float imgAspectRatio = sourceImage.size.height / sourceImage.size.width;
float thumbnailAspectRatio = thumbnailSize.height/thumbnailSize.width;
CGSize scaledSize = thumbnailSize;
if(imgAspectRatio >= thumbnailAspectRatio){
//image is higher than thumbnail
scaledSize.width = scaledSize.height * thumbnailSize.width / thumbnailSize.height;
}
else{
//image is broader than thumbnail
scaledSize.height = scaledSize.width * imgAspectRatio;
}
UIGraphicsBeginImageContextWithOptions( scaledSize, NO, 0.0 );
CGRect scaledImageRect = CGRectMake( 0.0, 0.0, scaledSize.width, scaledSize.height );
[sourceImage drawInRect:scaledImageRect];
UIImage* destImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSString* thumbnailFilePath = [[self SOMEDIRECTORY] stringByAppendingPathComponent:name];
BOOL success = [UIImageJPEGRepresentation(destImage, 0.9) writeToFile:thumbnailFilePath atomically:NO];
return success;
Run Code Online (Sandbox Code Playgroud)
}
| 归档时间: |
|
| 查看次数: |
15081 次 |
| 最近记录: |