0

我正在尝试创建一个程序,当我在与上次触摸结束的位置大致相同的位置点击时,一个圆圈会改变颜色。我尝试使用 previousLocationInView 方法,其逻辑如下:“如果 touchesbegan location == previousTouchesLocation,将颜色更改为蓝色。” 此方法不起作用,因为 touchesBegan 和 previousTouchLocation 坐标具有相同的值,无论位置如何,只要我点击屏幕,它总是会改变颜色。如果我用 touchesEnded 替换 previousTouchLocation,我会得到相同的结果。如果有人认为它可以提供帮助,这里是代码。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch* touch = [touches anyObject];
    touchLocation = [touch locationInView:self.view];
    lastTouchLocation = [[touches anyObject] previousLocationInView:self.view];
    distance_x = touchLocation.x - cvx;
    distance_y = cvy - touchLocation.y;
    previousDistance_x = lastTouchLocation.x - cvx;
    previousDistance_y = cvy - lastTouchLocation.y;

    if ((previousDistance_x == distance_x) && (previousDistance_y == distance_y)) {
        if (([cv.color isEqual:[UIColor redColor]])) {
           [cv setColor:[UIColor blueColor]];
        }
        else
            [cv setColor:[UIColor redColor]];
    }
}
4

1 回答 1

0

-previousLocationInView:为您提供当前在屏幕上移动的触摸的先前位置。它不会为您提供不同的、现已结束的触摸的位置。

您要做的是,在第一次触摸时,将触摸的位置存储在属性或 ivar 中。然后,在第二次触摸时,将其位置与存储的位置进行比较。您需要留出一些余地——手指不像鼠标那样精确到像素——所以移动十或二十个像素的触摸可能应该算作双击。

实际上,想想看,最好的选择可能是使用UITapGestureRecognizer设置numberOfTapsRequired为 2 的 a。这将为您处理所有检测逻辑,您可以将其与其他手势识别器结合以构建更复杂的行为。

于 2013-05-22T01:05:11.650 回答