0

私は次の階層を持っています: view scrollview (スクロールとズームが有効になっている) containerview imageview (マップ付き) ボタンのビュー ナビゲーションパネルのビュー

画像ビューの上に、関心のあるポイントを配置する必要があります (ユーザーが選択したカテゴリによって異なります):画像と同じサイズを維持する必要があります(1)スクロールビューに添付すると、何も表示されません..メインビューに添付すると、2つの問題があります。ボタンなどのスクロールビューとビューの間(それらはアプリケーションの上部にあり、マップのすぐ上にある必要がありますが、ズームとスクロールを調整するためにコントロールパネル、ボタンなどの下にある必要があります)convertPoint:toViewで行われますビュー (スクロールビューの下のコンテナー ビューの兄弟) は正常に表示されます。しかし、ユーザー入力はありません (タッチを受け取りません) その兄弟サブビューを CALayer に変換すると、サブレイヤー (POI) が表示されません。

(1) コンテナ ビューをサブクラス化し、setTransform をオーバーライドしようとしました。しかし、ビューへの参照を含む配列を渡すのに問題がありました

この場合、何をすることをお勧めしますか?どうもありがとうございました!

S.

4

1 に答える 1

0

最終的にサブビューを containerView に追加し、サブクラス化しました。

- (void)setTransform:(CGAffineTransform)transform
{
    [super setTransform:transform];

    CGAffineTransform invertedTransform = CGAffineTransformInvert(transform);
    for (UIView *view in self.subviews)
    {
        if ([view isKindOfClass:[MarkerClass class]]) {
            [view setTransform:invertedTransform];
        }
    }
}

唯一の問題は、containerView をズームする前に、短いサイズのマーカーが画面に表示されることです。

しばらく経った後、次の方法で初期変換を取得するために、addSubview もオーバーライドすることがわかりました。

-(void)addSubview:(UIView *)view {
    [super addSubview:view];
    if ([view isKindOfClass:[MarkerClass class]]) {
     CGAffineTransform invertedTransform = CGAffineTransformInvert(self.transform);
        [view setTransform:invertedTransform];
    }
}
于 2014-06-18T09:22:47.570 に答える