1 つの imageView (プログラムで addSubView を使用して作成) を含む 1 つの ScrollView と、画像を変更するためのセグメント化されたコントロールを含む 1 つのビューがあります。ズーム用のジェスチャ認識機能を追加しました。セグメント化されたコントロールの水平位置は固定されています。この問題は、セグメント化されたコントロールをクリックしようとすると、画像がズームしすぎると発生します。うまくいきません。ズーム レベルが小さい場合、動作し続け、画像間で変化します。
以下の 2 つのスクリーンショットは、状況を示しています。1) セグメント化されたコントロールが機能する場合と、2) 機能しない場合。
http://cs617220.vk.me/v617220757/e375/hvRdXNe9SBY.jpg http://cs617220.vk.me/v617220757/e36e/E4auq4-kFL4.jpg
問題はビューの階層にあり、追加されたサブビューがセグメント化されたコントロールとビューをオーバーラップしない場合-機能し、オーバーラップすると停止すると思います。imageView を一番下に配置しようとしましたが、コードは次のとおりです。
[self.scrollView addSubview:self.imageView];
[self.scrollView sendSubviewToBack:self.imageView];
しかし、これは役に立ちません。問題は残ります。imageView をスタックの一番下に配置するにはどうすればよいですか?
コメントへの更新: UIScrollView とセグメント化されたコントロールの間に小さな UIView があります。どうやら問題をキャッチできたようです。それは水平固定コードです。これを見つけるためにRevealアプリを使用しました。2 つのスクリーンショットが問題を示しています。
ここでは、セグメント化されたコントロールが小さな UIView のすぐ上に配置されています。少しだけズームすると、画面は次のようになります。
したがって、UIView は画像の残りの部分と同じように消え、水平位置が固定されません。興味深いことに、セグメント化されたコントロールを UIScrollView に直接配置すると機能しますが、位置は水平方向に固定されません。これはコードです:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGRect frame = _floorSelector.frame;
frame.origin.x = scrollView.contentOffset.x;
_floorSelector.frame = frame;
}
そして、これは機能しません(セグメント化されたコントロールではなく、UIView の位置を修正しようとすると):
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGRect frame = _selectorView.frame;
frame.origin.x = scrollView.contentOffset.x;
_selectorView.frame = frame;
}
解決策:
一方向のスクロールをブロックする代わりに、すべての補足ビューを取り除き、セグメント化されたビューの垂直スクロールを実装することにしました。コードは次のとおりです。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGRect frame = _floorSelector.frame;
frame.origin.y = -scrollView.contentOffset.y;
_floorSelector.frame = frame;
}
ビューの階層は次のとおりです。
したがって、セグメント化されたコントロールは、スクロール ビューではなく、メイン ビューに直接配置されます。縦スクロールの場合はスクロールしますが、横スクロールの場合はスクロールしません。手伝ってくれてありがとう。
Departamento B がこの問題を解決するのを手伝ってくれたので (これは彼のアイデアです)、私は彼の答えにチェックマークを付けます。