2013-01-01 4 views
2

어떤 텍스트에는 두 개의 다른 그림자를 그려 양각 효과를 내고 있습니다.텍스트에 그림자 두 개 그리기 (코어 그래픽)

CGContextSetShadowWithColor(context, textInnerShadowOffset, textInnerShadowBlurRadius, textInnerShadowColor.CGColor); 
[textColor setFill]; 
[self.text drawInRect:rect withFont:self.font lineBreakMode:self.lineBreakMode alignment:self.textAlignment]; 

을하지만 지금은 두 번째 그림자를 그리기의 문제에 직면하고 있습니다 : 여기에 (사용 된 모든 변수가 이미 정의되어 있습니다) 내가 처음 그림자와 텍스트를 그릴 내 drawInRect의 부분입니다. 나는 그림자를 바꾸고 텍스트를 다시 그릴 필요가 있다고 가정하지만, 텍스트의 다른 사본을 추가하지 않고 그렇게해야합니다.

실제로 텍스트를 그리지 않고 텍스트를 그릴 수있는 방법은 무엇입니까? 채우기 색을 clearColor으로 변경하면 작동하지 않습니다. 나는 사람들이 클리핑 마스크를 사용하는 것을 보았지만 AFAICT는 텍스트가 아닌 단순한 모양에서만 작동합니다.

또는 동일한 텍스트에 두 개의 그림자를 그리는 더 쉬운 방법이 있습니까?

답변

0

두 가지 옵션, 정확한 효과에 따라 당신이 원하는 : 첫 번째, "위"그림자는 그 아래 두 번째, "낮은"그림자에 기여하고자하는 경우 transparency layer를 사용

  • .

    1. 는 대한 CGContext의 그림자를 설정합니다 "낮은"
    2. CGContextBeginTransparencyLayer
    3. 가 투명성을 종료
    4. 텍스트
    5. 그리기 그림자 "위"의 문맥의 그림자를 설정하여 투명 레이어를 만들고 그림자 사용하는 층 CGContextEndTransparencyLayer

(투명도 레이어가 상당히 비쌉니다. 그것은 CGContextBeginTransparencyLayerWithRect를 호출하고 당신이 할 수있는 작은 구형 영역을 전달하는 것이 가장 좋습니다)

  • 당신은 그림자가 독립하려는 경우 -. 각 그림자에 기여하는 유일한 텍스트 - 당신은해야합니다 속임수를 사용하는 것.

함께 그림자를 설정 추가 당신이 당신의 컨텍스트의 범위 이외의 텍스트를 그리고 정확한 장소에 그림자의 땅을 가질 수 있도록 충분히 큰 오프셋 큽니다. 그렇게하면 그림자 만 볼 수는 있지만 텍스트는 볼 수 없습니다. 오프셋 무엇

text and shadow with large offset

  1. 그림 밖으로는 "충분히 큰"입니다. 아마도 당신이 그리는 컨텍스트의 크기 (보기에 따라 다름)와 아마도 텍스트의 범위에 달려있을 것입니다. 아니면, 그냥 퍼지 : 5000 pt와 같이 터무니없이 큰 값을 선택하십시오.
  2. 그림자를 설정하십시오. 큰 오프셋을 보통의 y 오프셋에 추가하십시오.
  3. 큰 오프셋으로 세로로 오프셋 된 텍스트를 그립니다.

앞에서 뒤쪽으로 각각의 "낮은"그림자에 대해 1-3을 반복하십시오. 그런 다음 오프셋없이 텍스트와 "최상위"그림자를 마지막으로 그립니다.

+0

힌트를 보내 주셔서 감사합니다! 유용한 시작이지만 두 번째 그림자의 색상이 텍스트 상단에 그려집니다 (http://i.imgur.com/gn0mv.png의 녹색 참조). 그 주위에 어떤 방법이 있습니까? – Nathan

+0

그 스크린 샷을 기반으로하고있는 일을 정확하게 말할 수는 없습니다. 어떤 색이 텍스트이고 두 가지 그림자가 무엇입니까? 어쨌든, 나는 대답을하는 또 다른 가능한 방법을 추가했다. –