3

私にはビューがあり、そのサブビューはUIScrollView、When I try to scaleのUIImageViewサブビューであり、スケーリングされています。しかし問題は、ビューの半分に触れていることです。UIScrollView.UIViewUIScrollViewUIImageView

これが私のコードです

[UIView animateWithDuration:0.5 delay:0.0 options:0 animations:^{ 
CGFloat DesiredWidth = 250.0;
  CGFloat DesiredHeight = 300.0;
    CGAffineTransform scalingTransform1;
                scalingTransform1 = CGAffineTransformMakeScale(DesiredWidth/self.view1.bounds.size.width,
    DesiredHeight/self.view1.bounds.size.height);
                self.view1.transform = scalingTransform1;
                self.view1.center=CGPointMake(268, 250); }completion:^(BOOL finished) 
             {   }];

どうすればタッチできるのか誰か教えてください。たくさん検索しましたが見つかりませんでした

ありがとう

4

2 に答える 2

2

あなたの問題は、ビューのルート UIView (つまり、あなたが話している UIView のスーパービュー) のサイズだと思います。特定のサブビューがそのスーパービューよりも大きい場合、スーパービュー フレームの外側にあるフレームのこの部分では、タッチ イベントを受信しません。

iOS のレスポンダー チェーンについて読んだことがあれば、UIView が配置された順序でサブビューに対して -[hitTest: withEvent:] を呼び出すことを知っているはずです。このメソッドは、UIView フレーム内の特定のタッチ ポイントをチェックしてから、特定のサブビューがレスポンダー チェーン (この場合はビュー階層) に配置されている順序でタッチ イベントを処理できるかどうかのチェックを開始します。

そのため、タッチ イベントが最初に受信されると、特定の UIView の最初のヒット テスト自体が行われ、タッチの位置がフレームの外にある場合はサブビューがチェックされません。したがって、すべてのビューのフレームを非常に注意深く確認し、一部のルート ビュー (使用する UIViewController のビュー プロパティである可能性があります) が実際にタッチするサブビューよりも小さいかどうかを確認してください。

また、変換を気にしてください。ドキュメントには、一部の変換が適用されると、ビューのフレームが無関係になると記載されています。

私の返信を要約すると、次のような状況になります。

some_superview.frame = CGRectMake(0, 0, 200, 200);
some_subview_of_the_superview.frame = CGRectMake(0, 0, 200, 300);

サブビューの実際の領域 (0, 200, 200, 100) は下の 100 ポイントです。タッチはフレームの外側にあるため、スーパービューによって無視されます。

于 2013-05-31T08:41:20.087 に答える
1

サブビューのフレームがそのスーパービュー内にあることを確認してください。間違った方向に行った場合..タッチを検出しません。

于 2013-12-24T12:42:25.497 に答える