0

カスタム ポップオーバー バックグラウンドを作成しているので、UIPopoverBackground 抽象クラスをサブクラス化しました。レイアウト関数を作成しているときに、背景の矢印を配置して回転させる際に問題が発生しました。

最初の図は、目的の位置にある矢印を示しています。次のコードでは、必要な原点を計算しましたが、回転により、画像の新しい位置が約 11 ポイント横に移動したように見えました。ご覧のとおり、矢印を 11 ポイント以上移動させたハック ソリューションを作成しました。しかし、それは私の数学のスキルにギャップがあるという事実をカバーするものではありません. ここで何が起こっているのかを説明してくれる親切な人がいたら、私は永遠に感謝します. また、魔法の数を含まない解決策があれば、上、下、右矢印の場合にこの解決策を適用できます。

スクリーンショット

#define ARROW_BASE_WIDTH 42.0
#define ARROW_HEIGHT 22.0

    case UIPopoverArrowDirectionRight:
    {
        width -= ARROW_HEIGHT;
        float arrowCenterY = self.frame.size.height/2 - ARROW_HEIGHT/2 + self.arrowOffset;
        _arrowView.frame = CGRectMake(width,
                                      arrowCenterY,
                                      ARROW_BASE_WIDTH,
                                      ARROW_HEIGHT);
        rotation = CGAffineTransformMakeRotation(M_PI_2);
        //rotation = CGAffineTransformTranslate(rotation, 0, 11);
         _borderImageView.frame = CGRectMake(left, top, width, height);
        [_arrowView setTransform:rotation];
    }
    break;
4

1 に答える 1

2

さて、矢印ビューの中心を中心に回転が適用されると(そのまま)、(ARROW_BASE_WIDTH - ARROW_HEIGHT) / 2回転後の矢印の左側にギャップが残ります。これを補正する必要があるようです。矢印ビューの中心をこれだけずらすと、元の位置に戻るはずです。

于 2013-01-19T06:50:34.593 に答える