UIView Cliptobounds n'arrête pas une sous-sousview Réception de touches en dehors de la vue parent

StackOverflow https://stackoverflow.com//questions/12714122

Question

J'ai deux uIViews. J'utilise un pour contenir l'autre afin que je puisse glisser un à l'intérieur de l'autre. Je rencontre un problème dans lequel même si une sous-sousview est coupée aux limites de son parent, il reçoit toujours des événements tactiles et bloquant l'accès à d'autres vues sous-jacentes.

J'ai trois captures d'écran qui montrent la mise en page. J'ai coloré le parent vert et l'enfant rouge.

L'idée est que l'utilisateur clique sur "Afficher" et la sous-espion glisse. Lorsque la sous-vision est en position par défaut, l'uitabbar est couvert et ne peut pas être cliqué. Vous pouvez voir cela dans la première image où la vue rouge est présente en bas. Lorsque la sous-vision est déplacée vers le haut, l'uitabbar peut être cliqué car il est maintenant visible. Dans la troisième image, j'ai montré ce que c'est comme avec des clippliptobounds activés sur le vert UIView.

J'ai activé les cliptobounds, donc je ne peux donc pas comprendre pourquoi la sous-vision bloque la barre Uitabbar sous-jacente. Est ma compréhension des clippliptobounds complètement faux ??

Était-ce utile?

La solution

L'utilisation de cliptobounds n'affecte que la disposition visuelle d'une sous-vue, pas la disposition logique.Cela signifie que, tandis que ma sous-évaluation n'est pas visible à l'œil, il est visible de toucher.

J'ai travaillé autour de ce problème en animant la taille de la sous-évaluation plutôt que sa position.Dans mon code ci-dessous, la stationProximityview est la sous-vision.J'élever sa taille de 40 pixels pour ramener le titre noir à la vue.

[UIView beginAnimations:@"stationProximityBar" context:NULL];
self.stationProximityView.view.frame = CGRectOffset(self.stationProximityView.view.frame, 0, -40);
[UIView commitAnimations];

Quand je n'en ai plus besoin, je l'anime hors de vue.

[UIView beginAnimations:@"stationProximityBar" context:NULL];
self.stationProximityView.view.frame = CGRectMake(0 ,0, 320, 500);
[UIView commitAnimations];

Si l'utilisateur tapette le bouton de vue, l'ensemble de la sous-système est affiché:

 [UIView beginAnimations:@"stationProximityBar" context:NULL];
 self.stationProximityView.view.frame = CGRectMake(0,460,320,40);
 [UIView commitAnimations];

Le licenciement fait que la vue soit cachée de la même manière que la petite barre.

 [UIView beginAnimations:@"hideStationProximityBar" context:NULL];
 self.stationProximityView.view.frame = CGRectMake(0,0,320,500);
 [UIView commitAnimations];

Pour le moment, ce code ne fait que être testé sur l'iPhone 5, de sorte que la hauteur codée dur de 500 provoque des problèmes sur les modèles d'iPhone précédents.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top