2009-03-27 4 views
3

J'ai une vue dérivée d'un contrôleur UIScrollView que j'utilise pour parcourir des images dans une bibliothèque. Cela fonctionne bien.Passer des contacts via un UIView vers un UIScrollView ne fonctionne pas

J'ai superposé un UIView sur le côté droit pour manipuler des touches pour défiler rapidement dans la liste des images. Mon problème est que si je passe le contact à 'super' ou 'nextResponder' ils ne le font jamais à l'objet UIScrollView ci-dessous.

Ma question est comment puis-je forcer l'UIScrollView ci-dessous pour gérer les touches que je n'ai pas besoin de gérer? Je suis en train de régler une minuterie pendant 0,3 secondes que pendant ce temps toutes les touches sont passées à l'UIScrollView à gérer. Donc, si l'utilisateur a commencé un geste de glisser pour tourner la page, cela arrivera.

Voici le code de la méthode touchesBegan:

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

// Start a timer to trigger the display of the slider and the processing of events. 
touchesTimer = [NSTimer scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(showSlider:) userInfo:nil repeats:NO]; 

// Where are we at right now? 
UITouch *touch = [touches anyObject]; 
CGPoint currentPoint = [touch locationInView:self.view]; 
lastPage = [self page:currentPoint.y]; 

// Pass the event though until we need it. 
// [self.nextResponder touchesBegan:touches withEvent:event]; 
if ([touch.view isKindOfClass:[UIScrollView class]]) 
{ 
    if (self.nextResponder != nil && 
     [self.nextResponder respondsToSelector:@selector(touchesEnded:withEvent:)]) 
    { 
     [self.nextResponder touchesEnded:touches withEvent:event]; 
    } 
} 
} 
+0

Je pense que je pourrais avoir compris ce qui pourrait aller mal. Étant donné que le curseur sur le côté droit ne couvre pas tout l'écran, les coordonnées des événements tactiles ne sont pas correctes. Je vais essayer d'augmenter la taille de la vue et le filtrage par emplacement tactile. – Sophtware

+2

Il y a eu une excellente présentation à la WWDC cette année sur les techniques avancées de scrollview. Vous voudrez peut-être passer une heure à regarder ça. Cela pourrait vous être d'une grande aide dans cette situation. La vidéo est disponible sur iTunes dans la section iTunes U ou sur le site du développeur Apple. –

Répondre

1

Je voudrais essayer d'utiliser une UIViewController régulière plutôt que d'un UIScrollViewController, puis ajoutez l'objet défilante où vous en avez besoin et mettre le défilement plus rapide que vous voulez sur Le côté droit. De cette façon, ils sont séparés et les touches ne seront pas confus.

0

est ici une des solutions plus simples qui ont bien fonctionné pour moi:

Dans le UIView au-dessus de la UIScrollView rendre la largeur et la hauteur à la fois 0 (de sorte que la vue est plus techniquement au-dessus du UIScrollView) et définir clipsToBounds = NO (de sorte que le contenu de la vue s'affiche toujours au-dessus de UIScrollView).

self.OverlayView.clipsToBounds = NO; 
CGRect frame = self.OverlayView.frame; 
self.OverlayView.frame = CGRectMake(frame.origin.x, frame.origin.y, 0, 0); 

Notez que si l'UIView contient des contrôles interactifs, ils ne fonctionneront plus. Vous devrez le déplacer dans sa propre vue au-dessus de UIScrollView.

Questions connexes