Ограничьте UIPanGestureRecognizer определенной областью

На мой взгляд, у меня в правой части 3 UISlider, а в левой части пользователь может перемещать меню с помощью UIPanGestureRecognizer. Иногда, когда пользователь использует ползунок, он также перетаскивает вид. Я не хочу, чтобы это произошло. У меня есть этот код в моем методе panLayer:

- (IBAction)panLayer:(UIPanGestureRecognizer *)pan {

if (pan.state == UIGestureRecognizerStateChanged) {
    CGPoint point= [pan translationInView:self.topLayer];
    CGRect frame = self.topLayer.frame;
    frame.origin.x = MIN(258.0f, self.layerPosition + point.x);
    if (frame.origin.x < 0) frame.origin.x = 0;
    self.topLayer.frame = frame;
 }
if (pan.state == UIGestureRecognizerStateEnded) {
    if (self.topLayer.frame.origin.x <=160) {
        [self animateLayerToPoint:0];
    }
    else {
        [self animateLayerToPoint:VIEW_HIDDEN];
    }
 }


}

Я хочу создать оператор if с позицией x. Что-то вроде этого:

if (firstTouch.x < 150 && firstTouch.x > 0) {
   //Add my previous code
}

Как я могу получить доступ к firstTouch в представлении, и если он находится в этой области, запустить UIPanGestureRecognizer?

Спасибо


person BalestraPatrick    schedule 30.03.2013    source источник


Ответы (1)


Этого можно легко добиться, приняв UIGestureRecognizerDelegate и реализуя следующий метод:

-(BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch
{
    return touch.view != myUISlider;
}
person soheilpro    schedule 11.05.2013
comment
Любая идея о том, как я могу применить это к большему количеству UISliders одновременно? - person BalestraPatrick; 24.05.2013
comment
@patapple Вы можете вернуть ![touch.view isKindOfClass:[UISlider class]], чтобы он работал для всех UISlider в вашем приложении. - person soheilpro; 31.05.2013