본문 바로가기

Swift

(57)
imageView를 버튼처럼 사용하기 ImageView를 버튼처럼..버그없는 최종 소스는 이것이다. 이 소스의 특징은 CollectionViewCell 안에 있는 imageView에서 제스쳐를 인식하고 CollectionView에서 해당 제스쳐를 처리하도록 한 것이다.CollectionView Class에서 아래와 같이 UITapGestureRecognizer를 target:self로 생성하고 이 제스쳐를 cell.imageView에 추가하는 것이 핵심이다. cell.imageView.userInteractionEnabled = true let nextTap = UITapGestureRecognizer(target: self, action: #selector(handleNextTap)) cell.imageView.addGestureRecog..
재사용 가능한 KeyboardExtenstion.swift 2016.7.6 업데이트:ver 1.1로 올렸다.아래 발견한 버그?를 수정했기 때문이다. 이제 정상 작동하다. 신난다. 드디어 재사용 가능한 키보드 확장 기능을 구현했다. ver 1.0에 불과하지만..당장 내가 필요한 기능만 가졌고, 원천 클래스에 약간의 설정이 필요하긴 하다. 1. 키보드가 나타날 때 커서가 위치한 textField가 키보드에 가려진다면 화면을 스크롤하여 키보드 위로 나오게 한다.(사실 글 올리자마자 버그? 발견.. ㅋㅋ. textField가 키보드에 가려져있지 않아도 화면을 올려버리는 바람에, 만약 textField가 화면 최상단에 있다면 오히려 사라질 판이다. ㅋ)2. 키보드가 사라질 때 위 1번의 위치 변경 사항을 원복시킨다. 사실 대단한 기능은 아닌데 이를 UICollection..
find a correct frame of a each UICollectionViewCell 2016.7.6 업데이트:아래 내용은 실제 화면상에 보여지는 frame 정보가 아니었다.UICollectionView 상에서 위치하는 frame 정보였다.그러므로 화면 최상단에 위치하고 있더라도 collectionView의 하단에 위치하는 놈이라면 저 아래에 위치한 frame 정보가 반환된다. 아.. 화면 상에 보여지는 실제 위치는 어떻게 구할 수 있을 것인가?!번뜩 떠오르는 아이디어.collectionview.contentOffset 만큼 빼주면 되겠는 걸? 결론: 이것이 바로 실제 위치다!!let collectionViewOffset = self.collectionView.contentOffsetlet activeFieldOrigin = CGPointMake((activeField!.superview..
touchesBegan in UICollectionView 아.. 몇 시간 동안 삽질해서 알아낸 것이 아래 내용이다. UICollectionView에서의 기능touchesBegan : 원래 목적은 TextField를 제외한 화면 아무데나 터치하면 키보드를 dismiss하려고 넣은 메소드이나 UICollectionView에서는 아무리 해도 이 메소드가 호출되지 않는 것을 알게 됨. 대안은 아래 주석과 소스로 설명 대체// 텍스트필드말고 다른 곳 터치하면 키보드를 가리도록 한다. // 고대로부터 전해져 내려오는 얘기로는 UITableView, UICollectionView는 이 메소드가 먹지 않는다고 한다. // 물론 toucheBegan을 Cell에 장착하면 이벤트가 발생한다. 하지만 Cell과 Cell사이를 탭하거나 Section Header를 탭할 때는 역시 ..
UICollectionViewCell을 다룰 때 중요한 점 아.. 이거 때문에 한참을 헤맸다.. 어제 저녁부터 오늘 점심까정~ Cell에서 UI들의 위치가 이상하게 표현되어 도대체 이게 왜 그런가 엄청 고민을 했다.Cell은 세 가지의 뷰로 구성이 되는데,ContentView - SelectedBackgroundView - BackgroundView이다. 그런데 나는 계속 UI들의 frame을 cell.frame에 맞췄던 것이다.아무리 로그를 찍어보아도 frame 수치상으로는 맞는 것 같은데 UI들은 희하한 frame을 갖는 것이었다. 그러다가 그냥 우연히도 UI들.frame = cell.contentView.frame 하니까 이제야 제대로 나오는 것이 아닌가!참내.. cell.contentView.frame이 이렇게 중요했다니.. 이걸 몰랐던 그동안 내 심정은..
View animation과 keyboard의 becomeFirstResponder 처리 문제점Self.view 안에 여러 개의 view를 추가하여 마치 카드 넘기는 것처럼 처리를 하였다. view가 추가될 때 마다 왼쪽에서 slide in 하는데, 마침 해당 view에 textfield가 있었다. 그래서 textfield에 becomeFirstResponder()처리를 하였더니 view가 왼쪽에서 들어오는 animation 도중에 keyboard가 튀어올라오는 것이 아닌가? 문제는 키보드가 튀어나오면서 정작 보여져야 하는 textfield를 가리는 것이었다. keyboard 이벤트를 등록하여 별 처리를 다 해보았지만 view animation 때문에 해당 이벤트 처리가 잘 안 되었다. 결국 해결 방법은 animation이 끝나고 나서 키보드가 나오게 하는 방법 밖에는 없다고 생각되었다.So..
NSFileWrapper 사용법 좀 오래된 글이지만 아직 유효한듯 하니 참조하자.http://10apps.tistory.com/9
UIDocument를 이용한 iCloud Storage 사용하기 왜 UIDocument를 써야 하는가?파일을 iCloud에 저장하고 싶다면 UIDocument가 애플이 제공하는 여러 방법 중 가장 기본적인 방법이다. 왜 UIDocument를 Subclassing을 해야 하는가?UIDocument는 추상클래스이니까 직접 호출하여 사용할 수 없다.sbuclassing할 때 아래 두 개의 메소드는 반드시 구현을 해야 한다.contentsForType(_:Error:)이 메소드는 데이터가 파일이나 문서에 쓰여질 때 호출된다. 이 메소드는 쓰여질 데이터를 모으고 이를 NSData나 NSFileWrapper로 리턴할 수 있다.결국 iCloud에 저장하고자 하는 데이터를 가져와서 NSData나 NSFileWrapper로 리턴하는 역할을 하는 것 같다.loadFromContents..