2011-09-11 2 views
0

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

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

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

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

БЛАГОДАРЯ

ответ

2

Установите его делегатом и осуществлять

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

Затем используйте

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

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

0
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

+0

Добро пожаловать в SO! Добавьте объяснение, пожалуйста. – atxe

0

Предположим, что ваш gestureRecognizer запускает действие _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]; 
} 
Смежные вопросы