4

私は iOS にまったく慣れていないので、自分のアプリで向きの変更を機能させるために必死に努力しています。調査した後、私は次のことを行います。

私のアプリには、7 つの UIViewController サブクラスを管理する NavigationController があります。

プロジェクトの概要タブで、4 つのデバイスの向きをすべて有効にしました。

各 UIViewcontroller サブクラスには xib ファイルがあり、すべての xib ファイルには「サブビューの自動サイズ変更」が有効になっています。

UIViewController サブクラスにはすべて次のものがあります。

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait || 
            interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
            interfaceOrientation == UIInterfaceOrientationLandscapeRight );
}

彼らはまたすべて持っています:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

と:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

NSLog(...) ステートメントで実装されています (出力されることはなく、デバッガーもこれらのメソッドに入ることはありません)。

また、私は使用しようとしていました:

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

BOOL getOrientationUpdates = [[UIDevice currentDevice] isGeneratingDeviceOrientationNotifications];
NSLog(@"will receive orientation notifications: %@", getOrientationUpdates?@"YES":@"NO");

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(orientationChanged:)
                                             name:UIDeviceOrientationDidChangeNotification
                                           object:nil];

-(void)orientationChanged: (NSNotification*) notification { NSLog(@"orientationChanged"); }

[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; [[NSNotificationCenter defaultCenter] removeObserver:self]; それぞれ。

beginGeneratingDeviceOrientationNotificationsAppDelegate のメソッドでなどを行う- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions と、orientationChanged: は起動時に 1 回呼び出されますが、デバイスを回転させることはありません。

これまでのところ、私が達成したいのは、方向通知を取得して UIImageView と UIImage を回転させることだけです (さまざまな方向でレイアウトを変更する必要はありません)。

UIDeviceOrientation o = [UIDevice currentDevice].orientation;

いつも戻ってくるUIDeviceOrientationPortrait

ドキュメントまたはstackoverflowで何かを見逃した可能性がありますが、セットアップで機能させるために何をする必要があるか、何を追加する必要があるかを明らかに理解できません。また、私はstackoverflowにまったく慣れていないので、私の投稿がプラットフォームの慣習に違反していないことを願っています.

ヘルプ/ヒントは大歓迎です。どうもありがとう!

編集: getOrientationUpdates は常に YES です。これは、回転時に通知コールバック セレクターが呼び出されないため、奇妙に思えます。

編集:私の AppDelegate の didFinishLaunchingWithOptions で私がやっている:

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.regScreenController = [[RegistrationScreenController alloc] initWithNibName:@"RegistrationScreenController" bundle:nil];

navCtrl = [[UINavigationController alloc]initWithRootViewController:self.regScreenController];

[navCtrl setNavigationBarHidden:YES];
self.window.rootViewController = self.regScreenController;
[self.window addSubview:navCtrl.view];
[self.window makeKeyAndVisible];
return YES;
4

1 に答える 1

5

: メソッドでを設定しているかどうかをself.window.rootViewController確認してくださいAppDelegate's didFinishLaunchingWithOptions。ウィンドウにサブビューのみを追加している場合、向きの変更通知は発生しないためです。

于 2012-05-21T09:35:19.227 に答える