2013-07-06 2 views
0

Situation: J'ai une sorte de barre d'outils (pas un UIToolbar, juste un UIView personnalisé) qui se trouve en haut de ma vue. Cette barre d'outils a un certain nombre de boutons. Juste en dessous, j'ai un scrollview avec un formulaire. Lorsqu'un bouton de la barre d'outils est appuyé, le formulaire correspondant doit être animé sur l'écran à partir de la droite ou de la gauche, selon le bouton tapé. Je ne veux pas que la barre d'outils bouge. Cependant, je souhaite que la barre d'outils défile vers le haut lorsque l'utilisateur fait défiler vers le haut ou vers le bas dans la vue défilement. La façon dont je l'ai accompli, il est maintenant dans la méthode déléguée scrollViewDidScroll (notez que je permets que le défilement horizontal si elle est d'appuyer sur un bouton de la barre d'outils):Stratégies UIScrollView pour le défilement horizontal et vertical

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if(scrollView.contentOffset.x != 0 && _shouldScrollHorizontally == NO) 
    { 
     CGPoint offset = scrollView.contentOffset; 
     offset.x = 0; 
     scrollView.contentOffset = offset; 
    } 

    CGRect buttonFrame = [_buttons frame]; 

    buttonFrame.origin.y = -scrollView.contentOffset.y + 10; 

    [_buttons setFrame:buttonFrame]; 
} 

Cependant, je crains que cela est inefficace et entraînera une certaine latence. Je me demande s'il y a une meilleure façon d'accomplir ce que j'essaie d'accomplir. À la fin de la journée, je souhaite que la barre d'outils reste immobile si la barre de défilement est défilée horizontalement, mais pour que la barre de défilement se déplace avec la barre de défilement si la barre de défilement défile verticalement.

Merci pour vos suggestions!

+0

vous voulez dire que vous voulez une carte graphique comme ancienne impulsion, ou postpiks. – rptwsthi

+0

Que voulez-vous dire? – Mason

Répondre

1

Étant donné que le défilement horizontal n'est autorisé que lorsqu'un bouton est sélectionné, définissez la largeur UIScrollViewcontentSize sur la largeur de l'écran et sa hauteur, le cas échéant. Pour «faire défiler» horizontalement les touches, il suffit d'animer le déplacement d'une vue horizontalement. La hiérarchie de vue est quelque chose comme un outerView qui est la largeur et la hauteur de ce que vous définissez votre UIScrollView contentSize à actuellement. Votre vue de défilement est une sous-vue du outerView et la barre d'outils est une sous-vue de la vue déroulante.

Pour animer le mouvement horizontal, il est généralement plus facile de changer le outerView.center et le toolbarView.center, quelque chose comme:

CGPoint newCenterPoint; 
CGPoint newToolbarCenterPoint; 

CGPoint centerPoint1 = // set center as appropriate 
CGPoint centerPoint2 = // set center as appropriate 
CGPoint centerPoint3 = // set center as appropriate 

CGPoint toolbarCenter1 = // set center as appropriate 
CGPoint toolbarCenter2 = // set center as appropriate 
CGPoint toolbarCenter3 = // set center as appropriate 

if (buttonTapped == button1) { 
    newCenterPoint = centerPoint1; 
    newToolbarCenterPoint = toolbarCenter1; 
} else if (buttonTapped == button2){ 
    newCenterPoint = centerPoint2; 
    newToolbarCenterPoint = toolbarCenter2; 
} else if (buttonTapped == button3){ 
    newCenterPoint = centerPoint3; 
    newToolbarCenterPoint = toolbarCenter3; 
} 
[UIView animateWithDuration:0.25 animations:^{ 
    outerView.center = newCenterPoint; 
    toolbarView.center = newToolbarCenterPoint; 
}]; 
Questions connexes