2010-03-10 5 views
1

Donc, fondamentalement, j'essaie de faire défiler UIScrollView uniquement sur des angles plus élevés. Comme en ce moment, si vous déplacez votre doigt de 10 degrés horizontalement, la scrollview défilera. J'aimerais pousser ça jusqu'à, disons, 30 degrés. Après avoir fait quelques lectures, j'ai établi la meilleure façon de le faire serait de mettre un UIView sous-classé sur le scrollview. Si le UIView sur les touches supérieures est au-dessus de 30 degrés, passez-le au scrollview, et autrement ne le faites pas.Passage programmé de touches à UIScrollView pour faire défiler

Cependant, je ne peux pas comprendre comment passer les touches. Voici mon code en ce moment:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"glass touch began"); 
    UITouch *touch = [touches anyObject]; 
    beginning_touch_point = [touch locationInView:nil]; 
    [scroll_view touchesBegan:touches withEvent:event]; 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"glass touch ended"); 
    UITouch *touch = [touches anyObject]; 
    CGPoint previous_point = beginning_touch_point; 
    CGPoint current_point = [touch locationInView:nil]; 

    float x_change = fabs(previous_point.x - current_point.x); 
    float y_change = fabs(previous_point.y - current_point.y); 

    if(x_change > y_change) 
    { 
     if(previous_point.x - current_point.x < 0) 
     { 
      [(MyScheduleViewController *)schedule_controller didFlickLeft]; 
     } 
     else 
     { 
      [(MyScheduleViewController *)schedule_controller didFlickRight]; 
     } 

     [scroll_view touchesCancelled:touches withEvent:event]; 
    } 
    else 
    { 
     [scroll_view touchesEnded:touches withEvent:event]; 
    } 
} 

Je sais en ce moment qu'il est la vérification de 45 degrés, mais ce n'est pas la chose importante. Ce qui est important, c'est que les touches sont bien transmises à ma scroll_view. Je l'ai fait un NSLog() sur touchbegan et touchended, et il fait les deux correctement. Ce n'est pas en train de défiler. Je suis inquiet toucheBegan et toucheEnded ne peut pas provoquer un parchemin. Est-ce que quelqu'un sait ce que peut, ou ce que je fais mal ??

Merci

+1

Avez-vous déjà réussi à faire fonctionner cela? J'ai actuellement un problème similaire. –

Répondre

0

j'ai essayé aussi de faire la même chose, mais n'a pas réussi. Il semble que scrollView ne gère pas les touchMoved/touchesBegan, mais il gère d'autres événements pour comprendre que l'utilisateur veut faire défiler la vue. Pour moi, la solution était de déterminer la valeur de décalage et de la définir explicitement comme un décalage de contenu scrollView. Il ressemblait à ceci (je n'ai pas le code source exact non, ce code peut ne pas fonctionner correctement):

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 
    UITouch *touch = [touches anyObject]; 

    CGPoint curr = [touch locationInView: self]; 
    CGPoint offset = [scrollView contentOffset]; 

    [scrollView setContentOffset: CGPointMake(offset.x + (curr.x - prev.x), offset.y) animated:YES]; 
} 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    prev = [[touches anyObject] previousLocationInView: self]; 
} 
Questions connexes