旋转后图像变质
Posted
技术标签:
【中文标题】旋转后图像变质【英文标题】:Images get spoiled after rotation 【发布时间】:2011-06-16 11:57:41 【问题描述】:我有一个 UIYableView 并将图像保存在该 tableview 中,每次旋转手机时我都会更改 UIImageView 大小。我检查 tableView:cell:forIndexpath 中的 self.interfaceOrientation 并决定给 imageview 的大小。每次发生旋转时,我都会重新加载 tableview。但是在旋转之后,图像似乎变得混杂了。我的意思是我在另一个图像上获得了图像的一部分。解决此问题的最佳方法是什么?
编辑:添加了一些代码
在 tableview:cell:forIndexPath 方法中,我执行以下操作:
...............
NSUIinteger row=indexPath.row;
UIImageView *imageView=[[UIIMage alloc]initWithImage:[images ojectAtIndex:row]];
if(self.interfaceOrientation==UIInterfaceOrientationPortrait)
imageView.Frame.Size=CGSizeMake(320.0,460.0);
else
imageView.Frame.Size=CGSizeMake(480.0,300.0);
imageView.contentMode=UIContentModeAspectFit;
[cell.contentView addSubView:imageView];
在tableview:height:forIndexPath 方法中:
double height;
if(self.interfaceOrientation==UIInterfaceOrientationPortrait)
height=460;
else
height=300;
return height;
我以同样的方式返回行的宽度。
【问题讨论】:
你需要展示一些代码让我们了解你在做什么。 【参考方案1】:首先,您是否在后台线程上进行任何绘图 (UIKit) 调用?这是这种绘图损坏的最常见原因。
接下来,你为什么在轮换后做reloadData
?如果您只是调整大小,那应该没有必要。这些是什么类型的图像?自动调整大小通常会满足您的需求,如果没有,您可以重新布局单元格而不需要重新加载它们。
我强烈怀疑这里有后台操作,但如果不是,那么我会怀疑您的 cellForIndexPath:
在旋转后没有返回有效单元格,这可能是您如何设置 imageView 的问题。
【讨论】:
我不使用任何绘图。我重新加载数据以再次执行 cell:forIndexpath 方法,因为我每次都更改图像视图的大小。 你在与 UIKit 相关的后台线程上做任何事情吗?添加或删除视图,弄乱 UIImageViews 等。这不仅仅是 drawRect: 这不是线程安全的。 我关于更改图像大小的观点是,您不必为此生成全新的单元格。您的单元格可以自行调整大小。自动调整大小通常很好,但您也可以在 UITableViewCell 中使用layoutSubviews
重新排列自身。请参阅此问题进行讨论:***.com/questions/5822946/…以上是关于旋转后图像变质的主要内容,如果未能解决你的问题,请参考以下文章