Как определить, что UIView в данный момент касается? - PullRequest
2 голосов
/ 28 февраля 2012

Есть ли способ, с помощью которого я могу запросить UIView, чтобы определить, к нему ли прикасались? Причина, по которой я спрашиваю, заключается в том, что я использую "touchedBegan", "touchesEnded" и "touchesMoved", чтобы держать UIView под пальцем пользователя. Однако, если пользователь действительно очень быстро перемещает свой палец и ему удается «вырваться» из окна, я хочу удалить это окно.
Я думал, что смогу использовать таймер, чтобы периодически проверять каждое представление, чтобы определить, к нему ли прикасались, если нет, я его удалю. "IsTouchedProperty" было бы идеально. Есть мысли?

Ответы [ 2 ]

3 голосов
/ 21 июня 2012

У меня была похожая проблема, и я решил ее, используя свойство tracking.Из документации:

Логическое значение, которое указывает, отслеживает ли получатель в настоящий момент касания, связанные с событием.(только для чтения)

Это метод в UIControl, но вы не пытаетесь его создать?

Вы также можете hitTest просмотров.Отметьте Документы Apple

2 голосов
/ 21 апреля 2015

Поскольку UIView не наследуется от UIControl, вам необходимо создать подкласс UIView и создать собственное свойство isTouching, используя сенсорные события. Что-то вроде:

// MyView.h
@interface MyView : UIView
@property (nonatomic, assign) BOOL isTouching;
@end


// MyView.m
...

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];
    self.isTouching = YES;
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesCancelled:touches withEvent:event];
    self.isTouching = NO;
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesEnded:touches withEvent:event];
    self.isTouching = NO;
}
...