2011-04-18 83 views
4

這是一個初學者的問題恐怕:可可觸摸:如何在觸摸傳遞到另一個對象

我有一個UIText覆蓋整個屏幕。我對這個的UITextView的頂部的另一個透明視圖,以便能夠識別手勢滑動(水平和垂直),像這樣:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // UITextView 
    CGRect aFrame = CGRectMake(0, 0, 320, 480); 
    aTextView = [[UITextView alloc] initWithFrame:aFrame]; 
    aTextView.text = @"Some sample text."; 
    [self.view addSubview:aTextView]; 

    // canTouchMe 
    CGRect canTouchMeFrame = CGRectMake(0, 0, 320, 480); 
    canTouchMe = [[UIView alloc] initWithFrame:canTouchMeFrame]; 
    [self.view addSubview:canTouchMe]; 
    } 

讓我們考慮用戶觸摸(不刷卡)的canTouchMe查看。在這種情況下,我希望canTouchMe視圖消失並傳遞到UITextView隱藏下方,以便它進入編輯模式並啓用UITextView具有的「自然」滾動選項(即僅水平)。

我倒是開始的方法是這樣的:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

    [super touchesBegan:touches withEvent:event]; 

    UITouch *touch =[touches anyObject]; 
    gestureStartPoint = [touch locationInView:self.view]; 
} 

我怎麼告訴這個方法是,如果只承認ONE TOUCH,它應隱藏canTouchMeFrame和轉嫁觸摸到UITextView中?

對不起,如果這是基本的,但我不知道如何實現這一點。感謝您的任何建議。


編輯:

我介紹了一個touchEnded方法,但我仍然沒有運氣。觸摸不會被轉發到UITextView。我需要爲編輯挖掘兩次:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ 

[super touchesMoved:touches withEvent:event]; 

UITouch *touch = [touches anyObject]; 
CGPoint currentPosition = [touch locationInView:self.view]; 

CGFloat deltaX = fabsf(gestureStartPoint.x - currentPosition.x); // will always be positive 
CGFloat deltaY = fabsf(gestureStartPoint.y - currentPosition.y); // will always be positive 


if (deltaY == 0 && deltaX == 0) { 

    label.text = @"Touch"; [self performSelector:@selector(eraseText) withObject:nil afterDelay:2]; 

    [aTextView touchesBegan:touches withEvent:event]; 

    [self.view bringSubviewToFront:aTextView]; 
    [self.view bringSubviewToFront:doneEdit]; 


} 

}

回答

2

NSSet-count方法。如果touches只有一個對象,那麼您只需單擊即可。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

    [super touchesBegan:touches withEvent:event]; 
    if ([touches count] == 1) { 
     [self hideMyRectangle]; 
     [someOtherObject touchesBegan:touches withEvent:event]; 
     //etc, etc. 
     return; 
     } 
    // if you get here, there's more than one touch.  
    UITouch *touch =[touches anyObject]; 
    gestureStartPoint = [touch locationInView:self.view]; 
} 
+0

非常感謝您的幫助。這工作正常 - 唯一的問題是,我的程序現在可以只檢測觸摸,而不是SWIPES了。我相應地更新了代碼(參見上文)。看起來,如果我獲得的不止一次觸摸,它不會將其識別爲這樣,而只能作爲一次觸摸。例如。如果我滑動,它只會將其識別爲一次觸摸。 – 2011-04-18 11:53:42