0

「[self.viewaddSubview:secondView.view]」を介して2番目のビューを追加するビューコントローラーがあります。問題は、2番目のビューが半分の外側に追加されることです。

secondView = [[SecondView alloc] initWithFrame: CGRectMake (-160, 0, 320, 460)];
[self.view addSubview: secondView.view]; "

ただし、0(-160)の前の部分は相互に調整できないことに気づきました。これは正常ですか?解決する方法はありますか?

ありがとうございました!

4

2 に答える 2

6

pointInside:withEvent:親ビューをオーバーライドすることにより、サブビューが親の境界外のタッチを受信できるようにすることができます。

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
    BOOL pointInside = NO;

    // step through our subviews' frames that exist out of our bounds
    for (UIView *subview in self.subviews)
    {
        if(!CGRectContainsRect(self.bounds, subview.frame) && [subview pointInside:[self convertPoint:point toView:subview] withEvent:event])
        {
            pointInside = YES;
            break;
        }
    }

    // now check inside the bounds
    if(!pointInside)
    {
         pointInside = [super pointInside:point withEvent:event];
    }

    return pointInside;
}
于 2012-05-02T18:51:47.360 に答える
1

UIResponderチェーンが機能する方法を考えると、あなたが望むことは直接不可能であると私は恐れています(スーパービューは、それ自体に影響を与えると認識するイベントのみをサブビューに渡します)。

一方、このビューを親のフレームの外側に配置する必要がある場合は、ジェスチャレコグナイザー(参照)をサブビューに関連付けることができます。実際、ジェスチャレコグナイザは通常のタッチイベントディスパッチの外で処理され、機能するはずです。

タップしてみてください:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
[secondView addGestureRecognizer:singleTap];
于 2012-05-02T15:46:13.273 に答える