0

我有一个视图控制器,它通过“[self.view addSubview: secondView.view]”添加第二个视图。问题是第二个视图被添加到一半之外。

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 回答