我有一个圆形滑块,其中有一个贝塞弧,弧形在滑块的起点和终点有两个手柄,弧形在圆形滑块中绘制。
我可以借助开始和结束手柄在圆形滑块上绘制贝塞尔曲线。
我希望在仅从手柄向内拖动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];
}
答案 0 :(得分:1)
您已计算出distance
。
首先,如果它低于< inOff
或> outOff
,请不要退出。
相反,请根据distance
设置颜色,或许:
UIColor *arcColor;
if (distance < (inOff - 45)) {
arcColor = [UIColor redColor];
} else if (distance > (outOff + 45)) {
arcColor = [UIColor redColor];
} else {
arcColor = [UIColor greenColor];
}
显然,根据您的需要调整逻辑,但这可能是基本想法。
使用此arcColor
更新绘图例程使用的任何特定于颜色的属性。
我没有足够的数据来弄清楚你如何呈现这些弧线,但this repo包含基于触摸更新strokeColor
个{arc} CAShapeLayer
的示例应用,产生以下内容:
我不太担心将您的实现与您的实现进行协调,但它只是说明了上面显示的模式,您可以在touchesBegan
中计算要更新的弧并更新{{1}中的颜色}。