События касания (touchesMoved) не работают в UIViews внутри UIScrollView

У меня UIView внутри UIScrollView, а UIViewControllers для этих представлений не получают события касания. Если я уберу взгляды из прокрутки, тогда все заработает.

UserInteraction по умолчанию включен для всех представлений, но он все еще не работает!

Это должно быть возможно, и я был бы очень благодарен, если бы кто-нибудь указал мне правильное направление!

Огромное спасибо,


person Zeeshan    schedule 21.03.2013    source источник
comment
Почему бы вам не использовать распознаватель жестов для того же   -  person Shashank Kulshrestha    schedule 21.03.2013
comment
Мне особенно нужен вызов метода touchesMoved, какой жест подойдет для этого?   -  person Zeeshan    schedule 21.03.2013
comment
touchMoved не работает в UIScrollView   -  person NANNAV    schedule 21.03.2013
comment
Код @Zeeshan Hope, приведенный ниже, поможет вам   -  person Shashank Kulshrestha    schedule 21.03.2013
comment
Спасибо @ShashankKulshrestha   -  person Zeeshan    schedule 21.03.2013
comment
np @Zeeshan просто отметьте мой ответ как правильный, чтобы другие могли воспользоваться этим :)   -  person Shashank Kulshrestha    schedule 25.03.2013


Ответы (2)


добавьте следующий код в файл реализации, затем коснитесь перемещенным

 @interface UIScrollView(Custom)
    @end
    @implementation UIScrollView(Custom)

   -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesMoved:touches withEvent:event];
}
    @end
person Vinodh    schedule 21.03.2013
comment
@Vinodh. Можете ли вы также упомянуть, почему это нужно делать, чтобы новичкам было полезно понять, что происходит. Я считаю, что когда uiview добавляется в scrollview, все события касания принимаются scrollview, и, следовательно, touchesBegan, touchesMoved не вызываются. Пожалуйста, поправьте меня, если я ошибаюсь. - person Kiran Kulkarni; 04.12.2014

Вы можете использовать следующий метод

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

И справиться с этим

 -(void)move:(id)sender {

    if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateChanged){
         // This will return you location in view
         CGPoint currentPoint =  [sender locationInView:self.view];

         // This will return you location in Scrollview
         CGPoint scrollPoint =  [sender locationInView:[[sender view] superview]];

    }
}
person Shashank Kulshrestha    schedule 21.03.2013