テーブル ビューの UITableViewCell を、セルの左上隅を斜めに横断するスタンプのようなテキスト バナーで装飾しようとしています。
おそらく完全に間違った場所でこれを行っています-layoutSubviews
が、レイヤーを追加するためにオーバーライドしています。私はそれをやろうとしました-drawRect:
が、テーブルがレンダリングされると、バナーはテーブルビューのimageViewで覆われてしまいます(つまり、イメージビューが後で追加されるため、レイヤーはイメージビューの下にあります)。
私はこれを正しく計算するのに本当に苦労しています。私が計算したところ、バナーがセルの上から 40 ポイント、左から 40 ポイントで開始し、正確に -45 度の角度であると仮定すると、斜辺は 56 ポイントになります。だから私は CALayer を 56 ポイント幅にして、それを -45º 回転させています。問題は、セル内の位置です...セルの端に強くぶつかるのではなく、セルの外側に座っています。
これを適切な場所に配置するために試行錯誤を適用するのではなく、誰かが数学を手伝ってくれませんか? 明らかに、レイヤーを移動して回転させる必要があります。
ここで必要なのは anchorPoint のように感じますが、それは実際にレイヤーを動かしているように見えるので、ポイントを逃しているに違いありません (しゃれた意図はありません)。
- (void)layoutSubviews
{
[super layoutSubviews];
self.imageView.frame = CGRectMake(10, 10, 50, 50);
if (self.hasBanner) {
CALayer *banner = [CALayer layer];
banner.backgroundColor = [UIColor colorWithRed:.5f green:.5f blue:.5f alpha:1.f].CGColor;
banner.frame = CGRectMake(0, 40-15, 56, 15);
banner.anchorPoint = CGPointMake(0, 1); // this just makes it worse
banner.transform = CATransform3DMakeRotation(-45.0 / 180.0 * M_PI, 0.0, 0.0, 1.0);
[self.layer addSublayer:banner];
}
}