Window 学习笔记(一)

来源:互联网 发布:可以做生意的软件 编辑:程序博客网 时间:2024/04/30 08:05

参考资料:点击打开链接;点击打开链接

  • 理解window和screen

一个app通常只有一个window,但是如果需要有其它的独立于外的window,也可以创建。在ios中,window是没有title bar,close boxes,或者其它可视化的元素的。用户看不到,也无法关闭或者移动这个window。

window的作用:

  • It contains your app’s visible content. 包含可视化内容

  • It plays a key role in the delivery of touch events to your views and other app objects. 点击事件的传递

  • It works with your app’s view controllers to handle orientation changes. 和view controller一起处理方向,比如旋转。

  • A Window’s Root View Contains Your Content

一个window包含一个root view controller来包含所有的视图显示。使用一个root viewcontroller的方式简化了改变接口的处理。因为如果想展示新的内容,需要做的只是简单更换旧的root viewcontroller就可以了。 为window提供root view的最简单的方式就是使用storyboard来定义你的用户接口。方法如下:

当创建新的工程的时候,会有一个默认的main storyboard。如果没有,你也可以手动创建一个新的storyboard,并且在plist文件中设置对应的main storyboard。这种方式下,ios已经做了几个初始化的任务:

  • Instantiates a window. 实例化一个window

  • Loads the main storyboard and instantiates its initial view controller. 加载main storyboard并且实例化他的初始view controller。

  • Assigns the new view controller to the window’s rootViewController property and then makes the window visible. 将新的view controller分配给window的rootviewconroller属性并且显示window。

如果你使用nib而不是storyboard来创建app的ui,你需要确定在程序launch的时候,设置window的root viewcontroller。

window.rootViewController = myViewController;

在你需要创建window的时候,可以使用以下的方法来创建。

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 
   UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
   myViewController = [[MyViewController alloc] init];
   window.rootViewController = myViewController;
   [window makeKeyAndVisible];
   return YES;
}

当手动创建window的时候,需要将她的size设置为满屏幕的。不要裁剪window的frame。

root viewcontroller是可以改变的。
  • The Key Window Receives Certain Events

在app运行的任何时刻只有一个 window是key window。大多数情况下,app的window会成为key window。因为ios使用独立的windows来显示例如alert views,input accessory views,这些window也可以称为key window。例如,当一个alert 或者 input accessory view有一个text field的时候,这个window就会变为key window。

  • Most App Windows Exist at the Same Level

当你创建了一个新window,一般会被自动分配normal window level

  • A Window Is Associated with One Device Display

uiwindow的screen属性描绘了当前显示的window的特定设备显示。他是uiscreen类的一个属性,包含设备展示信息,比如他的尺寸,mode,亮度等信息。screen对象还包含几个通知来得知设备展示的变化。比如,当显示的mode或者亮度发生变化时,你可以注册通知来侦测。

  • Window Notifications Help You Monitor Changes

iOS定义了几个通知来侦测window和screen的变化。这些通知对于要支持独立外部window的情况很有用。uiwindow定义了如下的通知:

  • UIWindowDidBecomeVisibleNotification

  • UIWindowDidBecomeHiddenNotification

  • UIWindowDidBecomeKeyNotification

  • UIWindowDidResignKeyNotification

当你的app进入到后台后,这些通知不会传递。因为尽管你的window在后台的时候没有显示,但是他仍然被视为在你的app context中存在。The UIWindowDidBecomeKeyNotificationUIWindowDidResignKeyNotification 通知帮助你追踪判断你的app window是否是key window。



0 0