2011-06-16 160 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