Я пытаюсь добавить некоторую перспективу на 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
вращения, чтобы они приводили к правильной перспективе. Как я могу правильно рассчитатьzDistance
на основеdegrees
?
Любая помощь в решении (1) (2) (3) будет принята с благодарностью. Огромное спасибо