前に述べたように、私は初めての Objective-C の初心者ですが、このテーマに関する物理的な本を 4 冊読み、大量の電子ブックとドキュメントを読みましたが、まだ探しているものが見つかりません。
アプリケーション デリゲートのウィンドウ プロパティの物理的なサイズからビュー プロパティを構成するトップレベルのコンテンツ ビュー コントローラーがあります。これは、すでに何人かが質問しているものです。([UIScreen mainScreen]
このフォーラムですでに何度も放映された理由により、カットしません)。したがって、論理的なアプローチは、コンテンツ ビュー コントローラーがアプリケーション デリゲートのウィンドウのフレームを読み取ることです。現在、これに近い唯一の答えは使用することです[[[UIApplication sharedApplication] window] frame]
-ただし、これはウィンドウプロパティがkeyAndVisibleになっている場合にのみ機能します。コンテンツ ビュー コントローラーは、makeKeyAndVisible を取得する前に、アプリ デリゲートのウィンドウ プロパティを読み取る必要があります。コードはこの順序で....
アプリのデリゲート:
- (BOOL) application: (UIApplication *) application didFinishLaunchingWithOptions: (NSDictionary *) launchOptions {
// This next line is a test window frame for R&D purposes....
[self setWindow: [[UIWindow alloc] initWithFrame: CGRectMake(0.0f, 20.0f, 320.0f, 320.0f)]];
if ([self window]) {
contentViewController = [[ContentViewControl alloc] initWithNibName: nil bundle: nil]; // Content view controller instantiated here
if (contentViewController) {
[[self window] addSubview: [contentViewController view]];
[[self window] layoutSubviews];
[[self window] makeKeyAndVisible]; // Window made key and visible here
return YES;
}
}
return NO;
}
私のコンテンツ ビュー コントローラーの initWithNibName: nil bundle: nil メソッドには、次のテスト コードがあります...
- (id) initWithNibName: (NSString *) nibNameOrNil bundle: (NSBundle *) nibBundleOrNil {
self = [super initWithNibName: nibNameOrNil bundle: nibBundleOrNil];
if (self) {
NSLog(@"%@", NSStringFromCGRect([[[UIApplication sharedApplication] keyWindow] frame]));
// This does not work.
}
return self;
}
App Delegate のウィンドウがまだキーになっていないため、これは機能しません。ですから、私の質問はこうです。アプリ デリゲート クラスのインスタンスの名前は何ですか? App Delegateのクラス名がデフォルトであることは知っていますが、インスタンス名myApplicationNameAppDelegate
の後です。への呼び出しを次のように置き換えたい。[[UIApplication sharedApplication] keyWindow]
[myAppDelegatesInstanceName window].
これを少し拡張すると、クエリを実行するオブジェクトのスコープの子孫ではない他のターゲット オブジェクトのメソッドにアクセスするにはどうすればよいでしょうか?
私が言ったように、私はこれらすべてに完全に初心者であり、これはおそらく別の愚かな初心者の質問ですが、まだ誰も簡単な方法で答えていないようです.
(手続き的に-私のホームターフ-ウィンドウを他のレベルのスコープに降ろす方法はたくさんあります-ウィンドウをプログラムスイート全体にグローバルにアクセスできるようにすることから、さまざまな関数階層を介して特定のパラメーターとして渡すことまで-しかし、この客観的なものは、確立された手続き的な慣行から逸脱しているようです)。
誰かが助けてくれれば、本当に感謝しています。このようなものは間違いなく直感的ではありません! VV