2009-12-15 4 views
1

J'ai un UIView dans mon xib dans IB et à l'intérieur qui est un UIScrollview qui est un petit carré de 80x80 et dynamiquement chargé avec 8 ou 80 x 80 images miniatures . L'UIScrollview n'écoupe pas les images de façon à ce qu'elles s'étendent de chaque côté de sorte que vous puissiez balayer vers la gauche et la droite pour faire défiler une image vers le centre, la pagination est activée pour qu'elles s'alignent sur chaque image.iPhone sdk Cocoa Touch - Pass touche de parent UIView à l'enfant UIScrollview

J'ai fait des recherches et j'ai trouvé que c'est la meilleure et peut-être la seule façon de le faire. L'UIScrollview se trouve dans un UIView «conteneur» pour une raison, il est là pour recevoir les touches/balayages et les transmettre à son enfant l'UIScrollview, sinon toutes les touches devraient commencer dans la petite zone UIScrollview 80x80 et Je les ai vus être n'importe où le long de la rangée d'images.

J'ai vu un exemple de code quelque part pour le faire mais je ne peux pas l'implémenter. Traitez-moi comme un noob, en commençant du début à la fin, comment les UIView et UIScrollview doivent-ils être configurés dans IB pour permettre à n'importe quelle touche d'être passée, et quel code devrais-je mettre dans où?

Le UIView est configuré comme scroll_container et l'enfant UIScrollView est char_scroll

Au moment où j'ai tout travail, sauf pour les touches étant transmis du parent à l'enfant, et au moment où les touches ont de toujours commencer à l'intérieur de l'UIScrollview (minuscule boîte de 80x80 au centre) quand je veux être capable de balayer à gauche ou à droite dans le long parent horizontal 480X80 UIView et que cela fasse toujours défiler l'enfant UIScrollview.

J'espère que vous pouvez aider et comprendre ce que je veux dire!

Répondre

0

Tous mes experts disent que ce n'est pas la façon de le faire!

Même si:

(a) les documents d'Apple disent que cela fonctionne et comment le faire;

(b) et vous pouvez obtenir le travail de machin hitTest et obtenir les objets UIEvent qui coule bien

si elle était moi je pense le premier changement d'Apple faire à l'OS pour briser le code!

Ce que je voudrais faire est:

  • utiliser l'API Core Animation.
  • Modèle de la décélération des images quand un doigt mobile LÂCHE de vous-même
  • Essayez différents taux de décélération et différents algorithmes de serpentine (essayez avec et sans rebond) jusqu'à ce que vous trouviez une expérience utilisateur acceptable (essayez le prototypage en DHTML avant entrer dans Cocoa touch)
  • Arrêtez d'utiliser UIScrollView et il suffit d'utiliser un UIView

Vous devez modéliser dans votre état:

state1: le (delta x, delta y) changement de position demandée par l'utilisateur sur cette touche

OU

état2: le (delta x, delta y) et (veclocity x, la vitesse y) et l'horloge() le temps du doigt lorsque libéré si les images ralentissent encore baisser et ne pas se reposer

Etat3: images fixes

A partir de ces paramètres d'animation peuvent être calculés:

initiale: delta X et delta-y, vitesse-x, de la vitesse-y, le temps d'horloge() en ms

Si le soutien rebondissement: tous les points de retournement intervenant

final: delta-x, delta-y, vitesse-x, vitesse-y, le temps d'horloge() en ms

Et à partir de ces paramètres d'animation, un ensemble des images clés d'animation peuvent être calculées et transmises à Core Animation. (Un grand nombre de cadres clés sont nécessaires pour montrer une décélération en douceur personnalisée lors de l'animation.)

-

Quelles sont les références que vous avez trouvé à dire ce que vous proposez est la meilleure façon?

0

Vous pourriez sous-classer UIScrollView et remplacer la méthode -pointInside: withEvent:. L'implémentation par défaut de UIView renvoie quelque chose comme CGRectContainsPoint (self.bounds, thePointToTest) ;. Juste tester sur un rect plus large.

0

La façon dont vous le faites est la plupart du temps là. J'ai essayé de sous-classer UIView pour passer les événements tactiles, mais ma première tentative n'a pas fonctionné et j'ai trouvé ceci, à la place: How to extend UIScrollView's response area

Fondamentalement, sous-classe UIScrollView pour étendre sa gamme hitTest. Vous aurez toujours l'UIView contenant, mais ce sera passif.

Questions connexes