Home » iOS

iOS

(Swift) 폰트의 포스트 스크립트 이름 확인 방법

CATextLayer에서 텍스트의 폰트를 지정해주려면, CTFontRef를 만들어서 넘겨주어야 한다. 이 값은 CTFont 나 CGFont 타입과 브릿징되기 때문에 CTFont를 만들어야 한다. 만약 시스템에 설치된 서드파티 폰트를 사용해서 CTFont 객체를 만들려면 해당 폰트의 포스트 스크립트 이름을 알고 있어야 한다. 즉 CATextLayer에서 커스텀 폰트를 사용하려면 해당 커스텀 폰트의 포스트스크립트 이름이 필요하다는 이야기이다. macOS에서는 간단하게 서체 관리자에서 해당 폰트를 선택하여 정보보기(cmd + i)를 통해 PostScript Name을 확인해서 이 값을 알 수 있다. 그런데 iOS에서는 서체 관리자가 없기 때문에 이 방법을 쓸 수 없다. 대신에 다음… 더 보기 »(Swift) 폰트의 포스트 스크립트 이름 확인 방법

코어 이미지를 통한 이미지 분석 예제

코어 이미지(Core Image)는 흔히 알려진 바와 같이 이미지에 대한 고성능 필터 효과 처리를 지원하는 프레임워크이면서 이미지에서 사람의 얼굴이나 QR코드, 텍스트를 탐지해내는 탐지 기능도 제공하고 있다. 코어 이미지가 제공하는 이미지 분석 기술을 제공하면 이러한 탐지를 빠르게 수행할 수 있을 뿐 아니라, 코어 이미지의 여러 필터 기능을 활용해서 찾아낸 부분을 하이라이트 처리하는 등의 기능을 손쉽게 구현할 수 있다. 이 글에서는 코어 이미지의 디텍터 클래스인 CIDetector를 사용하여 이미지에서 특정한 형상을 찾는 방법에 대해서 알아보고자 한다. 이미지에서 특정한 형상을 찾기 코어이미지가 제공하는 이미지 분석… 더 보기 »코어 이미지를 통한 이미지 분석 예제

NSPersistentContainer를 통한 코어데이터 스택생성하기

macOS Sierra로 업데이트되면서 코어데이터에 NSPersistentContainer 클래스가 추가되었다. 이 클래스를 사용하면 코어데이터 스택을 셋업하는 여러 귀찮은 과정을 생략하고 간단하게 처리할 수 있다. 사실 코어데이터 스택을 수동으로 셋업하는 과정에서 필요한 정보는 코어데이터 모델 파일의 이름과, 저장소 파일을 생성할 위치 정도이며, 그외의 대부분의 코드는 보일러 플레이트라 할 수 있다.  저장소 파일 위치는 적당한이름(?)으로 사용자 라이브러리 내에 만들어지므로 결국 최소한으로 필요한 정보는 데이터 모델 파일 이름이 된다. 즉 관리 객체 모델의 이름만 있다면 코어데이터 스택의 초기화에 필요한 코드는 사실상 동일하다 하겠다.

더 보기 »NSPersistentContainer를 통한 코어데이터 스택생성하기
Pages: 1 2

스크롤 뷰 사용하는 방법 – UIScrollView

제한된 크기의 스크린을 가지고 있는 iOS 기기에서 고해상도의 이미지를 보여줄 때는 화면에 맞게 이미지 사이즈를 축소하거나, 화면상에 이미지의 일부만을 표시하면서 스크롤을 통해서 이미지를 탐색하게 한다. 스크롤뷰는 이러한 포토뷰어 등에서 많이 사용되며, 이를 위해 코코아 터치에서는 UIScrollView를 제공한다. UIScrollView는 간단한 코드로도 기본적인 스크롤 뷰 기능을 제공하며, 손쉽게 핀치를 통한 줌인/줌아웃을 지원할 수도 있다. 이 포스트에서는 UIScrollView를 생성하고 추가하는 기본적인 사용에서 핀치를 통한 줌인/줌아웃과 더블 탭을 통한 자동 확대를 어떻게 구현하는지 설명할 것이다.
더 보기 »스크롤 뷰 사용하는 방법 – UIScrollView

Tap and Hold 구현하기 – iOS, Swift

tap and hold 구현하기

UIButton은 기본적으로 단일 탭에 대해서 액션 메시지를 발신하게끔 디자인되어 있고, 따라서 별도의 UITapGestureRecognizer가 없어도 동작할 수 있다. 하지만 더블탭, 트리플 탭이나 길게 누르기등의 동작에 대해서는 여타 다른 UIView들과 마찬가지로 동작 인식기를 필요로한다. 더 보기 »Tap and Hold 구현하기 – iOS, Swift

(Swift) iOS, OSX에서 이미지 저장하기

이미지를 저장하기

이미지를 JPEG, PNG 데이터로 만드는 것은 UIKit의 표준함수를 이용할 수 있다.

func UIImageJPEGRepresentation(_ image: UIImage!, _ compressionQuality: CGFloat) -> NSData!
func UIImagePNGRepresentation(_ image:UIImage!) -> NSData!

이를 이용해서 데이터를 저장할 수 있다. NSData로 만들어서 그냥 저장하면 되니까.

func saveImage(image: UIImage, toURL url: NSURL, withFormat format:ImageSavingFormat = .PNG) {
    let data: NSData
    switch format {
    case .PNG:
        data = UIImagePNGRepresentation(image)
    case .JPEG:
        data = UIImageJPEGRepresentation(image, 1.0)
    }
    var error: NSError?
    data.writeToURL(url, atomically: false, error: &error)
    if error != nil {
        println("Fail to save image")
    } else {
        println("successfully saved.")
    }
}

더 보기 »(Swift) iOS, OSX에서 이미지 저장하기

tableview 셀 생성

테이블 뷰의 데이터소스 프로토콜에는 -tableView:cellForRowAtIndexPath: 라는 메소드가 있다. 이 메소드는 테이블 뷰 상의 특정 위치에 들어갈 cell 객체를 알려주는 메소드로 프로그래머가 작성해주어야 하는 부분이다. 일반적으로는 이렇게 작성했다.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    const NSString *reuseID = @"cell";
    UITableViewCell *cell = [tableView dequeReusableCellWithIdentifier:reuseID];
    if (cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseID];
    }
    ...
    return cell;
}

더 보기 »tableview 셀 생성

iOS에서 SQLite3 사용하는 방법 (Objective-C)

Swift3 버전에 대한 SQLite3 사용법은 이 포스트를 참고하시라.

예전에 쓴 글이 있기는 하지만, 그냥 요리법처럼 쓴 글이기도 하거니와 소스코드에서 뭔가 글자가 빠지는 등(syntax highlighter를 안써야 겠지만 기존 글 고치기가 귀찮아…) 문제가 많아 내용을 보충해서 다시 작성.
애플은 SQLite3를 직접 인터페이스하는 것보다는 코어데이터를 사용하라고 권장하고 있고, (실제로 있다가 빠진 것인지는 알 수 없으나 그런 주장을 하는 사람들이 종종 있다) 애플 개발자 문서에서도 관련 내용을 내렸다고 한다. (하지만 이는 사실이 아닐 거라 생각한다. 왜냐면 iOS에서 SQLite3를 인터페이스 하는 부분은 전적으로 libsqlite3를 사용하는 것이고, 이에 대한 문서는 SQLite3 홈페이지에 가면 있기 때문이다) 더 보기 »iOS에서 SQLite3 사용하는 방법 (Objective-C)

iOS 앱의 구조

아이폰 앱 강좌를 검색하다보면 IB없이 만들기와 관련된 강좌가 상당히 많다. 즉 인터페이스 빌더 없이 모든 UI를 코드로 제어하는 형태로 앱을 개발하는 방법이다. 초보자에게는 추천하기 어렵고 또한 이렇게 코드로 UI를 구성하면 준비해야 하는 코드가 상당히 많아지는데, nib 파일로부터 객체가 생성되는 부분 특히 이렇게 어디선가 갑자기 툭 튀어나오는 객체들을 어떻게 처리해야 할지에 대해서는 좀 난감한 부분들이 있다보니 nib 파일을 사용하지 않는 방식으로 개발을 많이 하고 있는 것 같다.

그래서 오늘은 iOS앱의 구조에 대해 잠시 살펴보도록 하겠다. 분명 IB, 즉 nib 파일을 사용하는 방식은 빠른 시간안에 UI 레이아웃을 구성하고 시각적으로 조정하므로 별도의 컴파일없이 시각적으로 결과물을 확인할 수 있다는 점에서 장점을 가진다. nib 파일에 대한 이해가 어느 정도 충족된다면 인터페이스 빌더를 사용하여 앱을 개발하는 것이 그다지 나쁜 것만은 아님을 알 수 있을 것이다.

더 보기 »iOS 앱의 구조

[iOS] 아이콘의 자동 광택 효과 제거하기

iOS에서는 앱의 아이콘에 대해서 자동으로 모서리를 둥글게 잘라내고 광택 효과를 입혀주지만, 경우에 따라서는 아이콘의 광택 효과를 원하지 않을 수도 있다. 앱의 기본 Info.plist 파일 (앱이름-Info.plist로 Supporting FIles 폴더에 있음)을 열고, 키를하나 추가해준다. 키 이름, 타입, 값은 다음과 같다. Icon already includes glossy effects : boolean : YES (I자만 치면 자동으로 나타남) 이제 앱을 빌드해서 시뮬레이터에서 광택효과가 없이 matte하게 표시되는 아이콘을 볼 수 있을 것이다. *Xcode4에서는 이미 타겟 세팅에서 체크만 하면 된다. 앱 아이콘 끌어다 놓는 부분 오른쪽에 있으니 잘 찾아본다.