2012-09-16 5 views
0

다른 색상의 문자를 다른 색으로 칠하는 복잡한 스크립트가 포함 된 교육용 앱을 만들고 있습니다. UILabel은 문제가되지 않으므로 핵심 텍스트를 뚫어 보았고 놀랍게도 성공적으로 페인팅 글리프를 사용하고 있습니다 (CALayers).맞춤 텍스트의 크기를 애니메이션으로 변환하는 방법은 무엇입니까?

내가 할 수 없었던 것은 내 맞춤 텍스트의 크기를 움직이는 것입니다. 기본적으로 화면 주위를 움직이는 '타일'(CALayers) 텍스트가 있습니다. 움직이는 것은 괜찮습니다. 그러나 이제는 사용자가 누르는 것을 확대하고 싶습니다.

제 아이디어는 '전체 해상도'타일을 캐쉬 한 다음 이미지 경계의 애니메이션 동안 크기를 조정하여 그려 봅니다.

UIGraphicsBeginImageContext(CGSizeMake(50, 50)); 
CGContextRef context = UIGraphicsGetCurrentContext(); 

//do some drawing... 

myTextImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

그런 다음 [CALayer drawInContext:(CGContextRef)context]에, 내가 [myTextImage drawAtPoint:CGPointZero] 전화 : 지금까지 내가 그리 캐시 한 후 다음과 같은 방법으로 같은 타일을 다시 그리도록 노력했습니다.

앱을 실행하면 콘솔에 <Error>: CGContextDrawImage: invalid context 0x0이 표시됩니다. 그 동안 오류가 기록 된 후에도 동일한 방법으로 context에 텍스트를 그려 넣으면서 완벽하게 처리 할 수 ​​있습니다.

두 가지 질문이 있습니다. (1) 왜이 기능이 작동하지 않습니까? 대신 CGBitmap을 사용해야합니까? 더 중요 : (2) 전반적인 문제를보다 똑똑하게 해결할 수있는 방법이 있습니까? 어쩌면 내 텍스트를 경로로 저장 한 다음 어쨌든 CAAnimation을 묶음의 범위와 다른 축척으로 그리려면 CALayer이 변경됩니까?

+1

'UIGraphicsPushContext (context);'와 같은 '유효하지 않은 컨텍스트 0x0'을 해결하기 위해 컨텍스트를 푸시하십시오. – Scar

+0

@Scar ... 고마워요, 그 고정 된 문제 # (1). # (2)에 대해서는 캐시 된 CGLayer 대 UIImage를 비교하려고합니다 ... – Merk

답변

0

좋아요, 이것은 제가 생각했던 것보다 훨씬 쉽습니다. UIView 내부의 CALayer의 drawInContext :에 텍스트를 그립니다. 그런 다음 transform 속성을 사용하여 뷰에 애니메이션을 적용하면 원하는대로 텍스트가 축소되거나 확장됩니다.

텍스트가 흐려지지 않도록 확대/축소에주의하십시오. 이를 수행하는 가장 쉬운 방법은 변환 축척 비율이 1을 초과하지 않도록하는 것입니다. 즉, UIView의 '기본'1 : 1 크기를 표시하려는 가장 큰 크기로 만듭니다.

관련 문제