Отправка сенсорных жестов в UIImageView подвид UIScrollView - PullRequest
2 голосов
/ 30 марта 2012

Я запрограммировал UIImageView, который позволяет мне рисовать внутри него.Поэтому он отслеживает прикосновения пользователей и записывает его.Когда он используется в окне, он прекрасно работает.

Однако я добавил его в качестве подпредставления UIScrollView, который находится в View Controller.Когда я пытаюсь использовать его сейчас, сенсорные жесты внутри UIImageView просто прокручивают весь вид, а не рисуют внутри UIImageView.

Как я могу отнести жесты, сделанные к UIScrollView, которые также находятся внутри UIImageView, кUIImageView.

Надеюсь, это имеет смысл

С наилучшими пожеланиями

РЕДАКТИРОВАТЬ: я установил все следующие свойства: canCancelContentTouches, exclusiveTouch и delaysContentTouches дляNO.

Теперь, когда я касаюсь внутри UIImageView, он не прокручивается, но все равно не вызывает методы: touchesBegan:withEvent:, touchesMoved:withEvent: или touchesEnded:withEvent:, каждый из которых находится в ViewController

Ответы [ 4 ]

1 голос
/ 31 марта 2012

Установите для свойства exclusiveTouch UIImageView значение YES (это означает, что при касании UIImageView это касание не будет влиять на любые другие представления)

0 голосов
/ 31 марта 2012

UIScrollView не запускает методы сенсорных событий, для этого необходимо создать подкласс UIScrollView.Как показано ниже.

@interface AppScrollView : UIScrollView {

}

- (id)initWithFrame:(CGRect)frame;

@ end

#import "AppScrollView.h"


@implementation AppScrollView

- (id)initWithFrame:(CGRect)frame 
 {
    if ([super initWithFrame:frame]){
    }
    return self;
   }

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


 @end
0 голосов
/ 31 марта 2012

@ robmayoff прав, что перетаскивание подпредставления представления прокрутки неоднозначно, поскольку трудно понять, что пользователь намерен перетаскивать ... и два пальца - это один из способов дифференциации значения.

Мне не нравятся два пальца, потому что я не думаю, что это хорошо известный жест на iOS. После того, как кто-то добавляет его, следующим шагом является добавление пользовательского интерфейса, который это объясняет. Всякий раз, когда мне это нужно, я начинаю задаваться вопросом, допустил ли я ошибку проектирования.

Еще один способ определить намерение пользователя перетаскивать - сравнить направление перетаскивания с ориентацией вида прокрутки. Если пользователь перетаскивает вдоль оси (не квадратного) вида прокрутки, перетаскивание можно интерпретировать как перетаскивание вида прокрутки . Если они касаются подвида и перетаскивают перпендикулярно оси, то трактуйте его как перетаскивание подпредставления .

Я разместил здесь код, который демонстрирует это - в ответ на аналогичный вопрос .

0 голосов
/ 31 марта 2012

Как вы хотите, чтобы приложение решало, должно ли касание прокручивать представление прокрутки или рисовать в представлении изображения?

Предположим, вы хотите нарисовать один палец и прокрутить два пальца.Если вы ориентируетесь на iOS 5.0, это просто:

self.scrollView.panGestureRecognizer.minimumNumberOfTouches = 2;

Если вы ориентируетесь на более раннюю iOS, вы не можете использовать свойство panGestureRecognizer.Вы должны просмотреть свойство gestureRecognizers представления прокрутки, чтобы найти правильный распознаватель. Проверьте мой ответ здесь Например, код.

...