#iphone #ios #xcode4.2
#iPhone #iOS #xcode4.2
Вопрос:
Я создаю приложение ios без файлов nib и хочу инициализировать окно в делегате приложения следующим образом:
CGRect screenBounds = [[UIScreen mainScreen] bounds];
self.window = [[[UIWindow alloc] initWithFrame:screenBounds] autorelease];
self.window.backgroundColor = [UIColor greenColor];
NSLog(@"%@", self.window.bounds);
Появляется окно, и я вижу зеленый цвет, который я определил. Когда я отлаживаю self.window, я вижу границы фрейма, который я только что определил, но когда я хочу получить доступ к свойству bounds, оно возвращает null. То же самое с frame. В чем разница?
Когда я хочу инициализировать представление следующим, оно не будет работать, потому что фрейм / границы не определены для инициализации этого представления:
// create root view
RootView* rootView = [[[RootView alloc] initWithFrame:self.window.bounds] autorelease];
Что я делаю не так?
Ответ №1:
Да, это не сработает
NSLog(@"%@", self.window.bounds);
Границы окна не являются объектом, поэтому %@ нельзя использовать для его отображения 🙂
Попробуйте преобразовать CGRect
в NSString *
первый :
NSLog(@"%@", NSStringFromCGRect(self.window.bounds));
Это должно дать вам немного больше отладочной информации, которая поможет вам решить вашу проблему 🙂
NB %@ просто вызывает description
объект и отображает его.
Ответ №2:
Вы должны использовать спецификаторы формата для NSLog
фрейма:
NSLog(@"x=%.1f, y=%.1f, width=%.1f, height=%.1f",
self.window.bounds.origin.x,
self.window.bounds.origin.y,
self.window.bounds.size.width,
self.window.bounds.size.height);
Комментарии:
1. Для этого есть вспомогательный метод —
NSStringFromCGRect
🙂 Подробнее см. Документы здесь: developer.apple.com/library/ios/#documentation/uikit/reference /…