3 Réponses :


1
votes

Si c'était moi, je donnerais la vision de Scroll View comme délégué du haut de vue de la vue. Bien entendu, cela nécessiterait que la vue de dessus est une sous-couche personnalisée de uiview code>, de sorte que vous pouvez définir xxx pré>

et p> xxx

dans le fichier d'en-tête. Vous définiriez ensuite la vision de Scroll comme déléguée avec quelque chose dans le sens de p> xxx pré>

avec cela en place, vous pouvez ensuite envoyer des messages (dans votre cas, toucher les événements) à la ScrollezVoir quand ils sont nécessaires. Si, par exemple, vous souhaitez envoyer tous les événements TouchBegan, vous auriez ceci: p>

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


5 commentaires

Le problème avec cela, est que les balayeurs ne sont pas détectées dans le ScrollView - J'ai essayé cette méthode plus tôt avant d'arriver à l'état de «l'état», je suis maintenant. lol ... et c'est un état! Cependant, vous avez décidé de penser à passer les informations nécessaires à l'animation, mais sans les événements tactiles. Je vais regarder dans ça!


Haha, je sais que ça se sent mal trop bien. Mais je suis heureux que cela vous ait pensé à de nouvelles façons de faire le problème. C'est généralement ma valeur par défaut pour des problèmes comme ça. Fondamentalement, définissez simplement les conditions pour envoyer des événements au délégué et aller de là, que ce soit des gestes ou des touches ou autre chose. Si vous avez besoin de plus de contrôle, vous pouvez sous-classer la vision de ScrollView et adopter un protocole personnalisé à partir de la vue de dessus qui spécifie les méthodes à appeler et comment les implémenter. J'espère que ce n'est pas déroutant, mais si c'est quelque chose que vous voudrez peut-être essayer, je serais plus qu'heureux d'aider


Oui, c'est certainement un problème de design - je sais toujours quand je fais quelque chose d'une manière idiote parce que ça se sent comme une mauvaise programmation! Appréciez vos suggestions cependant.


Aucun problème. Je suis toujours heureux d'aider. J'espère que vous obtiendrez tout ce qui est résolu bientôt.


Essayez d'ajouter ceci: [Super TouchesBegan: Touche WithEvent: événement]; Sachez également que si vous remplacez l'une des méthodes de manipulation des touches, vous devez remplacer tous les quatre: TouchesBegan, touchées, touchées, touchées et touchées touchées.



-1
votes

Sous-classe UISCROLLVEIW et remplacement de la méthode TouchESShouldCancelincontent: Méthode comme celle-ci: XXX


1 commentaires

Probablement parce que la vue C n'est pas une sous-vision de la vision de ScrollView, et ne sera donc pas incluse dans le test TouchESShouldCancelincincontventView . (Je suppose que c'est pourquoi quelqu'un vous a voté)



1
votes

Voici une solution plus facile qui a bien fonctionné pour moi:

en vue C (la vue de premier plan qui est au-dessus de l'UISCrollView), faites la largeur et la hauteur 0 (afin que la vue ne soit plus techniquement sur le dessus de la ScrollView) View) et définissez Clipstobounds = NON (afin que le contenu de la vue C apparaisse toujours en haut de la visionneuse ScrollView). Cela a fonctionné comme un charme pour moi. xxx

Notez que si la vue C contient des commandes interactives, elles ne fonctionnent plus.


3 commentaires

Très intelligent. M'a aidé avec quelque chose.


Si l'origine est 0, vous pouvez utiliser CGRectZero à la place, beaucoup plus propre.


Ne pouviez-vous pas simplement définir .USERInterActionActionEnabled to no / faux à la place?