l'action de l'user dans les buttons d'affichage est désactivée après le redimensionnement de l'image

J'ai une sous-class UIView, appelons-la PopupView. à l'intérieur de ce PopupView j'ai un NavigationBar avec un uiview personnalisé et un uibutton (2) à l' intérieur. Il y a aussi un UIButton (1) directement dans le PopupView.

PopupView - UIButton (1) - UINavigationBar - UINavigationItem - UIBarButtonItem - UIView - UIButton (2) 

La raison de cet uibutton dans la folie de uinavigationbar est parce que je peux utiliser des capinsets pour backgroundimages dans un uibutton, mais pas pour un uibarbuttonitem.

Mon problème:

Je redimensionne PopupView en utilisant l'animation uiview et après que l'animation est terminée, je suis incapable de cliquer sur les buttons de cette uiview plus .

 [UIView animateWithDuration:0.4f delay:0.0f options:UIViewAnimationCurveEaseOut animations:^{ CGRect popupFrame = self.frame; popupFrame.size.height += 140.0f; popupFrame.origin.y = floorf(popupFrame.origin.y - (140.0f / 2)); self.frame = popupFrame; } completion:^(BOOL finished) { }]; 

Cela arrive aussi si je n'utilise pas d'animations uiview et ne mets pas le nouveau cadre directement. aussi peu importe si je le redimensionne sur un clic ou directement sur viewDidLoad dans son viewController.

Des idées pour lesquelles cela arrive?

Heer est la partie pertinente de votre sortie recursiveDescription :

 | | <UIView: 0xaac0480; frame = (0 0; 320 568); tag = 23945; layer = <CALayer: 0xaac04e0>> | | | <MJPopupBackgroundView: 0xaac0710; frame = (0 0; 320 568); tag = 23943; layer = <CALayer: 0xaac07c0>> | | | <UIButton: 0xaac0aa0; frame = (0 0; 320 568); opaque = NO; layer = <CALayer: 0xaac0b60>> | | | <UIView: 0x9d6fea0; frame = (10 204; 300 160); autoresize = W+H; tag = 23942; layer = <CALayer: 0x9d6ff50>> | | | | <MoviePopupView: 0xab1aaa0; frame = (0 -70; 300 300); clipsToBounds = YES; layer = <CALayer: 0xab1a070>> 

La vue 0xaac couvre l'écran.

Dans la vue 0xaac, la vue 0x9d6 a une hauteur de 160 points et est cinput verticalement dans la vue 0xaac.

Dans la vue 0x9d6, le 0xab1 MoviePopupView a une hauteur de 300 points et (avec son origine Y de -70) est centré "à l'intérieur" de la vue 0x9d6, mais dépasse les bords supérieur et inférieur de la vue 0x9d6.

La valeur par défaut de la propriété clipsToBounds est NO, donc la vue 0x9d6 ne visuellement pas le contenu de sa sous-vue 0xab1. Ainsi, les buttons sont encore visibles à l'écran.

Cependant, les tests de hit se fixent toujours aux limites d'une vue. Ainsi, lorsque vous essayez de toucher l'un des buttons, le hit est en dehors des limites de la vue 0x9d6 (qui n'a qu'une hauteur de 160 points). La vue 0x9d6 rejette le contact avant qu'il MoviePopupView ou les buttons en dessous.

Ceci est mentionné dans la documentation hitTest:withEvent: :

Les points qui se trouvent à l'extérieur des limites du receveur ne sont jamais signalés comme des coups, même s'ils se trouvent dans l'une des sous-vues du receveur. Cela peut se produire si la propriété clipsToBounds la vue actuelle est définie sur NO et que la sous-vue affectée s'étend au-delà des limites de la vue.

Il est impossible de dire avec certitude puisque nous ne voyons pas les locations de vos buttons, mais si vous donnez une couleur de fond à votre UIView qui contient vos buttons (ou mettez-les dans les sous-vues), vous pouvez constater que le redimensionnement cause votre buttons pour être à l'extérieur du cadre, ce qui les rend non-cliquables.