[iOS] 기묘한 에러메시지 "Unable to insert COPY_SEND"

이미지
오랫만에 옛날에 만들어 둔 iOS용 앱 프로젝트를 수정할 일이 생겼다. 그런데 문제를 수정하고 디버그 모드로 디바이스에 넣어서 실행시켜보니 괴상한 오류메시지가 로그 창에 찍히기 시작했다.

CALayer 와 CAAction

Implicit Animation 이전에 CALayer 애니메이션 에서 언급한 방법들은 Explicit Animation 즉 명시적인 애니메이션이라고 불린다. 이와 반대 개념으로 암시적인(Implicit) 애니메이션도 있을 터인데 이 암시적 애니메이션은 레이어의 동작(Behavior)에 의해 발동되는 애니메이션이다. 쉽게 말해서 프로퍼티 등에 값을 넣으면 애니메이션이 발동하면서 변화되는 모습을 보여준다. 프로그래머가 직접 애니메이션을 명령하지 않았지만 자동으로 애니메이션이 동작하였기에 암시적이라고 부르는 것이다. view.layer.contents = UIImage(named: "flower").cgImage 위 코드는 뷰 레이어에 이미지를 표시하는 기초적인 코드이다. 그런데 이 코드 이전에 이미 contents 에 이미지가 올라가 있는 상태라면 다른 이미지로 바로 바뀌지 않고 페이드 애니메이션, 즉 이미지가 서서히 나타나는 듯한 효과로 변경(transition)된다. 물로 OS나 기타 조건에 의해 바뀔 수는 있으니 절대적인 것은 아니다. 중요한 점은 그저 레이어의 프로퍼티를 바꿨는데 애니메이션이 발동된다 는 것이다. 이게 바로 암시적 애니메이션이다.

Swift 3.1 릴리즈

오늘 Xcode 8.3 이 정식으로 릴리즈 되면서 Swift 3.1 도 함께 정식 릴리즈 되었다. 그래서 변화점을 간략히 정리해 보려고 한다. 주관적(?)으로 정리할 것이기 때문에 정확한 내용은 영어 울렁증(?)이 없다면 공식 사이트의 릴리즈 노트 를 보는 것이 좋을지도 모른다.

Notification Snippets

복잡한 뷰 컨트롤러들을 다루면서 여기 저기 소속된 데이터를 다루려고 할 때 소유권 때문에 곤란함을 느낄 때가 많았다. 이럴 때 NotificationCenter 를 이용해 알림(Notification)을 던지는 방식으로 컨트롤러 객체들끼리 통신을 하기도 하는데, 뭐 하여간 이런 저런 여러 사유로 노티피케이션(Notification 혹은 NSNotification)을 사용할 일이 종종 있다. 하지만 항상 쓸 때 마다 느끼는데, 이 알림(Notification)의 이름(Name)을 찾는데 곤혹을 느끼곤 한다. 왜나하면 한군데에 정리된 것이 아닌 전역 상수 형태로 선언된 것이 대부분이기 때문이다. 물론 개인이 구현하는 프로젝트에서 쓸 Notification 은 굳이 이런 전통을 따를 필요는 없다. 누구나 한번 쯤은 해 볼 만한 Notification Snippets 를 한번 만들어 보자.

CATransition Animation (Core Animation)

이미지
레이어 이야기를 쓰다가 계속 삼천포로 살짝 빠지는 느낌이 들지만, 이번 글은 레이어 트랜지션(Transition), 즉 장면전환 애니메이션에 관한 글이다.

CALayer Animation (Core Animation)

이미지
CALayer 에 관한 글을 적으면서 애니메이션에 대해 언급할 필요가 생겼는데 간략히 하기에는 양이 너무 많은 것 같다. 그래서 이번엔 CALayer 애니메이션에 관한 것을 별도로 정리하려고 한다. CALayer 의 이름에서 볼 수 있는 머릿글자 CA 는 Core Animation 의 약자이다. Quartzcore 라는 거대한 시스템의 일부이기도 한 이 Core Animation 은 레이어 애니메이션을 위한 기능들로 구성되어 있다. 전체를 설명하기에는 양의 방대함도 그렇고 개인적인 지식도 문제가 되기 때문에 애니메이션과 관련된 Quartzcore 의 몇 클래스만을 정리해 본다.

CALayer - CAShapeLayer

이미지
CAShapeLayer 는 Shape 를 그리기 위한 CALayer 기반 클래스이다. 다르게 말하면 다각형 혹은 폴리곤을 그리기 위한 용도라고 볼 수 있다.