我正在尝试开发一个分析应用,确定你是否“聪明” 这涉及到的是拍摄自己的照片并将点拖到脸上,鼻子,嘴巴和眼睛都在哪里。但是,我尝试过的代码不起作用:
-(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];
}
发生了什么事,因为当我只有一张图片时,它会起作用,但对我没有帮助。我能做些什么才能让它发挥作用?这些斑点从“工具栏”中的屏幕底部开始,然后用户将它们拖到脸上。我希望完成的结果看起来像:
答案 0 :(得分:2)
有两种基本方法:
您可以在控制器或主视图中使用各种触摸方法(例如touchesBegan
,touchesMoved
等),也可以在主视图上使用单个手势识别器。在这种情况下,您使用touchesBegan
,或者,如果使用手势识别器,state
UIGestureRecognizerStateBegan
,请确定超级视图的locationInView
,然后测试是否通过测试CGRectContainsPoint
,使用各种视图的frame
作为第一个参数,并使用location
作为第二个参数,触摸覆盖了您的一个视图。
识别出手势开始的视图,然后在touchesMoved
中,或者,如果在手势识别器中,state
UIGestureRecognizerStateChanged
,并根据{{1}移动视图}}
或者(更容易恕我直言),您可以创建附加到每个子视图的单独手势识别器。后一种方法可能如下所示。例如,您首先添加手势识别器:
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