본문 바로가기

Swift

find a correct frame of a each UICollectionViewCell



2016.7.6 업데이트:

아래 내용은 실제 화면상에 보여지는 frame 정보가 아니었다.

UICollectionView 상에서 위치하는 frame 정보였다.

그러므로 화면 최상단에 위치하고 있더라도 collectionView의 하단에 위치하는 놈이라면 저 아래에 위치한 frame 정보가 반환된다.


아.. 화면 상에 보여지는 실제 위치는 어떻게 구할 수 있을 것인가?!

번뜩 떠오르는 아이디어.

collectionview.contentOffset 만큼 빼주면 되겠는 걸?


결론: 이것이 바로 실제 위치다!!

let collectionViewOffset = self.collectionView.contentOffset

let activeFieldOrigin = CGPointMake((activeField!.superview?.superview?.frame.origin.x)! - collectionViewOffset.x, (activeField!.superview?.superview?.frame.origin.y)! - collectionViewOffset.y)


어쨋든 superview x2를 쓸 일이 있게 되어 참 다행이다!!



UICollectionView 상에서 각각의 UI들의 실제 위치를 파악해야 할 일이 생겼다.

(키보드가 올라오는 만큼 UI들을 올려주기 위해서..)


그러나 웬걸..

각각의 frame들을 찍어보니 엉뚱한 frame 정보만 나왔다.


생각해보니 그게 맞는 것도 같다.


왜냐면 각각의 Cell들은 별도의 UIView 이므로 새로운 frame을 가질테니까..


그러다가 호기심에 다음과 같이 찍어 보았더니 제대로 된, 내가 알고자 하는 실제 frame 정보가 나오는 것이 아닌가?!


debugPrint("activeField!.frame.origin=\(activeField!.superview?.superview?.frame)")


그러나 웃긴 것은 정작 이 frame 정보를 간신히 알아냈더니 더 좋은 방법을 찾아내서 쓸모가 없어졌다는거~

그래도 나중에 또 쓸 일이 생길까봐 여기에 적어놓는다.