にパースペクティブを追加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) を解決するための助けをいただければ幸いです。どうもありがとう