【发布时间】:2013-01-13 10:07:56
【问题描述】:
我正在尝试在 UILabel 上添加一些透视图,使其显示为好像它被绘制在一个有角度的脸上。
这是我的测试标签:
应用转换后:
我的代码:
@implementation MyViewController
- (void)viewDidLoad {
[super viewDidLoad];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(100.f, 250.f, 100.f, 30.f)];
label.text = @"Hello";
label.textAlignment = NSTextAlignmentCenter;
label.backgroundColor = [UIColor greenColor];
[label tiltDegrees:20.f];
[self.view addSubview:label];
[label release];
}
@end
@implementation UIView (Perspective)
-(void) tiltDegrees:(CGFloat)degrees {
CATransform3D aTransform = CATransform3DIdentity;
CGFloat zDistance = 100; // affects the sharpness of the transform
aTransform.m34 = 1.0 / -zDistance;
aTransform = CATransform3DRotate(aTransform, degrees * M_PI / 180.0f, 1.0f, 0.0f, 0.0f);
self.layer.transform = aTransform;
}
@end
我遇到了一堆问题:
- 标签内的文本似乎不像
UILabel本身那样应用转换。它超出框架(剪辑),未居中,并且几何形状似乎不正确。也许尺寸也错了? - 它是模糊的。我如何在文本向量之前对其进行光栅化处理。我认为这会产生清晰的结果。
- 我似乎无法确定
zDistance和degrees之间的协调性,因此它们会产生正确的视角。如何根据degrees正确计算zDistance?
任何帮助解决 (1) (2) (3) 将不胜感激。 非常感谢
【问题讨论】:
标签: uilabel calayer catransform3d catransform3drotate