2013-06-22 87 views
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]; 
} 

發生了什麼,因爲當我只是有一個單一的形象,它的工作原理,但不利於我。我能做些什麼來使它工作?點在「工具欄」的屏幕底部開始,然後用戶將它們拖到臉上。我還挺想完成的結果是這樣的:

http://gyazo.com/0ea444a0edea972a86a46ebb99580b2e

+0

你有沒有想過使用人臉檢測?此外,代碼做錯了什麼?圖像從哪裏開始? – Wain

+0

你需要解釋更多: 「發生了什麼事,因爲當我只有一張圖像時,它可以工作,但對我沒有幫助,我能做些什麼來使它工作? 什麼是沒有幫助?什麼不起作用? – John

+1

...另外,你有沒有考慮過使用手勢識別器?他們抽象出一些'touchesMoved' /'touchesBegan'的複雜性 – lxt

回答

2

有兩種基本方法:

  1. 中您可以使用各種觸摸方法(例如touchesBegantouchesMoved等),您的控制器或主視圖,或者您可以在主視圖上使用單個手勢識別器。在這種情況下,您將使用touchesBegan,或者如果使用手勢識別器,stateUIGestureRecognizerStateBegan,確定locationInView的超級視圖,然後通過測試CGRectContainsPoint,使用各種各樣的frame來測試觸摸是否在您的某個視圖之上視圖作爲第一個參數,並使用location作爲第二個參數。

    在確定了認爲手勢開始,然後在touchesMoved或者,如果在手勢識別的UIGestureRecognizerStateChanged一個state,並移動基於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); 
        } 
    } 
    
+0

這有幫助!非常感謝! – RafeeJ