2013-03-13 2 views
0

Можно ли обрабатывать как прокручивающие события для UIScrollView, так и события касания для UIView позади него? Я узнал, что UIView обрабатывает свои события касания, когда UIScrollView отключает только собственное взаимодействие с пользователем.UIScrollView накладывает UIView, но позволяет его события касания?

ответ

0

Сначала внутри вашей точки зрения добавить Scrollview и in.h запись файла делегат <UIGestureRecognizerDelegate,UIScrollViewDelegate>

В вашем viewDidLoad написать

UITapGestureRecognizer *singleFingerTap = 
    [[UITapGestureRecognizer alloc] initWithTarget:self 
              action:@selector(handleSingleTap:)]; 
    [self.view addGestureRecognizer:singleFingerTap]; 
    [singleFingerTap release]; 

    scrl.scrollEnabled = YES; // scrl is my UIScrollView 
    scrl.delegate = self; 
    scrl.contentSize=CGSizeMake(320, 680); 
    [self.view addSubview:scrl]; 

И в методе handleSingleTap написать свой код. Он также будет прокручиваться, и если вы нажмете на просмотр, будет вызван метод handleSingleTap.

+0

спасибо, я попробую – user2159978

0

У меня была аналогичная проблема, в то время как UIScrollView накладывал вид SpriteKit, чтобы пользователь мог прокрутить большое внутриигровое меню. Вид прокрутки «крадет» все краны, и я не могу нажимать кнопки позади прокрутки, как моя «кнопка назад». У меня также были кнопки в представлении прокрутки, в которых у меня были обработчики в моей оригинальной сцене-сценарии, - и я ненавижу, чтобы перейти в мое прокручиваемое представление.

Итак, я исправил это, просто отправив все мои события касания как к суперклассу, так и к супервизу. Я не уверен, есть ли еще большой недостаток, но теперь я получаю штрихи и прокрутку.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [self.superview touchesBegan:touches withEvent:event]; 
    [super touchesBegan:touches withEvent:event]; 
} 

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [self.superview touchesMoved:touches withEvent:event]; 
    [super touchesMoved:touches withEvent:event]; 
} 

-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [self.superview touchesCancelled:touches withEvent:event]; 
    [super touchesCancelled:touches withEvent:event]; 
} 

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [self.superview touchesEnded:touches withEvent:event]; 
    [super touchesEnded:touches withEvent:event]; 
} 
Смежные вопросы