我有一个可以滚动图像的分页UICollectionView
。每个图像都填满了屏幕。对于常规照片,我的collectionView
流畅地滚动但是全景拍摄,当我滚动图像时它开始滞后。
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
imageCell *cell = (imageCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
cell.tag = indexPath.row;
PFObject *temp = [_dataArray objectAtIndex:indexPath.row];
PFUser *user = [temp objectForKey:@"user"];
PFFile *file = [temp objectForKey:@"image"];
[file getDataInBackgroundWithBlock:^(NSData *data, NSError *error){
if (!error) {
cell.selectedImageView.image = [UIImage imageWithData:data];
self.navigationItem.title = [user objectForKey:@"Name"];
}
}];
return cell;
}
如您所见,我在后台加载图像。
我是否有可能需要在willDisplayCell
中做点什么?感谢
答案 0 :(得分:0)
您每次都在加载数据。尝试防止这种情况。
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
imageCell *cell = (imageCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
...
if (cell.selectedImageView.image == nil)
{
[file getDataInBackgroundWithBlock:^(NSData *data, NSError *error){
if (!error) {
cell.selectedImageView.image = [UIImage imageWithData:data];
self.navigationItem.title = [user objectForKey:@"Name"];
}
}];
}
return cell;
}
此外,有时它只是在模拟器中。 尝试重置模拟器或Xcode然后再次运行。
我有经验,有时候,我甚至检查可能的内存处理错误,但重启模拟器完成了工作。
答案 1 :(得分:0)
我之前从未真正使用过Parse对象,但似乎是因为一个单元格试图同时加载多个图像。我认为你应该移动将图像加载到单元格的逻辑,并在prepareForReuse中重用它时取消图像加载。在单元格中加载图像时,通常会使用此提示。 我会给你一个快速的例子,希望它能给你一个想法。
in imageCell,
var file: PFFile? {
didSet {
if let f = file {
[file getDataInBackgroundWithBlock:^(NSData *data, NSError *error){
if (!error) {
selectedImageView.image = [UIImage imageWithData:data];
}
}];
}
}
}
........
override func prepareForReuse() {
super.prepareForReuse()
if let f = file {
f.cancel()
}
}
.....
cell.file = file
.....