Интерфейс UIScrollViewBegan

Поэтому все, что я хочу сделать, это воспроизвести звук, когда пользователь коснется UIScrollView. UIScrollViewDelegate имеет этот метод scrollViewWillBeginDragging :, но он только вызывается на touchMoved. Я хочу, чтобы его вызывали на touchBegan.

Пробовал прикосновенияBegan: withEvent: но он не получает никакого прикосновения. Кто-нибудь знает?

Я думаю, вам придется подclassифицировать UIScrollView, чтобы это сделать.

touchhesBegan: withEvent: отправляется только в подclassы UIView. Вы, вероятно, используете touchhesBegan: withEvent: в вашем controllerе, правильно? Если это так, оттуда это не сработает …

В качестве альтернативы, если вы поместите подclass UIView (который вы написали) в свой UIScrollView, вы также можете поймать событие touchhesBegan оттуда (но только тогда, когда пользователь коснется этого конкретного поднабора). UIScrollView по умолчанию касается касаний к своим дочерним объектам (см. КасанияShouldBegin: withEvent: inContentView: в UIScrollView).

Вместо этого используйте признак распознавания жесткого диска:

UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(touch)]; [recognizer setNumberOfTapsRequired:1]; [recognizer setNumberOfTouchesRequired:1]; [scrollView addGestureRecognizer:recognizer]; 

Или

сделать subClass вашего UIScrollView и реализовать все

  -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ // If not dragging, send event to next responder if (!self.dragging){ [self.nextResponder touchesBegan: touches withEvent:event]; } else{ [super touchesEnded: touches withEvent: event]; } } -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ // If not dragging, send event to next responder if (!self.dragging){ [self.nextResponder touchesBegan: touches withEvent:event]; } else{ [super touchesEnded: touches withEvent: event]; } } -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ // If not dragging, send event to next responder if (!self.dragging){ [self.nextResponder touchesBegan: touches withEvent:event]; } else{ [super touchesEnded: touches withEvent: event]; } } 

Вместо этого используйте признак распознавания жесткого диска:

 UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(touch)]; [recognizer setNumberOfTapsRequired:1]; [recognizer setNumberOfTouchesRequired:1]; [scrollView addGestureRecognizer:recognizer]; 

Вы также можете отвечать на эти события в своем controllerе. Для этого вам необходимо определить эту функцию (в вашем controllerе):

 - (BOOL)canBecomeFirstResponder { return YES; } 

Затем, в ‘viewDidAppear’, вам нужно вызвать ‘getFirstResponder’:

 - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self becomeFirstResponder]; 

Новые обновления по этой проблеме (включая ссылку на исходный код ZoomScrollView + отличное объяснение для внутренних компонентов UIScrollView). Кроме того, ознакомьтесь с обновленным примером ScrollViewSuite от Apple.

Вы должны добавить touchhesBegan: withEvent: в свой UIScrollView, а не в UIScrollViewDelegate. UIScrollView является подclassом UIResponder, который имеет события касания.

Rajneesh071 answer in swift 4 Измените пользовательский class scrollView в раскадровке на CustomScrollView

 import Foundation class CustomScrollView: UIScrollView { override func touchesBegan(_ touches: Set, with event: UIEvent?) { if !isDragging { next?.touchesBegan(touches, with: event) } else { super.touchesBegan(touches, with: event) } } } 

Вам нужно просмотреть прокрутку подclassа, а затем реализовать метод touchhesBegan. Вам также нужно установить для свойства delayTouchDown значение false.

  • Как настроить размер содержимого UIScrollView динамически
  • UITextView внутри UIScrollView с AutoLayout
  • Как включить масштабирование в UIScrollView
  • UIScrollView не прокрутка
  • как использовать UIScrollView в Interface Builder?
  • UIScrollView: подкачка по горизонтали, прокрутка по вертикали?
  • UIScrollView приостанавливает NSTimer до тех пор, пока прокрутка не завершится
  • Центральное содержимое UIScrollView при меньшем
  • UIScrollView Бесконечная прокрутка
  • Как отключить горизонтальную прокрутку UIScrollView?
  • Изучение основ UIScrollView
  • Давайте будем гением компьютера.