拖动多个图像

时间:2013-06-22 11:16:19

标签: ios objective-c

我正在尝试开发一个分析应用,确定你是否“聪明” 这涉及到的是拍摄自己的照片并将点拖到脸上,鼻子,嘴巴和眼睛都在哪里。但是,我尝试过的代码不起作用:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint location = [touch locationInView:self.view];

    if ([touch view] == eye1) 
    {
        eye1.center = location;
    } 
    else if ([touch view] == eye2) 
    {
        eye2.center = location;
    } 
    else if ([touch view] == nose) 
    {
        nose.center = location;
    } 
    else if ([touch view] == chin)  
    {
       chin.center = location;
    }
    else if ([touch view] == lip1) 
    {
        lip1.center = location;
    }
    else if ([touch view] ==lip2) 
    {
        lip2.center = location;
    }
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{
    [self touchesBegan:touches withEvent:event];
}

发生了什么事,因为当我只有一张图片时,它会起作用,但对我没有帮助。我能做些什么才能让它发挥作用?这些斑点从“工具栏”中的屏幕底部开始,然后用户将它们拖到脸上。我希望完成的结果看起来像:

http://gyazo.com/0ea444a0edea972a86a46ebb99580b2e

1 个答案:

答案 0 :(得分:2)

有两种基本方法:

  1. 您可以在控制器或主视图中使用各种触摸方法(例如touchesBegantouchesMoved等),也可以在主视图上使用单个手势识别器。在这种情况下,您使用touchesBegan,或者,如果使用手势识别器,state UIGestureRecognizerStateBegan,请确定超级视图的locationInView,然后测试是否通过测试CGRectContainsPoint,使用各种视图的frame作为第一个参数,并使用location作为第二个参数,触摸覆盖了您的一个视图。

    识别出手势开始的视图,然后在touchesMoved中,或者,如果在手势识别器中,state UIGestureRecognizerStateChanged,并根据{{1}移动视图}}

  2. 或者(更容易恕我直言),您可以创建附加到每个子视图的单独手势识别器。后一种方法可能如下所示。例如,您首先添加手势识别器:

    translationInView

    然后实施NSArray *views = @[eye1, eye2, lip1, lip2, chin, nose]; for (UIView *view in views) { view.userInteractionEnabled = YES; UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)]; [view addGestureRecognizer:pan]; } 方法:

    handlePanGesture