【问题标题】:Change UIBezierArc colour, when its handle is drawn inside or outside from handle only更改 UIBezierArc 颜色,当其手柄仅从手柄内部或外部绘制时
【发布时间】:2018-01-23 16:23:21
【问题描述】:

我有一个圆形滑块,其中绘制了一个贝塞尔弧,一个弧在滑块的起点和终点有两个手柄,弧是在圆形滑块中绘制的。

借助开始和结束句柄,我可以沿着圆形滑块绘制贝塞尔曲线。

我想在仅从手柄向内拖动 45 或向外拖动 45 时更改弧的颜色,并且在圆形滑块中拖动时不应更改弧的颜色。

注意-在内部和外部拖动时,它不应改变其他滑块弧线的颜色。

颜色应该只在被内部和外部拖动时才改变,而不是在圆形拖动时。

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesMoved:touches withEvent:event];
_dragging = YES;

if (!self.isDragging)
{
    return;
}

if ([self.delegate respondsToSelector:@selector(sliderDraggin:)])
{
    [self.delegate sliderDraggin:self];
}

UITouch *touch = [touches anyObject];
//UITouch *touch = [touches anyObject];

NSUInteger nearestHandleIndex = [self indexOfNearesPointForTouch:touch];
_nearesHandle = (nearestHandleIndex != NSNotFound) ? _handles[@(nearestHandleIndex)] : nil;


CGPoint location = [touch locationInView:self];
CGFloat distance = [_math distanceBetweenPoint:_centerPoint andPoint:location];



CGFloat inOff = _radius - _sliderWidth - _offset.inside;
CGFloat outOff = _radius + _offset.outside;

if (distance < inOff || distance > outOff)
{
    if (self.isNeedToRevoke)
    {
        _dragging = NO;
        return;
    }
}

dispatch_async(dispatch_get_main_queue(), ^{
    int a = AngleFromNorth(_centerPoint, location, EVA_FLIPPED);
    [self moveView:_nearesHandle toAngle:a];

    [self drawArc];
});

[self informDelegateAboutHandles];
}

【问题讨论】:

    标签: ios objective-c uibezierpath


    【解决方案1】:

    您已经计算出distance

    1. 所以,首先,如果小于&lt; inOff&gt; outOff,请不要退出。

    2. 相反,根据distance 设置颜色,也许:

      UIColor *arcColor;
      
      if (distance < (inOff - 45)) { 
          arcColor = [UIColor redColor];
      } else if (distance > (outOff + 45)) { 
          arcColor = [UIColor redColor];
      } else { 
          arcColor = [UIColor greenColor];
      }
      

      显然,可以根据需要调整逻辑,但这可能是基本思想。

    3. 使用此arcColor 更新绘图例程使用的任何颜色特定属性。


    我无法弄清楚您是如何渲染这些弧线的,但this repo 包含示例应用程序,它根据触摸更新各个弧线的strokeColorCAShapeLayer,产生以下结果:

    我不会太担心将我的实现与您的实现相协调,但它只是说明了上面显示的模式,您可以在其中计算要更新 touchesBegan 中的哪个弧并更新 touchesMoved 中的颜色。

    【讨论】:

    • 在这种情况下,当我按下手柄并在滑块内部或外部拖动时,它需要一些额外的宽度,我将 45 更改为 5,因此当我拖动一个长的内部和外部的长度时,颜色会发生变化。如果我需要在滑块宽度内外做任何事情。
    • 我想在拖动手柄离开滑块后立即修改颜色值 - 在我们的外部内部,然后我将内部和外部更新为另一种颜色为 45。请推荐我
    • 如果我尝试将 1 个处理程序拖入内部并且当它靠近第二个滑块时,在这种情况下,滑块弧 1 和滑块 2 都获得相同的颜色。是否可以限制仅更改选定的弧处理程序颜色.请更新我
    • 你能帮我解决这个问题吗
    • 根据您的原始描述,我推断您想根据与圆弧中心的距离来更改整个圆弧的颜色(我认为这是您的黑色箭头所指示的) .我很抱歉,但只是我不了解您的任何 cmets。在这一点上,恐怕我完全不知道你想要实现什么。也许编辑您的问题以包含一些快照(即使是手绘的),以显示您希望它查看手势的各个点的内容(可能有一些关于用户手指在该点所在位置的视觉提示)。
    猜你喜欢
    • 2016-12-04
    • 2017-03-01
    • 2011-08-05
    • 1970-01-01
    • 2011-12-01
    • 2021-04-17
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    相关资源
    最近更新 更多