Как контролировать распознавание UIPanGestureRecognizer? - PullRequest
0 голосов
/ 11 сентября 2011

Для UITapGestureRecognizer вы можете установить количество нажатий, необходимых для управления распознаванием UITapGestureRecognizer. Если вы установите для NumberOfTapsRequired значение 2 и пользователь нажмет только один раз, UITapGestureRecognizer не будет запущен.

Мой вопрос: как насчет UIPanGestureRecognizer? Как контролировать его распознавание?

У меня есть вид. Как только я установил для него UIPanGestureRecognizer, любое перетаскивание вызовет действие. Но мне нужно только перетаскивание по оси X. А для перетаскивания без оси X все сенсорные события следует отправлять в другие виды внизу.

Как я могу это сделать?

1011 * БЛАГОДАРЯ *

Ответы [ 4 ]

2 голосов
/ 11 сентября 2011

Установить свой делегат и реализовать

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;

Тогда используйте

- (CGPoint)velocityInView:(UIView *)view;

в распознавателе жестов, чтобы вычислить, должен ли распознаватель жестов обрабатывать его или нет.

0 голосов
/ 07 ноября 2012

Предположим, что ваш gestRecognizer запускает действие _panRecogPanned ниже. Вы можете видеть, как центр подпредставления (представление, которое несет сам распознаватель жестов) перемещается после перехода. Чтобы отключить панорамирование по оси y, вы просто устанавливаете центр в качестве вычисленного нового центра, тогда как translation.y опускается.

Чтобы переместить другие подпредставления по оси y, получить их рамку, обновить их свойство origin.x и сбросить рамку, они должны следовать за вашим пальцем только по оси y.

- (IBAction)_panRecogPanned:(id)sender{

    CGPoint translation = [_panRecog translationInView:_statementFilterView];

    //This subview only moves horizontally
    _panRecog.view.center = CGPointMake(translation.x + _panRecog.view.center.x, _panRecog.view.center.y);

    //This subview only moves vertically
    CGRect newFrame = anotherSubview.frame;
    newFrame.origin.y = anotherSubview.frame.origin.y + translation.y;
    anotherSubview.frame = newFrame;

    [_panRecog setTranslation:CGPointMake(0, 0) inView:self.view];
}
0 голосов
/ 02 апреля 2012
0 голосов
/ 02 апреля 2012
UIView *holderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)];
UIImageView *imageview = [[UIImageView alloc] initWithFrame:[holderView frame]];
[imageview setImage:image];
[holderView addSubview:imageview];

UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)];
[pinchRecognizer setDelegate:self];
[holderView addGestureRecognizer:pinchRecognizer];

UIRotationGestureRecognizer *rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)];
[rotationRecognizer setDelegate:self];
[holderView addGestureRecognizer:rotationRecognizer];

UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
[panRecognizer setMinimumNumberOfTouches:1];
[panRecognizer setMaximumNumberOfTouches:1];
[panRecognizer setDelegate:self];
[holderView addGestureRecognizer:panRecognizer];

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
[tapRecognizer setNumberOfTapsRequired:1];
[tapRecognizer setDelegate:self];
[holderView addGestureRecognizer:tapRecognizer];

[self.view addSubview:holderView];

Raees

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...