这是我的代码:
[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);
}
答案 0 :(得分:3)
您可以添加:
self.colorView.clipsToBounds = YES;
它将解决您的问题。
一个布尔值,用于确定子视图是否仅限于 观点的界限。
声明OBJECTIVE-C @property(非原子)BOOL clipsToBounds 讨论将此值设置为YES会导致子视图被剪切到 接收器的界限。如果设置为NO,则其帧扩展的子视图 超出接收器的可见边界不会被剪裁。默认 价值是NO。
可用性适用于iOS 2.0及更高版本。 链接:Reference
因为它不是。因此,交互将扩展到超级视图。设置为YES时。它只适用于您的子视图。
答案 1 :(得分:0)
即使触摸超出界限,视图也会跟踪在其内部开始的触摸(这就是为什么你可以按住按钮,拖出它并且当你在一定距离内时它仍会被选中)
您可以使用CGRectContainsPoint
仅在视图中添加一个点。