Боюсь, это вопрос новичка:
У меня есть 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];
}
}