cocos2d-x iOS7에서 CCLabelTTF 렌더링 이슈
cocos2d-x 2.1.4 이하 버전은 iOS7에는 그림과 같이 CCLabelTTF 가 보이지 않는 렌더링 이슈가 있습니다. cocos2dx/platform/ios/CCImage.mm 파일을 수정해줘야 하는데 깃허브에 수정 된 내역을 보면
static bool _initWithString(const char * pText, cocos2d::CCImage::ETextAlign eAlign, const char * pFontName, int nSize, tImageInfo* pInfo)
{
...
// ios7
//CGContextRef context = CGBitmapContextCreate(data, dim.width, dim.height, 8, dim.width * 4, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGContextRef context = CGBitmapContextCreate(data, dim.width, dim.height, 8, (int)dim.width * 4, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
위와 같은 메서드의 내용중에 주석된 부분을 아래의 내용으로 대체해주면 됩니다. 즉 dim.withd * 4에서 (int)형 변환을 추가해주는 것이죠.
// normal fonts
/*
if( [font isKindOfClass:[UIFont class] ] )
{
[str drawInRect:CGRectMake(0, startH, dim.width, dim.height) withFont:font lineBreakMode:(UILineBreakMode)UILineBreakModeWordWrap alignment:align];
}
else // ZFont class
{
[FontLabelStringDrawingHelper drawInRect:str rect:CGRectMake(0, startH, dim.width, dim.height) withZFont:font lineBreakMode:(UILineBreakMode)UILineBreakModeWordWrap alignment:align];
}
*/
[str drawInRect:CGRectMake(0, startH, dim.width, dim.height) withFont:font lineBreakMode:(UILineBreakMode)UILineBreakModeWordWrap alignment:align];
또한 조금 밑부분인 위 소스도 아래와 같이 수정하라고 깃허브에는 있는데
// XXX: ios7 casting
//[str drawInRect:CGRectMake(0, startH, dim.width, dim.height) withFont:font lineBreakMode:NSLineBreakByWordWrapping alignment:(NSTextAlignment)align];
이건 이렇게 수정하지 않아도 이슈가 해결이 되더군요.
댓글
댓글 쓰기