2013-07-18 82 views
1

我有嵌入在滾動視圖UICollectionView單元格的中心點:see picture獲取滾動內嵌視圖

每個白方塊是一家集視圖單元格。用戶可以水平滾動顯示其他單元格。

當用戶點擊一個單元格時,我創建了一個動畫,導致該單元格從它自己的中心向外擴展,並向新的視圖控制器轉換。

下面是代碼:

//cell is selected: 

//grab snapshot of cell 
UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath]; 
UIImage *cellImage = [self imageOfCollectionCell:cell]; 

//hold the snapshot in this dict  
NSMutableDictionary *cellImageDict = [[NSMutableDictionary alloc]init]; 
[cellImageDict setObject:cellImage forKey:SELECTED_INBOX_EMAIL_IMAGE]; 
[ViewControllerSnapShotDictionary sharedInstance].vcdict = nil; 
[ViewControllerSnapShotDictionary sharedInstance].vcdict = cellImageDict; 

//get the center of the cell (HERE IS WHERE THE PROBLEM IS) 
CGPoint cellCenter = CGPointMake(cell.center.x, cell.center.y); 

//do the animation using the snapshot and cell center 
[self startPinchingOutCellFromCenterPoint:cellCenter forTransitionTo:emailController withSnapShotImage:SELECTED_INBOX_EMAIL_IMAGE]; 

的代碼工作正常,但如果集合視圖已滾動。動畫要求我知道單元格的中心在屏幕上的哪個位置,觸摸的位置以及相對於我正在查看的視圖的座標的位置。然而

cell.center.x = 490 
cell.center.y = 374 

,如果我做滾動到:

例如,如果集合看法並沒有被滾動,而我選擇了上述圖像的中心單元,該中心還不如回右,然後選擇新的中心單元,我可能會得到這樣的:

cell.center.x = 1770 
cell.center.y = 374 

我的問題是,是否有任何更好的方法來完成我想做的事,或者是有一種方式來獲得它位於細胞中心的一個手柄在self.view中的當前位置?

回答

3

我認爲這是因爲中心座標位於collectionView的座標系(滾動)。您需要將其轉換爲不滾動的座標系。

嘗試這樣:

CGPoint realCenter = [collectionView convertPoint:cell.center 
            toView:collectionView.superview]; 

它能做什麼,基本上是將來自的CollectionView的座標系的中心,它的父應該是固定的(不滾動)。

,你甚至可以通過傳遞零作爲參數,獲取屏幕(窗口)的座標:

CGPoint realCenter = [collectionView convertPoint:cell.center 
            toView:nil]; 

它是由你來決定哪個座標要轉換。