-1

我正在使用 MHRotaryKnob 制作像动画一样的转盘。我正在用它来制作旧电话拨号盘。!
图像
目前它只是显示动画,当我拨动它时它只是带着动画回来。即使从较低的第一个圆圈甚至没有检测到触摸,触摸也在那里工作,没有圆圈可以拨号。下面我发布我正在使用的代码。

 - (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
 {
CGPoint point = [touch locationInView:self];

if (self.interactionStyle == MHRotaryKnobInteractionStyleRotating)
{
    // If the touch is too close to the center, we can't calculate a decent
    // angle and the knob becomes too jumpy.
    if ([self squaredDistanceToCenter:point] < MinDistanceSquared)
        return NO;

    // Calculate starting angle between touch and center of control.
    _angle = [self angleBetweenCenterAndPoint:point];
}
else
{
    _touchOrigin = point;
    _angle = [self angleForValue:self.value];
}

self.highlighted = YES;
[self showHighlighedKnobImage];
_canReset = NO;

return YES;
}

- (BOOL)handleTouch:(UITouch *)touch
{
if (touch.tapCount > 1 && self.resetsToDefault && _canReset)
{
    [self setValue:self.defaultValue animated:YES];
    return NO;
}

CGPoint point = [touch locationInView:self];

if (self.interactionStyle == MHRotaryKnobInteractionStyleRotating)
{
    if ([self squaredDistanceToCenter:point] < MinDistanceSquared)
        return NO;

    // Calculate how much the angle has changed since the last event.
    float newAngle = [self angleBetweenCenterAndPoint:point];
    float delta = newAngle - _angle;
    _angle = newAngle;

    // We don't want the knob to jump from minimum to maximum or vice versa
    // so disallow huge changes.
    if (fabsf(delta) > 45.0f)
        return NO;

    self.value += (self.maximumValue - self.minimumValue) * delta / (MaxAngle*2.0f);

    // Note that the above is equivalent to:
    //self.value += [self valueForAngle:newAngle] - [self valueForAngle:angle];
}
else
{
    self.value = [self valueForPosition:point];
}

return YES;
}

- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
{
if ([self handleTouch:touch] && self.continuous)
    [self sendActionsForControlEvents:UIControlEventValueChanged];

return YES;
}

- (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
{
self.highlighted = NO;
[self showNormalKnobImage];

// You can only reset the knob's position if you immediately stop dragging
// the knob after double-tapping it, i.e. when tracking ends.
_canReset = YES;

[self handleTouch:touch];
[self sendActionsForControlEvents:UIControlEventValueChanged];

[self setValue:self.defaultValue animated:YES];


}

我正在尝试实现可以​​检测到选择哪个圆圈进行拨号,并且只能使用圆圈来拨号而不是在圆圈之外。在此先感谢,任何形式的帮助表示赞赏。

4

1 回答 1

6

稍作调整,这就是您要寻找的:

在此处输入图像描述

链接:https ://github.com/eliotfowler/EFCircularSlider

于 2013-12-16T16:01:24.670 回答