2011-02-16 5 views
0

내가 설명하는 것이 약간 어렵다. 시도해 봅시다 ...코코아 같은 글자의 다른 텍스트 색상

내 응용 프로그램에 텍스트를 써야하고 그 텍스트가 점차 왼쪽에서 오른쪽으로 색이 바뀝니다. 노래방 화면에서 보는 것과 비슷한 효과라고 말할 수 있다고 생각합니다.

예를 들어. 나는 파란색으로 텍스트 줄을 그리며, 점차적으로 타이머를 사용하여 왼쪽에서 오른쪽으로의 색이 빨간색으로 바뀝니다. 하지만 편지로 글자를 바꾸고 싶지는 않습니다. 그것은 어느 순간에 같은 편지가 빨간색으로 된 부분과 파란색으로 된 부분을 가질 수 있어야합니다.

저는 코어 드로잉에 대해 읽었습니다. 아마도 해결책 일 수도 있지만, 시작하는 방법을 모르겠습니다. 내가 배경 레이어를 사용하는 것에 대해 생각하고 그것의 꼭대기에 투명 텍스트 (국경으로 만)를 그리지 만, 어떻게하는지 잘 모르겠습니다.

어떤 아이디어라도 감사 할 것입니다.

답변

3

CGLayer로 작업을 수행 할 수 있습니다.

기존 코드를 사용하여 CGLayer에 문자 (또는 다른 것)를 그릴 수 있어야합니다.

CGContextSaveGState(UIGraphicsGetCurrentContext()) ... 
CGContextClipToMask(UIGraphicsGetCurrentContext(), self.frame, anAlphaMask); 

그래서 그냥 그라데이션의 이미지에 마스크, 또는 무엇이든 작동 : 이제 당신이 사용할 수있는 좋은 마스크를

// first, make a CGLayer... 

CGLayerRef yourDrawingPad = 
    CGLayerCreateWithContext(UIGraphicsGetCurrentContext(),etc.. 
CGContextRef yourRef = CGLayerGetContext(yourDrawingPad); 

// now, draw to yourRef .. draw your various typography (or anything) 
// use your current drawing code. 

// all done drawing, now make an image mask... 

UIGraphicsBeginImageContext(CGLayerGetSize(yourDrawingPad)); 
    CGContextRef temp = UIGraphicsGetCurrentContext(); 
    CGContextDrawLayerAtPoint(temp, CGPointZero, yourDrawingPad); 
    CGImageRef anAlphaMask = CGBitmapContextCreateImage(temp); 
UIGraphicsEndImageContext(); 

:

여기에 일부 거친 코드입니다.

(알만 : 아마도 당신은 비트 맵 이미지를 오프 스크린 구성해야합니다 후 마스크로 그 사용)

각주 : 당신이 거꾸로 칠해야합니다 가능성이 높다 잊지 마세요! 다행히도 그것은 다루기 쉽습니다. 그것이 말하는 어디 상태 저장 그리기 전에 "지금 yourRef 그릴 '과 두 줄의 코드를 추가

CGContextTranslateCTM(refForMask, 0, self.frame.size.height); 
CGContextScaleCTM(refForMask, 1.0, -1.0); 

+0

이상한. 나는 코멘트를 게시하고 실종되었다. 어쩌면 내가 제대로 추가하지 않았다. 그래서 여기 다시 있습니다. 나는 두 가지 접근법을 시도 할 것이다. 도와 주셔서 감사합니다. – Ernesto

2

나는 이것이 어떻게 할 수 있는지에 대한 아이디어가 있지만, 다소 복잡합니다. NSBezierPath를 만들고 각 문자에 글리프를 추가 할 수 있습니다. 그런 다음 클립으로 설정하고 NSGradient를 그립니다. 그런 다음 NSGradient의 색상 오프셋을 변경하여 색상을 이동해야합니다.

+0

내가 이것을 시도합니다 도움이되기를 바랍니다. 감사. – Ernesto