목록iOS (24)
이모저모
Type method 인스턴스 method와 매우 유사하지만, 인스턴스에서 호출하는것이 아니라 type에 대해서 호출하는 method이다.(다른 언어에 보자면 클래스 메소드라 불리는 것들을 의미) Type method를 표현하기 위해서는 2가지 방법- class keyword 사용- static keyword 사용 아래 예제를 보자.1234567891011121314151617181920212223242526272829class BaseClass { class func classMethod() -> String { return "BaseClass \(#function)" } static func staticMethod() -> String { return "BaseClass \(#function)" }}..
Handling UIKit Gestures제스쳐 인식기를 사용하여 터치 처리를 단순화시키고, 사용자에 일관된 환경을 만들어준다. Overview제스쳐 인식기는 뷰에서 touch 또는 press 이벤트를 처리하는 가장 간단한 방법입니다. 어떤 뷰에도 1개 이상의 제스쳐를 붙일 수 있습니다. 제스쳐 인식기는 해당 뷰에 대해 들어오는 이벤트를 알려진 패턴과 매칭하여 해석하고 처리하는 일련의 로직들을 캡슐화 한 것입니다. 제스쳐 인식기가 매치되면 해당 객체에 알려준다.(이것은 전형적인 Target-Action 이다.) 이 객체는 ViewController, View 또는 앱의 다른 객체가 될 수 있다. 제스쳐 인식기는 Target-Action 패턴을 사용하여 노티를 전송한다. UITapGestureRecogni..
iOS에서는 image를 asset에 넣어서 사용한다. image asset에서는 normal, 2x, 3x 이렇게 나누어져 있다. 회사마다 이미지를 2x, 3x 다 넣는 곳도 있겠지만, 2x만 넣는 곳도 있을 것이다. 이때 궁금했던점이 Q) 3x 디바이스에서 2x 이미지를 어떻게 처리할 까? A) image asset에 있는 포인트 좌표를 따라간다. 1. 200 X 200 (픽셀) 이미지가 2d asset에 넣어졌다하면 2. 100 X 100, 2 scale의 이미지로 본다. (뷰 좌표계로 본다면) 3. 3x 디바이스에서 해당 이미지를 가져오면 100 X 100 자체의 포인트 좌표계를 먼저 보게된다. 그리고 scale링을 한다. 4. 그래서 3x, 2x 디바이스나 똑같은 크기의 이미지를 보게 된다.(3..
Label 에서 text 설정할 때 Label의 길이를 넘어갈 수 있다. 이 때 스토리 보드에서 (물론 코드도 있다.) 1. Line Break위 설정에서 앞, 중간, 뒤가 텍스트가 짤리는 것을 설정할 수 있다. 2. Autoshrink위 설정으로 최소 font 사이즈를 설정하여 현재 font에서 1씩 줄여가며 텍스트가 짤리는 여부를 확인한다. 짤리지 않으면 그 font사이로 설정한다. 최소 font도 짤리게 되면 짤린 상태로(최소 font size) 보여지게된다.
ios 에서c 파일과 .mm 파일을 혼용하여 사용할 때 undefine symbol error가 나는 경우가 발생한다. 분명 정의를 찾아가 보면 함수가 정의되어 있지만 링커는 찾지 못한다고 한다. 그 이유는 C++에서는 name mangling이 발생하기 때문이다. name mangling 이란?간단히 말하면 컴파일러가 임의로 함수나 변수의 이름을 변경하는 것이다. 이것은 C++의 함수 오버로딩 때문이다. C에서는 보통 symbol table 이 _function name 으로 되는데C++ 에서는 name mangling이 되기 때문에, C 함수를 C++함수로 인식하게 되면 mangling 된 함수로 찾기 때문에있어도 찾지 못하는 것이다. 그래서 해결방법 해당 C 헤더 파일을 extern "C"{ 헤더 ..
Objective-C block에서 캡쳐에 대한 고찰 예제 1[someObject messageWithBlock:^{[self someMessage];...}]; 예제 2__weak typeof(self) weakSelf = self;[someObject messageWithBlock:^{__strong typeof(weakSelf) strongSelf = weakSelf;[strongSelf someMessage];...}]; 다음과 같은 예제가 있다 무슨 차이가 있을까?1. 예제 2가 예제1에 비해 안전하다.(weak로 self가 dealloc 되더라도 nil이 셋팅되기 때문에)이것 밖에 없을까??? 아니다.2. self의 life cycle이 서로 다르다.block이 셋팅될 때 캡쳐된 변수를 ret..
CallKit앱의 voip 서비스를 위한 시스템 호출 UI를 표시하고, 호출 서비스를 다른 앱 및 시스템과 일원화한다. Overview콜킷을 사용하면 전화 서비스를 시스템의 다른 통화 관련 앱과 통합할 수 있다. 콜킷은 호출 인터페이스를 제공하며, voip 서비스와의 백엔드 통신을 처리한다. 수신 및 발신의 경우 콜킷은 전화 앱과 동일한 인터페이스를 표시하므로 앱의 기본 모양과 느낌이 향상된다. 또한 콜킷은 방해 금지와 같은 시스템 수준의 동작에 적절하게 응답을 한다.통화 처리 외에도 전화번호부 앱 확장을 제공하여 발신자 ID정보와 서비스와 관련된 차단된 전화 번호 목록을 제공할 수 있다.Receiving an Incoming Call수신 통화를 받도록 앱을 구성하려면 먼저 CXProvider 객체를 만..
Implementing a Container View ControllerContainer view controllers are a way to combine the content from multiple view controllers into a single user interface. Container view controllers are most often used to facilitate navigation and to create new user interface types based on existing content. Examples of container view controllers in UIKit include UINavigationController, UITabBarController,..
NSTimer특정 시간이 간격이 지난 후 시작되어 지정된 메시지를 타겟 객체로 보내는 타이머 입니다.Overview타이머는 런 루프와 함께 작동한다. 런 루프는 타이머에 대한 강력함 참조를 유지하므로, 런 루프에 추가한 후에 타이머에 대한 강력한 참조를 유지할 필요가 없다.타이머를 효과적으로 사용하려면 런 루프가 작동하는 방법을 알아야합니다. 자세한 내용은 See Threading Programming Guide 타이머는 실시간 메커니즘이 아니다. 런 루프가 타이머를 모니터링하지 않는 모드에 있는 경우 런 루프가 타이머를 확인할 때까지 타이머가 실행되지 않는다. 따라서 타이머가 실제로 실행되는 시간은 훨씬 늦을 수 있다. See also Timer Tolerance.NSTimer는 CFRunLoopTim..
iOS에서는 홈 버튼 + 전원 버튼을 동시에 누르면 화면 캡쳐를 할 수 있다.그렇다면 프로그래밍 적으로 화면 캡쳐를 할 수 있는 방법을 알아 보자. 이 방법은 iOS 7 이상이면 사용 가능하다. UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0); [self.view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:YES]; UIImage *sCaptureImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIImageWriteToSavedPhotosAlbum(sCaptureImag..