касание какао: как передать прикосновение к другому объекту - PullRequest
4 голосов
/ 18 апреля 2011

Боюсь, это вопрос новичка:

У меня есть 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 View. В этом случае я бы хотел, чтобы представление 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 и PASS ON касанием для UITextView?

Извините, если это просто, но я понятия не имею, как это реализовать. Спасибо за любые предложения.


EDIT:

Я ввел метод 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];


}

}

1 Ответ

2 голосов
/ 18 апреля 2011

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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...