1

にパースペクティブを追加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

私はたくさんの問題に悩まされています:

  1. UILabelラベル内のテキストは、それ自体と同じように変換を適用していないようです。フレームから外れて (クリップされて)、中央に配置されておらず、ジオメトリが正しくないようです。サイズも間違ってるかも?
  2. ぼやけています。ラスタライズする前に、テキスト ベクトルに変換を適用するにはどうすればよいですか。そうすることで、メリハリのある結果が得られると思います。
  3. zDistanceとの回転の調整がうまくいかないようdegreesで、正しい遠近感が得られます。zDistanceに基づいて正しく計算するにはどうすればよいdegreesですか?

(1) (2) (3) を解決するための助けをいただければ幸いです。どうもありがとう

4

1 に答える 1

2

すでにこれを解決したかどうかはわかりませんが、基本的に問題は、テキスト ラベルが背後の灰色のレイヤーを通過しているため、テキストの途中でクリップされているように見えることです。

この問題を解決するには、テキスト レイヤーをカメラに向かって移動します。

于 2013-05-19T20:37:19.293 に答える