1

あなたが「賢い」かどうかを判断する分析アプリを開発しようとしています。これには、自分の写真を撮り、鼻、口、目がある顔にポイントをドラッグすることが含まれます。ただし、試したコードは機能しません。

-(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];
}

何が起こっているのかというと、画像が 1 つしかない場合は機能しますが、役に立たないからです。機能させるにはどうすればよいですか?スポットは「ツールバー」の画面の下部から始まり、ユーザーはそれらを顔にドラッグします。完成した結果を次のようにしたい:

http://gyazo.com/0ea444a0edea972a86a46ebb99580b2e

4

1 に答える 1

2

2 つの基本的なアプローチがあります。

  1. コントローラーまたはメイン ビューでさまざまなタッチ メソッド ( touchesBegan、など) を使用するか、メイン ビューで単一のジェスチャ レコグナイザーを使用できます。touchesMovedこの状況では、使用するtouchesBeganか、ジェスチャ レコグナイザを使用する場合はstateofを使用してスーパービューUIGestureRecognizerStateBeganを決定し、さまざまなビューの を最初のパラメータとして使用して、locationInViewtest によってビューの 1 つにタッチがあるかどうかをテストします。を2 番目のパラメーターとして使用します。CGRectContainsPointframelocation

    ジェスチャが開始されたビューを識別しtouchesMovedたら、または、ジェスチャ レコグナイザーの場合は の で、stateUIGestureRecognizerStateChanged基づいてビューを移動しますtranslationInView

  2. 代わりに (そしてより簡単な私見)、各サブビューにアタッチする個々のジェスチャ認識エンジンを作成できます。この後者のアプローチは、次のようになります。たとえば、最初にジェスチャ レコグナイザーを追加します。

    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次に、メソッドを実装します。

    - (void)handlePanGesture:(UIPanGestureRecognizer *)gesture
    {
        CGPoint translation = [gesture translationInView:gesture.view];
        if (gesture.state == UIGestureRecognizerStateChanged)
        {
            gesture.view.transform = CGAffineTransformMakeTranslation(translation.x, translation.y);
            [gesture.view.superview bringSubviewToFront:gesture.view];
        }
        else if (gesture.state == UIGestureRecognizerStateEnded)
        {
            gesture.view.transform = CGAffineTransformIdentity;
            gesture.view.center = CGPointMake(gesture.view.center.x + translation.x, gesture.view.center.y + translation.y);
        }
    }
    
于 2013-06-23T01:55:29.533 に答える