CALayer
추가 로 만들었는데 CATextLayer
텍스트가 흐릿하게 나옵니다. 문서에서 그들은 "서브 픽셀 앤티 앨리어싱"에 대해 이야기하지만 나에게는 그다지 의미가 없습니다. 누구든지 CATextLayer
명확한 텍스트로 만드는 코드 스 니펫이 있습니까?
다음은 Apple 문서의 텍스트입니다.
참고 : CATextLayer는 텍스트를 렌더링 할 때 하위 픽셀 앤티 앨리어싱을 비활성화합니다. 텍스트는 래스터 화되는 동시에 기존의 불투명 한 배경으로 합성되는 경우에만 하위 픽셀 앤티 앨리어싱을 사용하여 그릴 수 있습니다. 텍스트 픽셀을 짜는 배경 픽셀을 갖기 전에 별도로 하위 픽셀 앤티 앨리어싱 된 텍스트를 이미지 또는 레이어에 따로 그릴 수있는 방법은 없습니다. 레이어의 불투명도 속성을 YES로 설정해도 렌더링 모드가 변경되지 않습니다.
두 번째 문장 composites
은 existing opaque background at the same time that it's rasterized.
That 's great로 만들면보기 좋은 텍스트를 얻을 수 있음을 의미합니다 . 그러나 어떻게 합성하고 불투명 한 배경을 제공하고 어떻게 래스터 화합니까?
키오스크 메뉴의 예에서 사용하는 코드는 다음과 같습니다. (iOS가 아닌 OS X이지만 작동한다고 가정합니다!)
NSInteger i;
for (i=0;i<[names count];i++) {
CATextLayer *menuItemLayer=[CATextLayer layer];
menuItemLayer.string=[self.names objectAtIndex:i];
menuItemLayer.font=@"Lucida-Grande";
menuItemLayer.fontSize=fontSize;
menuItemLayer.foregroundColor=whiteColor;
[menuItemLayer addConstraint:[CAConstraint
constraintWithAttribute:kCAConstraintMaxY
relativeTo:@"superlayer"
attribute:kCAConstraintMaxY
offset:-(i*height+spacing+initialOffset)]];
[menuItemLayer addConstraint:[CAConstraint
constraintWithAttribute:kCAConstraintMidX
relativeTo:@"superlayer"
attribute:kCAConstraintMidX]];
[self.menuLayer addSublayer:menuItemLayer];
} // end of for loop
감사!
편집 : 실제로 사용했던 코드를 추가하면 텍스트가 흐릿합니다. 그것은 내가 추가하는 방법에 대한 게시 관련 문제에서의 UILabel
(A)보다 다소을 CATextLayer
대신 블랙 박스를 받고. http://stackoverflow.com/questions/3818676/adding-a-uilabels-layer-to-a-calayer-and-it-just-shows-black-box
CATextLayer* upperOperator = [[CATextLayer alloc] init];
CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
CGFloat components1[4] = {1.0, 1.0, 1.0, 1.0};
CGColorRef almostWhite = CGColorCreate(space,components1);
CGFloat components2[4] = {0.0, 0.0, 0.0, 1.0};
CGColorRef almostBlack = CGColorCreate(space,components2);
CGColorSpaceRelease(space);
upperOperator.string = [NSString stringWithFormat:@"13"];
upperOperator.bounds = CGRectMake(0, 0, 100, 50);
upperOperator.foregroundColor = almostBlack;
upperOperator.backgroundColor = almostWhite;
upperOperator.position = CGPointMake(50.0, 25.0);
upperOperator.font = @"Helvetica-Bold";
upperOperator.fontSize = 48.0f;
upperOperator.borderColor = [UIColor redColor].CGColor;
upperOperator.borderWidth = 1;
upperOperator.alignmentMode = kCAAlignmentCenter;
[card addSublayer:upperOperator];
[upperOperator release];
CGColorRelease(almostWhite);
CGColorRelease(almostBlack);
편집 2 : 이것이 어떻게 해결되었는지 아래의 내 대답을 참조하십시오. sbg.