Objective c 检测曲线上的抽头?

Objective c 检测曲线上的抽头?,objective-c,sprite-kit,Objective C,Sprite Kit,我想画一条特定宽度的线。我在网上搜索了一些例子,但我只找到了使用直线的例子。我需要曲线。此外,我需要检测用户是否在线路内触摸。使用Objective C和Sprite工具包是否可以实现这一目标?如果是,有人能举个例子吗 您可以使用UIBezierPath创建贝塞尔曲线(平滑曲线)。您可以为CAShapeLayer指定此路径,并将其作为子层添加到视图中: UIBezierPath *path = [UIBezierPath bezierPath]; [path moveToPoint:CGPoin

我想画一条特定宽度的线。我在网上搜索了一些例子,但我只找到了使用直线的例子。我需要曲线。此外,我需要检测用户是否在线路内触摸。使用Objective C和Sprite工具包是否可以实现这一目标?如果是,有人能举个例子吗


您可以使用
UIBezierPath
创建贝塞尔曲线(平滑曲线)。您可以为
CAShapeLayer
指定此路径,并将其作为子层添加到视图中:

UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(10, 150)];
[path addCurveToPoint:CGPointMake(110, 150) controlPoint1:CGPointMake(40,  100) controlPoint2:CGPointMake(80,  100)];
[path addCurveToPoint:CGPointMake(210, 150) controlPoint1:CGPointMake(140, 200) controlPoint2:CGPointMake(170, 200)];
[path addCurveToPoint:CGPointMake(310, 150) controlPoint1:CGPointMake(250, 100) controlPoint2:CGPointMake(280, 100)];

CAShapeLayer *layer = [CAShapeLayer layer];
layer.lineWidth = 10;
layer.strokeColor = [UIColor redColor].CGColor;
layer.fillColor = [UIColor clearColor].CGColor;
layer.path = path.CGPath;

[self.view.layer addSublayer:layer];


如果你想随机化一点,你可以随机化一些曲线。如果你想要一些模糊,添加一些阴影。如果希望端点为圆形,请指定圆形线帽:

UIBezierPath *path = [UIBezierPath bezierPath];
CGPoint point = CGPointMake(10, 100);
[path moveToPoint:point];

CGPoint controlPoint1;
CGPoint controlPoint2 = CGPointMake(point.x - 5.0 - arc4random_uniform(50), 150.0);
for (NSInteger i = 0; i < 5; i++) {
    controlPoint1 = CGPointMake(point.x + (point.x - controlPoint2.x), 50.0);
    point.x += 40.0 + arc4random_uniform(20);
    controlPoint2 = CGPointMake(point.x - 5.0 - arc4random_uniform(50), 150.0);
    [path addCurveToPoint:point controlPoint1:controlPoint1 controlPoint2:controlPoint2];
}

CAShapeLayer *layer = [CAShapeLayer layer];
layer.lineWidth = 5;
layer.strokeColor = [UIColor redColor].CGColor;
layer.fillColor = [UIColor clearColor].CGColor;
layer.path = path.CGPath;
layer.shadowColor = [UIColor redColor].CGColor;
layer.shadowRadius = 2.0;
layer.shadowOpacity = 1.0;
layer.shadowOffset = CGSizeZero;
layer.lineCap = kCALineCapRound;

[self.view.layer addSublayer:layer];
  • 通过识别用户点击的像素颜色,获取用户点击坐标处的像素颜色

    - (void)handleTap:(UITapGestureRecognizer *)gesture
    {
        CGPoint point = [gesture locationInView:gesture.view];
    
        CGFloat red, green, blue, alpha;
        UIColor *color = [self image:self.image colorAtPoint:point];
        [color getRed:&red green:&green blue:&blue alpha:&alpha];
    
        if (green < 0.9 && blue < 0.9 && red > 0.9)
            NSLog(@"tapped on curve");
        else
            NSLog(@"didn't tap on curve");
    }
    

  • 您可以使用
    UIBezierPath
    创建贝塞尔曲线(平滑曲线)。您可以为
    CAShapeLayer
    指定此路径,并将其作为子层添加到视图中:

    UIBezierPath *path = [UIBezierPath bezierPath];
    [path moveToPoint:CGPointMake(10, 150)];
    [path addCurveToPoint:CGPointMake(110, 150) controlPoint1:CGPointMake(40,  100) controlPoint2:CGPointMake(80,  100)];
    [path addCurveToPoint:CGPointMake(210, 150) controlPoint1:CGPointMake(140, 200) controlPoint2:CGPointMake(170, 200)];
    [path addCurveToPoint:CGPointMake(310, 150) controlPoint1:CGPointMake(250, 100) controlPoint2:CGPointMake(280, 100)];
    
    CAShapeLayer *layer = [CAShapeLayer layer];
    layer.lineWidth = 10;
    layer.strokeColor = [UIColor redColor].CGColor;
    layer.fillColor = [UIColor clearColor].CGColor;
    layer.path = path.CGPath;
    
    [self.view.layer addSublayer:layer];
    


    如果你想随机化一点,你可以随机化一些曲线。如果你想要一些模糊,添加一些阴影。如果希望端点为圆形,请指定圆形线帽:

    UIBezierPath *path = [UIBezierPath bezierPath];
    CGPoint point = CGPointMake(10, 100);
    [path moveToPoint:point];
    
    CGPoint controlPoint1;
    CGPoint controlPoint2 = CGPointMake(point.x - 5.0 - arc4random_uniform(50), 150.0);
    for (NSInteger i = 0; i < 5; i++) {
        controlPoint1 = CGPointMake(point.x + (point.x - controlPoint2.x), 50.0);
        point.x += 40.0 + arc4random_uniform(20);
        controlPoint2 = CGPointMake(point.x - 5.0 - arc4random_uniform(50), 150.0);
        [path addCurveToPoint:point controlPoint1:controlPoint1 controlPoint2:controlPoint2];
    }
    
    CAShapeLayer *layer = [CAShapeLayer layer];
    layer.lineWidth = 5;
    layer.strokeColor = [UIColor redColor].CGColor;
    layer.fillColor = [UIColor clearColor].CGColor;
    layer.path = path.CGPath;
    layer.shadowColor = [UIColor redColor].CGColor;
    layer.shadowRadius = 2.0;
    layer.shadowOpacity = 1.0;
    layer.shadowOffset = CGSizeZero;
    layer.lineCap = kCALineCapRound;
    
    [self.view.layer addSublayer:layer];
    
  • 通过识别用户点击的像素颜色,获取用户点击坐标处的像素颜色

    - (void)handleTap:(UITapGestureRecognizer *)gesture
    {
        CGPoint point = [gesture locationInView:gesture.view];
    
        CGFloat red, green, blue, alpha;
        UIColor *color = [self image:self.image colorAtPoint:point];
        [color getRed:&red green:&green blue:&blue alpha:&alpha];
    
        if (green < 0.9 && blue < 0.9 && red > 0.9)
            NSLog(@"tapped on curve");
        else
            NSLog(@"didn't tap on curve");
    }
    

  • 您可以使用
    UIBezierPath
    创建贝塞尔曲线(平滑曲线)。您可以为
    CAShapeLayer
    指定此路径,并将其作为子层添加到视图中:

    UIBezierPath *path = [UIBezierPath bezierPath];
    [path moveToPoint:CGPointMake(10, 150)];
    [path addCurveToPoint:CGPointMake(110, 150) controlPoint1:CGPointMake(40,  100) controlPoint2:CGPointMake(80,  100)];
    [path addCurveToPoint:CGPointMake(210, 150) controlPoint1:CGPointMake(140, 200) controlPoint2:CGPointMake(170, 200)];
    [path addCurveToPoint:CGPointMake(310, 150) controlPoint1:CGPointMake(250, 100) controlPoint2:CGPointMake(280, 100)];
    
    CAShapeLayer *layer = [CAShapeLayer layer];
    layer.lineWidth = 10;
    layer.strokeColor = [UIColor redColor].CGColor;
    layer.fillColor = [UIColor clearColor].CGColor;
    layer.path = path.CGPath;
    
    [self.view.layer addSublayer:layer];
    


    如果你想随机化一点,你可以随机化一些曲线。如果你想要一些模糊,添加一些阴影。如果希望端点为圆形,请指定圆形线帽:

    UIBezierPath *path = [UIBezierPath bezierPath];
    CGPoint point = CGPointMake(10, 100);
    [path moveToPoint:point];
    
    CGPoint controlPoint1;
    CGPoint controlPoint2 = CGPointMake(point.x - 5.0 - arc4random_uniform(50), 150.0);
    for (NSInteger i = 0; i < 5; i++) {
        controlPoint1 = CGPointMake(point.x + (point.x - controlPoint2.x), 50.0);
        point.x += 40.0 + arc4random_uniform(20);
        controlPoint2 = CGPointMake(point.x - 5.0 - arc4random_uniform(50), 150.0);
        [path addCurveToPoint:point controlPoint1:controlPoint1 controlPoint2:controlPoint2];
    }
    
    CAShapeLayer *layer = [CAShapeLayer layer];
    layer.lineWidth = 5;
    layer.strokeColor = [UIColor redColor].CGColor;
    layer.fillColor = [UIColor clearColor].CGColor;
    layer.path = path.CGPath;
    layer.shadowColor = [UIColor redColor].CGColor;
    layer.shadowRadius = 2.0;
    layer.shadowOpacity = 1.0;
    layer.shadowOffset = CGSizeZero;
    layer.lineCap = kCALineCapRound;
    
    [self.view.layer addSublayer:layer];
    
  • 通过识别用户点击的像素颜色,获取用户点击坐标处的像素颜色

    - (void)handleTap:(UITapGestureRecognizer *)gesture
    {
        CGPoint point = [gesture locationInView:gesture.view];
    
        CGFloat red, green, blue, alpha;
        UIColor *color = [self image:self.image colorAtPoint:point];
        [color getRed:&red green:&green blue:&blue alpha:&alpha];
    
        if (green < 0.9 && blue < 0.9 && red > 0.9)
            NSLog(@"tapped on curve");
        else
            NSLog(@"didn't tap on curve");
    }
    

  • 您可以使用
    UIBezierPath
    创建贝塞尔曲线(平滑曲线)。您可以为
    CAShapeLayer
    指定此路径,并将其作为子层添加到视图中:

    UIBezierPath *path = [UIBezierPath bezierPath];
    [path moveToPoint:CGPointMake(10, 150)];
    [path addCurveToPoint:CGPointMake(110, 150) controlPoint1:CGPointMake(40,  100) controlPoint2:CGPointMake(80,  100)];
    [path addCurveToPoint:CGPointMake(210, 150) controlPoint1:CGPointMake(140, 200) controlPoint2:CGPointMake(170, 200)];
    [path addCurveToPoint:CGPointMake(310, 150) controlPoint1:CGPointMake(250, 100) controlPoint2:CGPointMake(280, 100)];
    
    CAShapeLayer *layer = [CAShapeLayer layer];
    layer.lineWidth = 10;
    layer.strokeColor = [UIColor redColor].CGColor;
    layer.fillColor = [UIColor clearColor].CGColor;
    layer.path = path.CGPath;
    
    [self.view.layer addSublayer:layer];
    


    如果你想随机化一点,你可以随机化一些曲线。如果你想要一些模糊,添加一些阴影。如果希望端点为圆形,请指定圆形线帽:

    UIBezierPath *path = [UIBezierPath bezierPath];
    CGPoint point = CGPointMake(10, 100);
    [path moveToPoint:point];
    
    CGPoint controlPoint1;
    CGPoint controlPoint2 = CGPointMake(point.x - 5.0 - arc4random_uniform(50), 150.0);
    for (NSInteger i = 0; i < 5; i++) {
        controlPoint1 = CGPointMake(point.x + (point.x - controlPoint2.x), 50.0);
        point.x += 40.0 + arc4random_uniform(20);
        controlPoint2 = CGPointMake(point.x - 5.0 - arc4random_uniform(50), 150.0);
        [path addCurveToPoint:point controlPoint1:controlPoint1 controlPoint2:controlPoint2];
    }
    
    CAShapeLayer *layer = [CAShapeLayer layer];
    layer.lineWidth = 5;
    layer.strokeColor = [UIColor redColor].CGColor;
    layer.fillColor = [UIColor clearColor].CGColor;
    layer.path = path.CGPath;
    layer.shadowColor = [UIColor redColor].CGColor;
    layer.shadowRadius = 2.0;
    layer.shadowOpacity = 1.0;
    layer.shadowOffset = CGSizeZero;
    layer.lineCap = kCALineCapRound;
    
    [self.view.layer addSublayer:layer];
    
  • 通过识别用户点击的像素颜色,获取用户点击坐标处的像素颜色

    - (void)handleTap:(UITapGestureRecognizer *)gesture
    {
        CGPoint point = [gesture locationInView:gesture.view];
    
        CGFloat red, green, blue, alpha;
        UIColor *color = [self image:self.image colorAtPoint:point];
        [color getRed:&red green:&green blue:&blue alpha:&alpha];
    
        if (green < 0.9 && blue < 0.9 && red > 0.9)
            NSLog(@"tapped on curve");
        else
            NSLog(@"didn't tap on curve");
    }
    

  • 你说划一条线是什么意思?用户绘制它?你有一个特定的贝塞尔路径,你想画上吗?嗨,当游戏开始时,用户会看到线,他会按照线使用手指触摸谢谢!你说划一条线是什么意思?用户绘制它?你有一个特定的贝塞尔路径,你想画上吗?嗨,当游戏开始时,用户会看到线,他会按照线使用手指触摸谢谢!你说划一条线是什么意思?用户绘制它?你有一个特定的贝塞尔路径,你想画上吗?嗨,当游戏开始时,用户会看到线,他会按照线使用手指触摸谢谢!你说划一条线是什么意思?用户绘制它?你有一个特定的贝塞尔路径,你想画上吗?嗨,当游戏开始时,用户会看到线,他会按照线使用手指触摸谢谢!非常感谢你的解释和时间。我在试你告诉我的。只要一个问题,如果我想改变线的形状有一个螺旋。在这种情况下,我必须修改addcurvetopointcorrect方法?是的,您必须调整添加的各个贝塞尔曲线的端点和控制点。请参阅中关于beziers的讨论(虽然它讨论的是beziers的较低级别核心图形API,但“将曲线添加到路径”部分中的控制点说明可能很有启发性)。非常感谢您的解释和时间。我在试你告诉我的。只要一个问题,如果我想改变线的形状有一个螺旋。在这种情况下,我必须修改addcurvetopointcorrect方法?是的,您必须调整添加的各个贝塞尔曲线的端点和控制点。请参阅中关于beziers的讨论(虽然它讨论的是beziers的较低级别核心图形API,但“将曲线添加到路径”部分中的控制点说明可能很有启发性)。非常感谢您的解释和时间。我在试你告诉我的。只要一个问题,如果我想改变线的形状有一个螺旋。在这种情况下,我必须修改addcurvetopointcorrect方法?是的,您必须调整添加的各个贝塞尔曲线的端点和控制点。请参阅中关于beziers的讨论(虽然它讨论的是beziers的较低级别核心图形API,但“将曲线添加到路径”部分中的控制点说明可能很有启发性)。非常感谢您的解释和时间。我在试你告诉我的。只要一个问题,如果我想改变线的形状有一个螺旋。在这种情况下,我必须修改addcurvetopointcorrect方法?是的,您必须调整添加的各个贝塞尔曲线的端点和控制点。请参阅中关于beziers的讨论(虽然它讨论的是beziers的较低级别的核心图形API,但“将曲线添加到路径”部分中的控制点说明可能很有启发性)。