Событие Touch, обработанное несколькими видами
-
27-10-2019 - |
Вопрос
У меня есть подкласс UIView
на вершине UITableView
. Анкет Я использую UITableView
Чтобы отобразить некоторые данные и, в то же время, я хотел бы наложить анимацию, которая следует за пальцем (например, оставляя след).
Если я понял это правильно, мне нужны обработанные события прикосновения оба посредством UIView
подкласс и UITableView
. Анкет Как я могу это сделать? Возможно ли иметь, т.е. touchesMoved
вызвать на подкласс Uiview, а затем на UITableView
?
Большое спасибо за любую помощь.
Решение
То, как я решил эту проблему, не так чисто, но это работает. Пожалуйста, дайте мне знать, если есть лучший способ сделать это.
Я переопределен hitTest
для моего обычая UIView
так что это направляет касания на UITableView
под. Затем в UITableView
Я справляюсь с жестами через touchesBegan
, touchesMoved
, и т. д. там я тоже звоню touchesBegan
на UIView
.
Таким образом, штрихи обрабатываются двумя просмотрами. Причина, по которой я не делаю наоборот (имея UIView
S. touchesBegan
вызов UITableView
S. touchesBegan
) заключается в том, что жесты узнаватели на UITableView
не будет работать.
UIView
подкласс ' hitTest
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
// tview is the UITableView subclass instance
CGPoint tViewHit = [tView convertPoint:point fromView:self];
if ([tView pointInside:tViewHit withEvent:event]) return tView;
return [super hitTest:point withEvent:event];
}
UITableView
подкласс touchesBegan
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:touch.view];
// ....
// view is the UIView's subclass instance
[view touchesBegan:touches withEvent:event];
}
Другие советы
Нет, вы не можете это сделать. Доставка мероприятия Глава говорит
Окно-объект использует хит-тестирование и цепочку респондентов, чтобы найти представление, чтобы получить сенсорное событие. В хит-тестировании окно вызывает Hittest: WithEvent: На самом максимальном представлении иерархии представления; Этот метод продолжается рекурсивно вызовом PointinSide: WithEvent: В каждом представлении в иерархии представления, которая возвращает да, продолжая иерархию, пока не найдет подвесок в пределах которого произошло. Эта точка зрения становится представлением о хит-тесте.
Итак, когда окно находит трогательное просмотр, он возвращает да. Только один вид может обрабатывать штрихи в текущий момент.
Но если вам нужно обрабатывать событие для UitableView, обратитесь к нему для Uiview! Вы можете преобразовать троганную точку в требуемые координаты с - ConvertPoint, - конвертация Функции, добавьте подвет к UitableView и перемещайте, это зависит от координаты и множества других вещей.
Uitableview Relays Unkending Touch Events в Uiview. (Google "Цепочка респондентов")Uitableview документация
Итак, вы можете справиться со своими событиями Touch только в Uiview. Так. В вашем Uiview
TouchessTart - делайте инициализацию
Touchsmove - Нарисуйте хвост на Uiview (используйте таймеры/задержку с задержкой на желание, чтобы он выглядел как след)
Touchesend - делайте оставшиеся вещи
Надеюсь это поможет.