2009-08-24 10 views
1

텍스트에 흐릿하거나 빛나는 효과를 줄 수있는 방법이 있습니까? 또는 레이어의 그래픽 컨텍스트를 가져와 픽셀에 가우스 알고리즘을 적용해야합니까? 나는 이것에 대한 문서를 검색했지만 그 그림자가 흐리게 그려지지 않는 NSString, UIFont 또는 UILabel에 그 일을하는 데 도움이 될 방법이 없다는 것을 알 수 있습니다.UILabel의 텍스트를 흐리게 표시하는 방법은 무엇입니까?

답변

-1

안티 앨리어싱을 제외하면 UILabel은 텍스트 또는 그림자를 흐리게 처리하지 않습니다. 수동으로 코드를 작성해야합니다.

+0

어떻게 이론적으로 보입니까? 그래픽 컨텍스트의 복사본을 가져 와서 gauss 알고리즘을 적용한 다음이를 다시 레이어에 할당할까요? –

+0

당신은 아마도 UILabel이 그려야하는 임시 컨텍스트를 생성 한 다음 그 drawRect 루틴을 호출하여 오프 스크린 버퍼에 자신을 그리기를 원할 것입니다. 그런 다음 그 버퍼의 UIImage를 가져 와서 흐리게 처리합니다. 오프 스크린 버퍼 API는 여기를 참조하십시오. http://stackoverflow.com/questions/1315251/how-to-rotate-a-imimage-90-degrees/1317194#1317194 – fbrereto

+0

감사. 그 그래픽 컨텍스트에서 일부 가우스 알고리즘을 적용하고 다시 그려야합니다. 맞습니까? –

0

Photoshop 또는 다른 이미지 편집기를 사용하여 선명하고 흐린 오버레이를 만듭니다. PNG로 저장하십시오. 이 PNG를 UIImageview에로드하고 UILabel 위에 그립니다. 효과를 변경하려면 알파를 조정하십시오.

특수 UILabel 하위 클래스를 만들어 여러 가지 흐림 정도를 처리 할 수도 있습니다.

+0

err ..... 그렇게하지 않을 것입니다. Blurness는 픽셀 단위의 오버레이가 아닙니다. Blurryness는 실제로 2d 플랫 영역의 특정 반경 주위의 픽셀을 보간하므로 이미지 오버레이로는 수행 할 수 없습니다. 물론 PS에서 흐림 효과를 만들 수는 있지만 동적이 아닙니다. 내용을 약간 변경하면 흐림이 잘못 될 수 있습니다. –

+1

"흐림"이란 물건이 날카 로워지는 효과를 의미합니다. 미안하지만, 내 나쁜 영어. 내 말은 : 날카로운 것의 반대 (당신이 정말로 큰 안경이 필요하지만 그 안경을 갖지 않을 때). –

3

CGContextSetShadowWithColor은 희미한 텍스트를 그리는 데 사용할 수 있습니다. 이 느릴 수 있습니다, 그것은 버퍼에 그리는 그를 다시 사용하는 것이 좋습니다 :

UIFont *font = [UIFont systemFontOfSize:18.0f]; 
UIGraphicsBeginImageContext(CGSizeMake(200.0f, 50.0f)); 
CGContextSetShadowWithColor(UIGraphicsGetCurrentContext(), CGSizeMake(0.0f, -500.0f), 2.0f, [[UIColor blackColor] CGColor]); 
[@"Blurred Text!" drawAtPoint:CGPointMake(5.0f, -500.0f) withFont:font]; 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
[imageView setImage:image]; 

올드 답 : 간단한 옵션은 텍스트를 여러 번을 그리고 X/Y 좌표를 상쇄하는 것입니다 매번 1 씩. 속도를 높이려면 오프 스크린 버퍼에 캐시 할 수 있습니다.

+0

좋은 소리. 그 오프 스크린 버퍼는 어떻게 생겼을까요? 이론 상으로는 무엇입니까? CG 그래픽 컨텍스트? –

+0

모서리 중 2 개가이 기법으로 많은 흐려짐을 보지 못하거나 두 가지가 섞여 있지만 두 모서리에는 항상 누락 픽셀이 있기 때문에 꽤 더러워 보입니다. 어쩌면 변환에 적용된 스케일링이 있습니까? –

+0

나는 나의 대답의 내용을 훨씬 더 나은 방법으로 바꿨다. – rpetrich

1

의도적으로 반 픽셀에 레이블을 배치하면 흐릿한 효과가 나타납니다. 당신은 그 위에 많은 제어가되지 않습니다,하지만 흐릿하게 보일 것 : 잘 모르겠어요

UILabel *labelOnWholePixel = [[UILabel alloc] 
        initWithFrame:CGRectMake(20.0f, 20.0f, 280.0f, 25.0f)]; 
[labelOnWholePixel setText:@"Whole Pixel"]; 
[labelOnWholePixel setBackgroundColor:[UIColor clearColor]]; 

UILabel *labelOnHalfPixel = [[UILabel alloc] 
        initWithFrame:CGRectMake(20.5f, 50.5f, 280.0f, 25.0f)]; 
[labelOnHalfPixel setText:@"Half Pixel"]; 
[labelOnHalfPixel setBackgroundColor:[UIColor clearColor]]; 

[[self view] addSubview:labelOnWholePixel]; 
[[self view] addSubview:labelOnHalfPixel]; 

을하지만, 나에게 나타납니다 가까이 당신이 어느 방향에서 정수에 그것을 선명 도착하면, 당신은 그것을 조금 통제 할 수 있습니다.

+0

감사합니다 매트, 흥미로운 "안티 앨리어싱"효과입니다. 0.5는 가장 좋은 값입니다. 불행히도 그 흐릿함은 0.5 픽셀 주위에 퍼져 있으며 빛나는 효과에는 충분하지 않습니다. –

관련 문제