4

回転のためのビューの変換がそのサブビューに渡されない方法はありますか? ユーザーの見出しの値に応じて回転するカスタム MKAnnotationView があります。以下のカスタム注釈ビュー クラスのメソッドでは、注釈ビューにサブビューを追加しています。

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    if(selected)
{
  [self addSubview:self.myCallOutView];
  return;
}
  [self.myCallOutView removeFromSuperview];


}

しかし、問題は、注釈ビューを回転させて注釈を選択すると、myCallOutView も回転して表示されますが、これは望ましくありません。下の行を使用してカスタム注釈ビューを回転させています

  [self setTransform:CGAffineTransformMakeRotation(angle * M_PI / -180.0)];

どうすればこの状況を回避できますか? サブビューとして追加する前に、myCallOutView に何らかの変換を適用する必要がありますか?

4

1 に答える 1

7

非常に簡単な解決策の 1 つは、サブビューで逆回転を実行することです。

[self setTransform:CGAffineTransformMakeRotation(angle * M_PI / -180.0)];
// NOTE: we're using the negative of the angle here
[self.myCallOutView setTransform:CGAffineTransformMakeRotation(- angle * M_PI / -180.0)]];

これにより、スーパービューでの回転の効果がキャンセルされます。

代替アプローチ:ビューを少し異なる構造にします: ビュー A をビュー B 内に配置する代わりに、ビュー A とビュー B の両方をコンテナー ビュー C のサブビューにします。次に、回転をビュー A に適用するだけで、B は影響を受けません。ディスプレイ上のアンサンブル全体を移動するには、コンテナ ビュー C を再配置します。

于 2013-03-21T11:43:05.937 に答える