Pergunta

A referência do UIKIT diz que o UIView é uma superclasse do UIWindow, mas, apesar dessa paternidade, uma UIWindow realmente gerencia o UIViews. Isso parece tão incomum para mim.

Alguém sabe quais são os significativos disso em termos de design de software?

Muito Obrigado.

EDITAR:
Eu li o parágrafo relacionado no guia de programação do iPhone. No entanto, eu não conseguia ver por que eles fazem o inverso: Seja UiWindow o pai do UIView. Deve ter havido algo que forçou a Apple a projetar a hierarquia de classes dessa maneira.

Foi útil?

Solução

a partir de http://developer.apple.com/iphone/library/documentation/iphone/conceptual/iphoneosprogrammingguide/windowsandviews/windowsandviews.html

Uma coisa que experimentou os desenvolvedores do Mac OS X pode achar incomum sobre a classe UIWindow é sua herança. No Mac OS X, a classe pai do NSWindow é NSResponder. No iPhone OS, a classe pai do UIWindow é UIView. Assim, no iPhone OS, uma janela também é um objeto de exibição. Apesar de sua paternidade, você normalmente trata as janelas do iPhone OS da mesma forma que no Mac OS X. Ou seja, normalmente não manipula as propriedades relacionadas à exibição diretamente de um objeto UIWindow.

EDITAR:

O UIView é algo genérico (fornece métodos comuns que você usa para criar todos os tipos de visualizações e acessar suas propriedades.) Enquanto o UIWindow é mais concreto (a classe define objetos que gerenciam e coordenam o Windows que um aplicativo é exibido na tela.)

Eu sei que é um pouco vago e acho que apenas a Apple saberia a razão exata para essa hierarquia.

http://developer.apple.com/iphone/library/documentation/uikit/reference/uiwindow_class/uiwindowclassreference/uiwindowclassReference.html#/apple_ref/occ/cl/uiwindow

A classe UIWindow define objetos (conhecidos como Windows) que gerenciam e coordenam o Windows que um aplicativo é exibido na tela. As duas funções principais de uma janela são fornecer uma área para exibir suas vistas e distribuir eventos para as visualizações.

ehttp://developer.apple.com/iphone/library/documentation/uikit/reference/uiview_class/uiview/uiview.html#//apple_ref/cc/cl/uiview

A classe UIView fornece métodos comuns que você usa para criar todos os tipos de visualizações e acessar suas propriedades. Por exemplo, a menos que uma subclasse tenha seu próprio inicializador designado, você usa o método initWithFrame: para criar uma visualização. A propriedade do quadro especifica a origem e o tamanho de uma visualização nas coordenadas de supervisão. A origem do sistema de coordenadas para todas as visualizações está no canto superior esquerdo.

Os objetos UIView são organizados em um objeto UIWindow, em uma hierarquia aninhada de subviews. Os objetos pais na hierarquia de visualizações são chamados superriews, e as crianças são chamadas de subviews. Um objeto de visualização reivindica uma região retangular de sua supervisão em anexo, é responsável por todo o desenho nessa região e é elegível para receber eventos que ocorreram também. As vistas entre irmãos são capazes de se sobrepor sem problemas, permitindo a colocação de visualização complexa.

Outras dicas

Porque então todo UIView teria propriedades e comportamentos (herdados) que só fazem sentido para o Windows. Isso está errado.

O contrário, faz mais sentido: uma janela adiciona comportamento em cima das visualizações. Portanto, ele pode desenhar, ter limites, conter outras vistas, etc., mas estende isso com, por exemplo, saber como renderizar à tela.

No MacOS X, as NSWindows não são visualizações. Eles contêm uma "exibição raiz", chamada ContentView. O iOS Windows é uma composição do NSWIDOW + sua visão raiz.

Cada uiview regular, incluindo a exibição raiz da janela principal, deve ter uma visualização pai. O UIWindow herda o UIView para executar tarefas de uma visão dos pais em uma hierarquia de visualizações. O UIWindow não é uma visão regular e possui suas próprias implementações de métodos da interface do UIView.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top