Ios 更改UIBezierArc颜色,当其控制柄仅从控制柄内部或外部绘制时
我有一个圆形滑块,里面画了一个贝塞尔圆弧,一个圆弧在滑块的起点和终点有两个手柄,圆弧在圆形滑块中画 我能够绘制贝塞尔曲线沿圆形滑块的帮助下开始和结束处理 我想改变颜色的弧时,它被拖动45内或45外从处理只,它不应该改变弧颜色时,它被拖动在圆形滑块 注意-在内外拖动时,不应改变其他滑块弧的颜色。 仅当在内部和外部拖动时,颜色才应更改,而不是在圆形中拖动时Ios 更改UIBezierArc颜色,当其控制柄仅从控制柄内部或外部绘制时,ios,objective-c,uibezierpath,Ios,Objective C,Uibezierpath,我有一个圆形滑块,里面画了一个贝塞尔圆弧,一个圆弧在滑块的起点和终点有两个手柄,圆弧在圆形滑块中画 我能够绘制贝塞尔曲线沿圆形滑块的帮助下开始和结束处理 我想改变颜色的弧时,它被拖动45内或45外从处理只,它不应该改变弧颜色时,它被拖动在圆形滑块 注意-在内外拖动时,不应改变其他滑块弧的颜色。 仅当在内部和外部拖动时,颜色才应更改,而不是在圆形中拖动时 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { [supe
- (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];
}
-(无效)触摸移动:(NSSet*)触摸事件:(UIEvent*)事件
{
[超级触摸移动:触摸事件:事件];
_拖动=是;
如果(!self.isDraging)
{
返回;
}
if([self.delegate respondsToSelector:@selector(sliderDraggin:)]))
{
[self.delegate sliderDraggin:self];
}
UITouch*touch=[触摸任何对象];
//UITouch*touch=[触摸任何对象];
NSUInteger nearestHandleIndex=[self indexOfNearesPointForTouch:touch];
_nearesHandle=(NeareShandleIndex!=NSNotFound)?\u句柄[@(NeareShandleIndex)]:nil;
CGPoint位置=[触摸位置查看:自];
CGFloat距离=[[点:中心点和点:位置之间的数学距离];
CGFloat inOff=_半径-_滑块宽度-_偏移量。内部;
CGFloat outOff=_半径+_偏移量。外部;
如果(距离outOff)
{
if(self.isNeedToRevoke)
{
_拖动=否;
返回;
}
}
dispatch\u async(dispatch\u get\u main\u queue()^{
int a=从北的角度(_中心点,位置,EVA_翻转);
[自动移动视图:_neareshandletoangle:a];
[自吸弧];
});
[self-informDelegateAboutHandles];
}
您已经计算了距离
因此,首先,如果它小于
或>outOff
,请不要退出
相反,根据距离设置颜色,可能是:
UIColor *arcColor;
if (distance < (inOff - 45)) {
arcColor = [UIColor redColor];
} else if (distance > (outOff + 45)) {
arcColor = [UIColor redColor];
} else {
arcColor = [UIColor greenColor];
}
UIColor*arcColor;
如果(距离<(inOff-45)){
arcColor=[UIColor redColor];
}如果(距离>(输出+45)){
arcColor=[UIColor redColor];
}否则{
arcColor=[UIColor greenColor];
}
很明显,如果你认为合适的话,可以调整逻辑,但这可能是最基本的想法
使用此arcColor
更新绘图例程使用的任何特定于颜色的属性
我没有足够的资料来了解您是如何渲染这些圆弧的,但是包含了一个示例应用程序,该应用程序根据触摸情况为各个圆弧更新CAShapeLayer
的strokeColor
,产生以下结果:
我不太担心如何协调我的实现和你的实现,但它只是说明了上面显示的模式,在这里,您计算要在触摸中更新的弧开始
并在触摸移动
中更新颜色。在这种情况下,当我按handle并在滑块内部或外部拖动时,需要一些额外的宽度,我将其更改为45到5,因此,当我拖动较长的内部和较长的外部时,颜色会改变。如果我需要在滑块宽度内外做任何事情,我想在拖动手柄离开滑块后立即修改颜色值-在我们的外部内部,然后我将更新到另一种颜色,即45内外。请建议我,如果我尝试将1个处理程序拖动到内部,当它接近第二个滑块时,在这种情况下,滑块弧1和滑块2都获得相同的颜色。是否可以限制仅更改选定的弧处理程序颜色。请更新我。你能帮我解决这个问题吗?根据你最初的描述,我推断你想根据离弧中心的距离改变整个弧的颜色(我认为这就是你的黑色箭头所指示的)。我很抱歉,但我不理解你在这里的任何评论。在这一点上,恐怕我完全不知道你想要实现什么。也许可以编辑你的问题,包括一些快照(即使是手绘的),显示你希望它在手势的各个点上看到什么(可能有一些视觉提示,说明用户的手指在该点的位置)。