15

その中にUIScrollViewがあり、その中に3つのUIViewがあり、その中にそれぞれUISliderがあるとしましょう。それらは UIScrollView に垂直に配置されます。

UIScrollView にも 4 番目の UIView があり、使用されているスライダーの位置に応じて移動したいと考えています。

したがって、送信者を渡すsliderChangedメソッド内で、スライダーの位置を取得し、4番目のUIWindowの位置をyに調整します。これは最初のUIViewではうまく機能しますが、スクロールダウンを余儀なくされた別のUIViewでは、スライダーを使用すると4番目のUIViewが移動しますが、UIScrollViewの先頭にとどまります

私は使っている:

[4thView setCenter:CGPointMake([4thView center].x, [slider center].y+10)];

私が必要とするのは、scrollView コンテンツに対して相対的に 4 番目のビューを再度設定できるように、scrollView のコンテンツに対してではなく、その UIView に対して相対的なスライダーの位置を取得することです。

4

2 に答える 2

42

ポイントは UIView のインスタンス メソッドで変換できます。

- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view
- (CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view

たとえば、viewA の ponint を scrollViewB の座標に変換したいとします。

CGPoint aPtInScrollView = [viewA convertPoint:aPoint toView:scrollViewB]; 

または、scrollViewB 内の viewA の位置を知りたいです。

 CGPoint aPosViewA = [scrollViewB convertPoint:CGPointZero fromView:viewA]; 
于 2011-01-12T00:18:23.487 に答える
5

以前の回答を使用して、私が抱えていた問題を解決するためにもう少し進めました。

複数の UIView 内に複数の UITextView があり、すべて単一の UIScrollView 内にある場合: これはアニメーション化され、それらにスクロールします。

これは、UITextField にも適用できます。

-(void)textViewDidBeginEditing:(UITextView *)textView {
    [self.theScrollView setContentOffset:[self.theScrollView convertPoint:CGPointMake(textView.frame.origin.x, textView.frame.origin.y) fromView:textView.superview] animated:YES];
}

テキストビューの上にラベルがある場合は、x または y をその量だけオフセットします。

于 2015-06-18T04:20:50.617 に答える