UIScrollview и подпрограммы сенсорных событий управления
У меня есть основной вид. Я поместил объект UIScrollView в качестве подпредставления основного представления. У меня есть расширенный класс от UIView, который управляет сенсорными событиями. Этот класс моделирует своего рода прозрачную доску, на которой пользователь может нарисовать путь. Я создаю объект из моего расширенного класса UIVIew и добавляю его как подпредставление UIScrollView.
Я выполняю этот процесс, используя Inspector и.xib файл.
Тогда никакое сенсорное событие не попадает в объект UIScrollView. Независимо от того, снимаю ли я флажок "Взаимодействие с пользователем включено" для моего расширенного класса UIView в Инспекторе. Я также попробовал с:
[[self nextResponder] touchesBegan:touches withevent:event];
или же
[[self.superview nextResponder] touchesBegan:touches withevent:event];
или же
[super touchesBegan:touches withEvent:event];
или же
[super touchesBegan:touches withEvent:event];
в методах touchEvents моего расширенного класса UIView. Мне не удалось получить сенсорные события в UIScrollView.
С другой стороны, если я добавлю scrollView и мой расширенный класс UIView программно, поддерживая ту же иерархию, UIScrolView получит сенсорные события, но не его подпредставление (мой расширенный класс UIView).
Я не хочу, чтобы и UIScrollView, и мой расширенный класс UIView управляли событиями касания одновременно. Я просто хочу переключаться между UIScrollView и моим расширенным классом UIView для прослушивания сенсорных evebnts, например, с помощью кнопки.
Можно ли, в данном случае, я объясняю, выбрать, какой, UIScrollView или мой расширенный класс UIView, должен прослушивать сенсорные события?
2 ответа
UIScrollView имеет scrollEnabled
имущество. Если вы установите это YES
, представление прокрутки будет прокручиваться. Если нет, события будут перенаправлены вверх по цепочке респондента. Так что попробуйте изменить это свойство.
Прочитайте документы для UIScrollView!
Что касается разницы между настройкой пера по сравнению с XCode, ваши настройки кода и версия пера не совсем совпадают по какому-то важному пути. Я не вижу твоего пера или твоих программных настроек, поэтому не могу тебе в этом помочь.
Вам необходимо включить взаимодействие с пользователем для просмотра прокрутки:
[self.scrollView setUserInteractionEnabled:YES];
Добавить жест Recognizer к подпредставлению:
for (int i = 0; i < pos.count; i++) {
SCVerticalBarsChartBarView *bar = [[SCVerticalBarsChartBarView alloc]initWithBlaBlaBla];
[bar addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(someAction:)]];
bar.tag = i;
[self.scrollView addSubview:bar];
}
И обнаружить постукивающий вид:
-(void)someAction:(UITapGestureRecognizer *)recognizer {
if (recognizer.state == UIGestureRecognizerStateEnded) {
if ([recognizer.view isKindOfClass:[SCVerticalBarsChartBarView class]]) {
SCVerticalBarsChartBarView *tmpButt=(SCVerticalBarsChartBarView *)recognizer.view;
NSLog(@"%d", tmpButt.tag);
}
}
}