私は、ポートレイトからランドスケープにオリエンテーションを変更した後、私のビューのいくつかの部分のためにtouchesBeganイベントを取得できないことに気付きました。私は、デバイスの回転後に私のウィンドウのフレームの寸法の変更についてUIViewに通知していないからです。touchesBegan afterRotateFromInterfaceOrientation
私はこのようなプログラムですべてのもの(UIWindow、のUIViewController、UIViewの)設定してい:
[[[self view] window] setFrame:rect];
:私はdidRotateFromInterfaceOrientation通知を取得すると、私はこのような窓枠を更新しています
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];
を
しかしその後、私のUIViewはもはやすべての分野のtouchesXXXイベントを取得しません。前のフレームの領域だけがまだイベントを報告しているようです。だから私の質問:didRotateFromInterfaceOrientationで私のUIViewに寸法変更について通知する必要があるものはありますか?
ありがとうございました!
EDIT:didRotateFromInterfaceOrientation()のUIViewの位置を変更する必要がありますか、これは自動的に行われますか?私は、UIViewの「変換」プロパティが、向きが変わったときに変換マトリックスに設定されていることに気付きました。しかし、これは私の見解を変えることを非常に困難にしています。ドキュメントでは、変換がアクティブなときに「フレーム」プロパティを使用できないため、ビューの位置を変更するために「中心」プロパティを変更しようとしましたが、これも正しく機能しません。ビューを左上隅に移動したいので、 "center"を(screenwidth/2、screenheight/2)に設定しますが、ビューを正しく配置しません:(任意のアイデアや情報を取得するには右方向モードでのイベントは?
ありがとうございますが、残念ながらそれは役に立たなかったです。本当に変だ!私はこのすべてをシミュレータでテストしています。私のアプリが起動すると、シミュレーターはポートレートモードになり、私は320x480ピクセルの領域全体ですべてのタッチイベントを完全に取得します。シミュレータを右に回転させてから、myView.frameをCGRectMake(0,0,480,320)に設定すると、画面全体が画面全体に表示されませんが、ビューは右に160ピクセル右に移動します私のビューの左側が160個の空の黒いピクセルを突然表示するので、私のビューの一部が可視領域外に移動します。なぜ私は考えていない! – andy
また、ドキュメントでは、トランスフォーメーションがアクティブで、デバイスを回転するとトランスフォーメーションがアクティブになったときに、frameプロパティを使用しないでください。代わりに、ドキュメントは、変換がアクティブなときに境界と中心のプロパティを使用する必要があると言います。しかし、それはどちらもうまくいかない!それはすべてかなり混乱している... – andy