UIView: Как проверить, заканчивались ли касания в том же виде, в котором они начались - PullRequest
8 голосов
/ 23 апреля 2011

В AcaniUsers я создал сетку из ThumbView : UIView экземпляров внутри UITableView. Все thumbViews имеют ширину kThumbSize. Как определить, что касания заканчиваются в том же виде, в котором они начались?

Ответы [ 2 ]

3 голосов
/ 23 апреля 2011

Следующее работает, но я не уверен, что это лучший способ сделать это. Хотя я так думаю.

Поскольку все thumbViews имеют ширину kThumbSize, просто отметьте touchesEnded, что x-координата locationInView экземпляра UITouch (при условии self.multipleTouchEnabled = NO) меньше или равна kThumbSize. Это означает, что прикосновения закончились внутри thumbView. Нет необходимости проверять координату y, потому что если касания перемещаются по вертикали, tableView, который содержит thumbViews, прокрутки и касания отменяются.

Выполните следующие действия в ThumbView : UIView (чьи экземпляры являются подпредставлениями UITableView):

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"touchesEnded %@", touches);
    CGPoint touchPoint = [[touches anyObject] /* only one */ locationInView:self];
    if (touchPoint.x >= 0.0f && touchPoint.x <= kThumbSize) {
        [(ThumbsTableViewCell *)self.superview.superview thumbTouched:self];
    }
}

Чтобы регистрировать касания только по одному thumbView за один раз, вы также, вероятно, захотите установить self.exclusiveTouch = YES; в методе init экземпляра ThumbView.

2 голосов
/ 28 августа 2018

В используемом расширении представления;

Swift 4:

open override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    super.touchesEnded(touches, with: event)
    guard let touchPoint = touches.first?.location(in: self) else { return }
    guard self.bounds.contains(touchPoint) else { return }
    // Do items for successful touch inside the view
}
...