블로그 이미지
매몰

모바일 어플리케이션 개발 1인 기업 고영진모바일입니다. 저와 함께 맛깔스러운 앱을 만들어 보아요~

Rss feed Tistory
개발/ios 2013.09.04 00:02

쿼츠2D 에서의 문자 출력

Quartz2D 기반에서 기본적인 방법으로 문자를 출력하려 하면 한글이 출력되지 않는다.

뿐만 아니라 외부폰트도 적용하기 힘들다.


하지만 다행히 해결책은 있다. CoreText 를 이용하면 되는것이다.


먼저 CoreText framework를 등록하고 CTFrameRef를 만들어 CTFrameDraw() 출력하면 된다.


나는 아래와 같이 쓰기 편하게 좌표, 정렬, 크기, 색, 폰트를 매개변수로 하는 함수를 만들어 사용하고 있다.




#define ALIGN_LEFT 0

#define ALIGN_RIGHT 1

#define ALIGN_TOP 2

#define ALIGN_BOTTOM 3

#define ALIGN_CENTER 4


- (CTFrameRef)getFrameText:(NSString *)text :(CGFloat)x :(CGFloat)y :(int)alignx :(int)aligny :(CGFloat)size :(id)color :(NSString *)font {

//문자를 생성한다

    NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:text];

    

//폰트를 불러와 생성한다. 이때 폰트에 크기를 설정한다 

    CTFontRef fontref = CTFontCreateWithName((CFStringRef)font), size, NULL);

    

//문자에 생성된 폰트를 넣는다

    [string addAttribute:(id)kCTFontAttributeName value:(__bridge id)fontref range:NSMakeRange(0, [string length])];


//문자에 색을 넣는다

    [string addAttribute:(id)kCTForegroundColorAttributeName value:color range:NSMakeRange(0, [string length])];

    

//문자를 CTFrameRef로 만들기 위해 setter로 변환한다.

    CTFramesetterRef textframesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)string);

    

//정렬을 위해서 문자rect크기를 구한다

    CGSize textsize = [text sizeWithFont:[UIFont fontWithName:font size:size]];


//문자 x,y좌표를 정렬종류에 따라 재배치한다

    switch (alignx) {

        case ALIGN_RIGHT:

            x = x - textsize.width;

            break;

            

        case ALIGN_CENTER:

            x = x - (textsize.width / 2);

            break;

    }

    

    switch (aligny) {

        case ALIGN_TOP:

            y = y - textsize.height;

            break;

            

        case ALIGN_CENTER:

            y = y - (textsize.height / 2);

            break;

    }

    

//문자rect를 설정한다

    CGMutablePathRef textpath = CGPathCreateMutable();

    CGPathAddRect(textpath, NULL, CGRectMake(x, y, textsize.width, textsize.height));

    

//CTFrameRef를 생성한다

    CTFrameRef textframe = CTFramesetterCreateFrame(textframesetter, CFRangeMake(0, 0), textpath, NULL);

    

//자원을 해제한다

    CGPathRelease(textpath);

    CFRelease(textframesetter);

    CFRelease(fontref);

    

    return textframe;

}




끝으로 drawRect에 문자를 출력한다




CTFrameDraw([self getFrameText:@"테스트" :10 :100 :ALIGN_LEFT :ALIGN_CENTER :15.0 :(id)[UIColor colorWithRed:(157.0f/255.0f) green:(126.0f/255.0f) blue:(81.0f/255.0f) alpha:1.0f]], context);





서적과 인터넷에서 얻은 자료를 바탕으로 나름 저의 방식으로 바꾸어서 사용하고 있어요...

오로지 저의취향에 맞췄기 때문에 이상한 부분이 있어도 이해해 주세요ㅎㅎ







 

 매몰: 고영진 대표/개발자


 고영진모바일 1인기업의 하나뿐인 사람. 

 그밖에 동반자 노트북,스마트폰 

     실패만 하고 있어도 꿈을 포기하지 않는 남자. 

     제가 직접 경험하고 습득한 지식을 위주로 올릴게요. 







사업자 정보 표시
고영진모바일 | 고영진 | 서울특별시 관악구 낙성대동 서울대연구공원 SK상생혁신센터 | 사업자 등록번호 : 109-11-82076 | TEL : 010-9990-3674 | Mail : gyjmeba@hanmail.net | 통신판매신고번호 : 2010-서울강서-0217호 | 사이버몰의 이용약관 바로가기
개발/ios 2013.08.24 15:28

아이폰용 게임을 만드는 네가지 방법

아이폰용 게임을 만들기 위해서 크게 네가지 방법을 이용할 수 있다...

UIKit, 쿼츠2D, OpenGL ES, 게임엔진이 그것이다.


UIKit은 사실 게임보다는 일반 어플을 만드는데 사용된다.

쉽게 말하면 버튼이나 레이블같은 인터페이스가 제공되어 포토샵을 하듯 화면에 붙여넣고 컨트롤러를 등록하여 사용자반응을 감지하면 된다.


아이폰은 안드로이드에서와는 틀리게 기본적으로 애니메이션효과가 강력하다. 즉 기본적인 하드웨어 가속이 비교적 빨라 복잡하지 않은 게임이라면 UIKit으로도 충분히 게임을 만들수 있다...

아이폰게임개발 관련책에는 최대 60fps로 실행되는 게임들을 위한 최고의 선택이라고 되어있다.


쿼츠2D는 ios가 기본적으로 제공해주는 그래픽엔진이다. UIKit도 내부적으로는 쿼츠2D로 되어있다고 한다.

제가 게임개발에 이용하는것이 바로 이 쿼츠2D이다. 앞으로의 ios 게임관련해서는 이것을 기반으로하여 쓰게 될것이다.


OpenGL ES는 다들 아실것이다. 굳이 설명은 안하겠다.


게임엔진은 유니티나 코코스등으로 굳이 ios나 오브젝티브-C 지식이 없어도 쉽게 만들수 있다.


처음에 아이폰용 게임을 만들려고 마음먹었을때 알아봤던 내용이었는데 혹시나 궁금해 하는분이 있을까해서 올려봐요~







 

 매몰: 고영진 대표/개발자


 고영진모바일 1인기업의 하나뿐인 사람. 

 그밖에 동반자 노트북,스마트폰 

     실패만 하고 있어도 꿈을 포기하지 않는 남자. 

     제가 직접 경험하고 습득한 지식을 위주로 올릴게요. 







 

  

사업자 정보 표시
고영진모바일 | 고영진 | 서울특별시 관악구 낙성대동 서울대연구공원 SK상생혁신센터 | 사업자 등록번호 : 109-11-82076 | TEL : 010-9990-3674 | Mail : gyjmeba@hanmail.net | 통신판매신고번호 : 2010-서울강서-0217호 | 사이버몰의 이용약관 바로가기
TOTAL 69,581 TODAY 10