2011-06-16 102 views
0

我有一个UIYableView,并且我在该tableview中保留图像,每次旋转手机时都会更改UIImageView的大小。我检查了tableView:cell:forIndexpath中的self.interfaceOrientation,并决定给imageview提供什么样的尺寸。每当旋转发生时,我关闭cource重新加载tableview。但旋转后,图像似乎混合。我的意思是我在另一幅图像上得到了一幅图像的一部分。解决这个问题的最佳方法是什么?旋转后图像变坏

编辑:添加一些代码

在实现代码如下:细胞: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中

:身高:forIndexPath方法:

double height; 
if(self.interfaceOrientation==UIInterfaceOrientationPortrait) 
height=460;  
else 
height=300; 
return height; 

我回行的宽度也是一样。

+0

你需要展示一些代码让我们了解你在做什么。 – jv42 2011-06-16 12:06:41

回答

1

首先,你是否在后台线程上进行任何绘图(UIKit)调用?这是这种绘图损坏的最常见原因。

接下来,你为什么在转动后做了reloadData?如果你只是调整大小,这应该没有必要。这些是什么样的图像?一般来说,Autoresizing会按你想要的做,如果没有,你可以重新布局单元而不用重新加载它们。

我强烈怀疑后台操作在这里,但如果没有,那么我会怀疑您的cellForIndexPath:在循环后没有返回有效的单元格,可能是您设置imageView的问题。

+0

我不使用任何绘图。我重新加载数据以获取单元格:forIndexpath方法再次执行,因为我每次都更改图像视图大小。 – 2011-06-16 12:28:42

+0

你是否在与UIKit相关的后台线程上做任何事情?添加或删除视图,搞乱UIImageViews等等。它不仅仅是drawRect:它不是线程安全的。 – 2011-06-16 12:29:51

+1

我关于改变图像的观点是,你不应该为此产生全新的细胞。你的细胞可以调整自己的大小。自动调整大小通常很好,但你也可以在你的UITableViewCell中使用'layoutSubviews'来重新排列自己。看到这个问题的讨论:http://stackoverflow.com/questions/5822946/auto-resizing-uitableview-on-rotation-with-flexible-width – 2011-06-16 12:35:13