Category Archives: iOS

아이폰 또는 아이패드 키노트에서 아이폰 또는 아이패드에 없는 폰트를 사용하는 법

맥을 사용하는 이유 중의 하나가 맥에는 키노트라는 PT 프로그램이 있기 때문입니다. 전 수업을 키노트를 이용해서 하는데 수업 한 번 하려고 매번 무거운 노트북을 들고 다니는 것도 너무 힘들거군요.

원래는 아이폰용 키노트가 맥용 키노트보다 품질이 좋지는 았지만, 애플이 맥에서 만든 키노트 파일을 아이폰에서도 그대로 사용하게 하기 위해서 맥용 키노트의 성능을 아이폰용 키노트에 맞춰 다운그래이드하고, 맥용 최신 버젼인 모하비에서는 아예 성능이 좋은 예전 맥용 키노트가 작동하지 못 하게 만들었습니다. 결국 이제는 맥용과 아이폰용 키노트는 거의 90% 같은 것이라고 할 수 있습니다.

이런 결과로 아이패드를 이용해서 수업시간에 키노트를 사용해서 PT를 해도 상관없게 되어버렸습니다.그런데 문제는 아이폰용 키노트는 아이폰에 없는 폰트를 공식적으로 사용할 수 없더군요. 그래서 맥에서 만들어서 iCloud Dive에 넣어 사용하려고 하면 폰트가 없다는 에러가 나오더군요. 그래서 상심하다가 혹시나 하고 찾아 봤더니 방법이 있었습니다. 아래 링크 참고!

How to install custom fonts on your iPhone or iPad | Cult of Mac

설치하는 방법은 다음과 같습니다.

  1. 아이폰이나 아이패드에서 iFont을 설치합니다. 돈을 내면 광고를 제거할 수 있지만, 굳이 그렇게 하지 않아도 폰트를 설치할 수 있습니다.
  2. 본인이 사용하고자 하는 폰트를 새로 폴더를 만들어서 거기에 넣고, 이 폴더를 zip으로 압축합니다. 맥에서는 파인더에서 “압축하기”를 쓰시면 됩니다. 그런 다음 이 압축한 파일을 iCloud Dive, dropbox 같은 곳에 업로드합니다. 전 iCloud Dive를 사용했습니다.
  3. 다 업로드 되면 아이폰이나 아이패드에서 위에서 올린 zip 파일을 ‘파일’이나 ‘dropbox’ 앱에서 확인합니다.
  4. 올린 파일을 선택해, ‘공유’ 메뉴가 나오면, 앞에서 설치한 iFont이 나올 것입니다. 이것을 선택하면, iFont이 폰트 파일의 압축을 풀고 저장합니다.
  5. 다 저장되면, iFont 앱을 실행합니다. 아래 메뉴에서 ‘files’를 선택하면 앞에서 저장한 폰트가 보일 것입니다. 여기서 아이폰에 설치하고 싶은 폰트 이름 옆에 있는 ‘install’ 버튼을 누르고 계속 진행하면 아이폰에 그 폰트가 설치될 것입니다.
  6. iFont 앱에서 ‘installed’ 메뉴를 누르시면 설치된 폰트를 확인하실 수 있습니다.
  7. 이제 키노트에서 서체를 선택하시면 앞에서 설치한 폰트를 사용할 수 있습니다.

Swift에서 array 초기화 하기

참 책을 만들면서 뭔가 바뀌면, 정오표를 만들어 제공하는 것이 예의인데, 그냥 개정판을 내는 것은 도리가 아닌 것 같다. swift에서 배열을 초기화하는 것은 다음과 같이 해서는 안 된다.

[code lang=swift]
var WrongArrayInit = Int[]()
[/code]

다음과 같이 해야 한다.

[code lang=swift]
var RightArrayInit = [Int]()
[/code]

애플 공식문서에 하면, “You can create an empty array of a certain type (without setting any initial values) using initializer syntax:

[code lang=swift]
var someInts = [Int]()
println("someInts is of type [Int] with (someInts.count) items.")
[/code]

BOOL 값을 NSDictionary 에 넣어보자.

BOOL 값과 같은 비 객체는 NSDictionary 에 넣을 수 없습니다. 그래서 다음과 같이 값을 숫자로 변신 시켜서 저장해야 합니다.  

BOOL isInReply;

NSNumber *isInReplyToNumberValue = [NSNumber numberWithBool:isInReply];

reply = [NSDictionary dictionaryWithObjectsAndKeys: reply_time, @"time", reply_id, @"iD", isInReplyToNumberValue, @"isInReply", reply_content, @"content", nil];

아이폰 앱을 만들 때, 객체를 알파 값을 바꿔 투명하게 만드는 것이 좋지 않군요.

인스펙터의 다음 항목은 알파 Alpha 값인데 이 항목을 다룰 때에는 매우 신중을 기해야 한다. 알파값으로 이미지 투명도를 조정하는데 알파값 설정에 따라 이미지를 투명하게 만들어서 뒤에 있는 컨트롤이 보이는 정도를 조절할 수 있다. 1.0 보다 작은 값이면, 뷰는 투명해서 밑의 객체를 투과시키기 때문에, 애플리케이션은 투명도 계산을 위해 프로세서 사이클을 소비한다. 그러니 확실한 이유가 있지 않으면, 1.0외의 값으로 설정하지 않는 것이 좋다.

“시작하세요 아이폰 프로그래밍: iPhone SDK를 이용한 아이폰 개발”, 66쪽

Strategy pattern을 Objective-C 로 만들어봤습니다.

Head First Design Patterns : 스토리가 있는 패턴 학습법을 읽고, 한번 만들어 봤습니다. 다음 글을 보고, 책에 있는 자바로 만들어진 오리로 만들어 봤습니다. 책을 더 참고하시면 더 확장하실 수 있습니다. 참고로 저는 아직까지 50, 52, 64 번째 줄이 정확히 이해가 안 됩니다. ^^;
How to create a strategy pattern in Objective-C?

[code lang=”objc”]
//
// main.m
// testing
//
// Created by Jaehwan on 11. 2. 9..
// Copyright 2011 Wireless Air. All rights reserved.
//

#import

@protocol FlyBehavior

@required
– (void) fly;

@end

@interface FlyWithWings : NSObject
{
// ivars for A
}
@end

@implementation FlyWithWings

– (void) fly
{
NSLog(@"Fly With Wings!");
}

@end

@interface FlyNoWay : NSObject
{
// ivars for A
}
@end

@implementation FlyNoWay

– (void) fly
{
NSLog(@"Fly No Way!");
}

@end

@interface Duck : NSObject
{
id flyBehavior;
}
@property (assign) id flyBehavior;

– (void) fly;

@end

@implementation Duck

@synthesize flyBehavior;

– (void) fly
{
[flyBehavior fly];
}

@end

int main (int argc, const char * argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// insert code here…
NSLog(@"Hello, World!");

FlyWithWings * flyWithWings = [[[FlyWithWings alloc] init] autorelease];
FlyNoWay * flyNoWay = [[[FlyNoWay alloc] init] autorelease];
Duck * context = [[[Duck alloc] init] autorelease];

[context setFlyBehavior:flyWithWings];
[context fly];
[context setFlyBehavior:flyNoWay];
[context fly];

[pool drain];
return 0;
}
[/code]