UIGestureRecognizer仅为subView添加,但它也在使用parentView?

时间:2016-01-09 06:01:58

标签: ios objective-c uigesturerecognizer uibezierpath cashapelayer

这是我的代码:

[super viewDidLoad];
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureRecognizer:)];
    [self.colorView setUserInteractionEnabled:YES];
    [self.colorView addGestureRecognizer:tapGesture];

-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{

    UITouch *touch = [[event allTouches] anyObject];
    touchPoint = [touch locationInView:self.colorView];
    UIBezierPath *path = [UIBezierPath bezierPath];
    [path moveToPoint:CGPointMake(touchPoint.x,touchPoint.y)];
    [path addLineToPoint:CGPointMake(startingPoint.x,startingPoint.y)];
    startingPoint=touchPoint;
    CAShapeLayer *shapeLayer = [CAShapeLayer layer];
    shapeLayer.path = [path CGPath];
    shapeLayer.strokeColor = [[UIColor blueColor] CGColor];
    shapeLayer.lineWidth = 3.0;
    shapeLayer.fillColor = [[UIColor redColor] CGColor];
    [self.colorView.layer addSublayer:shapeLayer];

    NSLog(@"Touch moving point =x : %f Touch moving point =y : %f", touchPoint.x, touchPoint.y);



}

所以它只能在colorView上工作但是会发生什么enter image description here,那个触摸也在内部运行self.view,如何解决这个问题。

2 个答案:

答案 0 :(得分:3)

您可以添加:

 self.colorView.clipsToBounds = YES;

它将解决您的问题。

  

一个布尔值,用于确定子视图是否仅限于   观点的界限。

     

声明OBJECTIVE-C @property(非原子)BOOL clipsToBounds   讨论将此值设置为YES会导致子视图被剪切到   接收器的界限。如果设置为NO,则其帧扩展的子视图   超出接收器的可见边界不会被剪裁。默认   价值是NO。

     

可用性适用于iOS 2.0及更高版本。   链接:Reference

因为它不是。因此,交互将扩展到超级视图。设置为YES时。它只适用于您的子视图。

答案 1 :(得分:0)

即使触摸超出界限,视图也会跟踪在其内部开始的触摸(这就是为什么你可以按住按钮,拖出它并且当你在一定距离内时它仍会被选中)

您可以使用CGRectContainsPoint仅在视图中添加一个点。