2009-05-06 80 views
4

的UIKit的参考UIView的说是一个UIWindow的父类,但尽管这样血统,它是一个UIWindow实际管理UIViews。这听起来对我来说很不寻常。为什么是一个UIWindow一个孩子,也UView的父母?

有谁知道这样做的significants在软件设计方面?

非常感谢。

编辑:
我阅读了iPhone编程指南中的相关段落。然而我不明白他们为什么会这样做:让UIWindow成为UIView的父项。肯定有一些东西迫使苹果以这种方式设计类层次结构。关于UIWindow类是其继承有经验的Mac OS X开发

+0

是不是让你困惑父母/孩子的概念和子类/超类? UIWindows是UIView的子类,但不是它的“孩子”。一个UIWindow具有UIViews作为子项。 – tml 2013-03-28 10:09:26

回答

5

http://developer.apple.com/iPhone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/WindowsandViews/WindowsandViews.html

有一件事可能会发现异常。在Mac OS X中,NSWindow的父类是NSResponder。在iPhone OS中,UIWindow的父类是UIView。因此,在iPhone OS中,窗口也是一个视图对象。尽管它的出身,你通常把在iPhone操作系统windows一样的,你会在Mac OS X也就是说,你通常不直接操纵的UIWindow对象的视图相关的属性。

编辑:

UIView的是一些通用的(为您提供用于创建各种意见,并访问其属性常用的方法。),而一个UIWindow是更具体的(类定义了管理对象和协调的窗户在屏幕上的应用程序的显示。)

我所知道的是一个有点含糊,我想只有苹果会知道这个层次的确切原因。

http://developer.apple.com/iPhone/library/documentation/UIKit/Reference/UIWindow_Class/UIWindowClassReference/UIWindowClassReference.html#//apple_ref/occ/cl/UIWindow

UIWindow类定义了管理和协调窗口在屏幕上的应用程序显示的对象(被称为窗口)。窗口的两个主要功能是提供一个区域来显示其视图并将事件分配给视图。

http://developer.apple.com/iPhone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/cl/UIView

UIView类为您提供用于创建各种意见,并访问其属性的常用方法。例如,除非子类都有自己的指定初始化,您可以使用initWithFrame:方法方法来创建一个视图。 frame属性指定超视图坐标中视图的原点和大小。所有视图坐标系的原点位于左上角。

UIView对象排列在UIWindow对象中,嵌套在子视图中。视图层次结构中的父对象称为超级视图,子视图称为子视图。视图对象声明其封闭超视图的矩形区域,负责该区域内的所有绘图,并且有资格接收其中发生的事件。同胞视图能够重叠而没有任何问题,允许复杂的视图布局。

0

因为那么每个UIView的将有(继承)的属性和行为,只有有意义的窗户。这是错误的。

另一种方式更有意义:窗口在视图之上添加行为。因此,它可以绘制,限制,包含其他视图等。但是,它可以通过例如知道如何渲染到显示器来扩展它。

在MacOS X中,NSWindows不是视图。它们包含称为contentView的“根视图”。 iOS窗口是NSWindow +其根视图的组成。

0

每个包含主窗口根视图的常规UIView应该有一个父视图。 UIWindow继承UIView以在视图层次结构中执行父视图的职责。 UIWindow不是常规视图,它有自己的UIView界面方法的实现。

相关问题