Domanda

Il riferimento UIKit dice che UIView è una superclasse di UIWindow, ma nonostante questa parentela, una UIWindow gestisce effettivamente UIVview. Questo suona così insolito per me.

Qualcuno sa quali sono i significati di questo in termini di progettazione del software?

Mille grazie.

EDIT:
Ho letto il paragrafo relativo nella guida alla programmazione di iPhone. Eppure non riuscivo a capire perché facciano il contrario: lascia che UIWindow sia il genitore di UIView. Dev'esserci stato qualcosa che ha costretto Apple a progettare la gerarchia di classi in questo modo.

È stato utile?

Soluzione

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

  

Una cosa che gli sviluppatori Mac OS X esperti potrebbero trovare inusuali sulla classe UIWindow è la sua eredità. In Mac OS X, la classe padre di NSWindow è NSResponder. Nel sistema operativo iPhone, la classe padre di UIWindow è UIView. Pertanto, nel sistema operativo iPhone, una finestra è anche un oggetto vista. Nonostante la sua parentela, in genere tratti Windows in iPhone OS come faresti in Mac OS X. In altre parole, in genere non manipoli direttamente le proprietà relative alla vista di un oggetto UIWindow.

EDIT:

UIView è qualcosa di generico (fornisce metodi comuni che usi per creare tutti i tipi di viste e accedere alle loro proprietà.) mentre UIWindow è più concreta (la classe definisce gli oggetti che gestiscono e coordinano le finestre visualizzate da un'applicazione sullo schermo).

So che è un po 'vago e penso che solo Apple conoscerebbe il motivo esatto di questa gerarchia.

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

  

La classe UIWindow definisce oggetti (noti come windows) che gestiscono e coordinano le finestre che un'applicazione visualizza sullo schermo. Le due funzioni principali di una finestra sono di fornire un'area per visualizzare le sue viste e distribuire eventi alle viste.

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

  

La classe UIView fornisce metodi comuni che usi per creare tutti i tipi di viste e accedere alle loro proprietà. Ad esempio, a meno che una sottoclasse non abbia un proprio inizializzatore designato, si utilizza il metodo initWithFrame: per creare una vista. La proprietà frame specifica l'origine e le dimensioni di una vista nelle coordinate di superview. L'origine del sistema di coordinate per tutte le viste è nell'angolo in alto a sinistra.

     

Gli oggetti UIView sono disposti all'interno di un oggetto UIWindow, in una gerarchia nidificata di sottoview. Gli oggetti padre nella gerarchia della vista sono chiamati superview e i bambini sono chiamati subview. Un oggetto vista rivendica una regione rettangolare della sua superview chiusa, è responsabile di tutti i disegni all'interno di quella regione ed è idoneo a ricevere anche gli eventi che si verificano in essa. Le viste di pari livello possono sovrapporsi senza problemi, consentendo un posizionamento complesso delle viste.

Altri suggerimenti

Perché allora ogni UIView avrebbe proprietà (ereditate) e comportamenti che hanno senso solo per Windows. È semplicemente sbagliato.

Inversamente ha più senso: una finestra aggiunge comportamento in cima alle viste. Quindi può disegnare, avere limiti, contenere altre viste, ecc. Ma lo estende con, ad esempio, sapendo come eseguire il rendering sul display.

In MacOS X, NSWindows non è una vista. Contengono una "vista root", chiamata contentView. Le finestre iOS sono una composizione di NSWindow + la sua vista radice.

Ogni UIView normale inclusa la vista root della finestra principale dovrebbe avere una vista padre. UIWindow eredita UIView per eseguire le funzioni di una vista padre in una gerarchia di viste. UIWindow non è una vista normale e ha le sue implementazioni di metodi dall'interfaccia di UIView.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top