如何检查图像位置并在iOS中捕捉到位

时间:2014-01-28 22:08:57

标签: ios iphone objective-c

我正在尝试为iPad构建一个基本的Jigsaw应用程序但是我对目标c和xcode非常新,这意味着这是我第一次使用完全正常的应用程序。

我一直在网上关注一些教程并构建了一个非常基本的三个图像拼图,并成功地设法使其运行。但是,当用户拖动正确的区域并显示动画或声音时,我希望能够将图像捕捉到位。

我有点迷失了,我知道我需要为每个拼图指定x和y坐标,但是如果这是正确的位置我如何检查这个,然后触发一个动作,如动画和声音?

这是我目前的代码

 -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [[event allTouches]anyObject];
    CGPoint touchLocation = [touch
                             locationInView:self.view];
    if ([touch view] == image1){
        image1.center = touchLocation;
        NSLog(@"Touch x : %f y : %f", touchLocation.x, touchLocation.y);

                         }
    else if ([touch view] == image2){
        image2.center = touchLocation;
        NSLog(@"Touch x : %f y : %f", touchLocation.x, touchLocation.y);
    }
    else if ([touch view] == image3){
        image3.center = touchLocation;
        NSLog(@"Touch x : %f y : %f", touchLocation.x, touchLocation.y);
    }



}

正如你所看到的那样,我正在记录x和y,但我不确定如何继续这个

2 个答案:

答案 0 :(得分:0)

这是一个非常好的问题,我一直在考虑为孩子们准备这么简单的益智应用程序。

你走在正确的轨道上。我相信诀窍是要知道原始X,Y图像的位置应该在哪里。一旦用户在这些坐标上拖动它,你就可以锁定它并发出愉快的声音。我就是这样做的。 (这是伪代码)

如果有办法找到你是否足够接近原始图像的x,y坐标,那将会很酷

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [[event allTouches]anyObject];
    CGPoint touchLocation = [touch
                             locationInView:self.view];
    if ([touch view] == image1 && image1Locked == NO)
    {
        image1.center = touchLocation;
        NSLog(@"Touch x : %f y : %f", touchLocation.x, touchLocation.y);

if ( (touchLocation.x == to where x location of image1 should be) &&
     (touchLocation.y == to where y location of image1 should be)
     {
            //lock image by not checking drag anymore
            image1Locked = YES;

            //move the image1 in place where its should be

            //happy sounds
             [self happySounds];

     }

    }
    ...

答案 1 :(得分:0)

我们可以说{x1,y1}是image1的位置,如果您在touchesMovedtouchesEnded中检查触摸是否恰好位于{x1,y1},那么没有人会这样做。 所以,添加一个错误的错误,让我们把它命名为Epsilon,而不是再检查一个点,现在我们将尝试检查一个正方形(中心{x1,y1}和Epsilon的边长):这里有一些代码可以帮助你:< / p>

float epislon = 20.0;

 -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [[event allTouches]anyObject];
    CGPoint touchLocation = [touch
                             locationInView:self.view];
    if ([touch view] == image1)
    {
        image1.center = touchLocation;
        NSLog(@"Touch x : %f y : %f", touchLocation.x, touchLocation.y);

        CGRect rect1= CGRectMake(x1-epsilon/2.0, y1-epsilon/2.0, epsilon, epsilon);
        if(CGRectContainsPoint(rect1,touchLocation))
        {
            NSLog(@"did find position for image1");
        }
    }
}