J'ai remarqué qu'après un changement d'orientation de portrait en paysage, les événements touchBegan ne s'affichent plus pour certaines parties de ma vue. Je suppose que c'est parce que je n'informe pas mon UIView sur le changement de dimension de l'image de ma fenêtre après la rotation de l'appareil.touchesBegan après didRotateFromInterfaceOrientation
J'installe tout programme (UIWindow, UIViewController, UIView) comme ceci:
myViewController = [[myUIViewController alloc] init];
myWindow = [[UIWindow alloc] initWithFrame: rect];
myView = [[myUIView alloc] initWithFrame: [myWindow bounds]];
[myViewController setView:myView];
[myWindow addSubview:myView];
[myWindow setFrame:rect];
[myWindow makeKeyAndVisible];
Quand je reçois la notification didRotateFromInterfaceOrientation, je mise à jour du cadre de la fenêtre comme ceci:
[[[self view] window] setFrame:rect];
Mais après cela, mon UIView n'obtient plus d'événements touchXXx pour toutes les zones. Il semble que seules les zones du cadre précédent signalent toujours des événements. Donc ma question: Y at-il autre chose que je dois faire dans didRotateFromInterfaceOrientation pour informer mon UIView sur le changement de dimension?
Merci pour votre aide!
EDIT: Dois-je repositionner l'UIView sur didRotateFromInterfaceOrientation() ou est-ce fait automatiquement? J'ai remarqué que la propriété "transform" de mon UIView est définie sur une matrice de transformation lorsque l'orientation change. Cependant, cela rend très difficile le repositionnement de ma vue. Les docs disent que la propriété "frame" ne peut pas être utilisée lorsqu'une transformation est active, j'ai donc essayé de modifier la propriété "center" pour repositionner ma vue, mais cela ne fonctionne pas non plus correctement. Je veux déplacer la vue vers le coin supérieur gauche, donc je mets "center" à (screenwidth/2, screenheight/2) mais il ne positionne pas la vue correctement :(Toute idée ou info ce qui doit être fait pour obtenir les événements en plein mode d'orientation?
Merci, mais malheureusement, cela n'a pas aidé. C'est vraiment bizarre!Je suis en train de tester tout ça sur le simulateur. Lorsque mon application démarre, le simulateur est en mode portrait et j'obtiens parfaitement tous les événements tactiles dans l'ensemble de la zone de 320 x 480 pixels. Lorsque je fais tourner le simulateur vers la droite, puis définissez myView.frame à CGRectMake (0,0480,320), la vue ne remplit pas * l'écran entier comme je le pensais, mais la vue est décalée de 160 pixels vers la droite, donc il y a soudainement 160 pixels noirs vides sur le côté gauche de ma vue de sorte qu'une partie de ma vue est décalée en dehors de la zone visible. Je ne sais pas pourquoi !? – andy
En outre, les docs disent que la propriété frame ne doit pas être utilisée lorsque la transformation est active et que la rotation du périphérique active la transformation. Au lieu de cela, les docs disent que lorsque la transformation est active, il faut utiliser les limites et les propriétés du centre. Mais ça ne marche pas non plus! Tout est assez confus ... – andy