2

我创建了一个带有旋钮的控件。该旋钮只能沿 x 轴和 y 轴移动。
我已经实现了以下方法:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

我知道,必须在touchMoved. 当我限制沿例如 x 轴的移动时,一切都按预期工作。但是如何启用 y 轴的运动呢?当我启用第二个轴时,旋钮的移动不仅限于 两个轴。这里是touchMoved实现的一部分:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint currentLocation = [touch locationInView:self.view];
    CGPoint centerPoint = _triggerCap.center;
    CGPoint selectionTriggerCenter = _selectionTrigger.center;


    double distance = ({double d1 = centerPoint.x - selectionTriggerCenter.x, d2 = centerPoint.y - selectionTriggerCenter.y; sqrt(d1 * d1 + d2 * d2); });
    if (distance < 100.0) {
        if (fabsf(selectionTriggerCenter.y - currentLocation.y) > 5) {
            centerPoint.y = currentLocation.y;
            _triggerCap.center = centerPoint;

有人可以给我一个提示如何仅沿这两个轴移动吗?

4

1 回答 1

0

我能想到的最快方法是:

touchesBegan中,记录第一次触摸在旋钮内的位置。然后,在 中touchesMoved,等到从第一次触摸开始至少有一个最小距离(可能是 15 像素 - 试一试,看看什么效果最好)。检查它是否在 x 方向或 y 方向上距离第一次触摸更远。这将确定当前触摸序列的其余部分应限制在哪个轴移动。设置一个标志来指示轴,然后使用您已经拥有的代码来限制单个轴的移动。touchesEnded在旋钮返回到距轴交点一定距离内时或当旋钮复位时重置标志。

于 2012-07-14T23:21:14.547 回答