visuales sensibilidad reducir pantalla movimiento efectos efecto color cambio cambiar calibrar iphone ios uiviewcontroller controller nsobject

reducir - sensibilidad pantalla iphone 5



Subclase UIViewController o crea un NSObject personalizado cuando la vista no es a pantalla completa (4)

¿Qué haces normalmente cuando necesitas escribir un controlador para una vista que no es a pantalla completa como la mía

No es importante que su vista no se muestre a pantalla completa. Es posible (y habitual) tener vistas consistentes en subvistas, cada una con su propio controlador.

Necesito mantener esta clase lo más liviana posible minimizando el consumo de memoria. No subclasificar UIViewController tiene la ventaja de obtener una clase más ligera sin un montón de métodos que nunca necesitaré usar

La subclasificación de UIViewController no consume una cantidad irrazonable de memoria, por lo que esto no debe ser parte de la consideración.

[...] si crees que podría haber inconvenientes en él [...]

Con su solución, pierde flexibilidad. Es probable que reutilice su solución en un contexto en el que necesite responder a UILifecyle-Messages o utilizar otras funciones de UIViewController.

Si sus vistas serán livianas, podría considerar usar una subclase UIView y usar un delegado para la lógica detrás de su vista.

Necesito crear un controlador de clase para administrar el comportamiento de una vista personalizada que creé. El enfoque estándar es subclasificar a UIViewController, pero en mi caso, decidí subclasificar el objeto NSO esencialmente por tres razones:

  • mi vista necesita ser agregada como una pequeña subvista del controlador de vista principal (no se mostrará usando algo como presentModalViewController o pushViewController ...) y no requiere ningún tipo de barra de herramientas o control de navegación dentro de ella
  • Lo más probable es que mi controlador no necesite ser notificado para la orientación del dispositivo porque su vista siempre se usará en formato vertical, por lo que no estoy interesado en recibir los mensajes de rotación habituales willRotateToInterfaceOrientation, etc ...
  • Necesito mantener esta clase lo más liviana posible minimizando el consumo de memoria. No subclasificar UIViewController tiene la ventaja de obtener una clase más ligera sin un montón de métodos que nunca necesitaré usar

La interfaz de mi controlador es bastante simple, por ejemplo:

@interface MyScrollTabBarController : NSObject <MyTabBarViewDelegate> { } /** * The view is created internally by the controller and the client class * can access to it in readonly mode */ @property (nonatomic, readonly) UIView *view; /** * A Property to change the view appearance */ @property (nonatomic, assign) MyScrollTabBarViewState viewState; /** * Others properties used to construct the view''s subviews */ @property (nonatomic, retain) Location *rootLocation; @property (nonatomic, readonly, retain) Place *place; /** * Designated initializer */ - (id)initWithPlace:(Place *)aPlace; - (void)setRootLocation:(Location *)location animated:(BOOL)animated; @end

Para mostrar su vista interna desde el controlador de vista principal, usaré algo como esto:

tabBarController = [[MyScrollTabBarController alloc] initWithPlace:aPlace]; tabBarController.viewState = MyScrollTabBarViewStateXX; tabBarController.view.frame = CGRectMake(...); [self.view addSubview:tabBarController.view];

Me gustaría saber qué opinas sobre mi elección, si crees que podría haber inconvenientes en ella y qué haces normalmente cuando necesitas escribir un controlador para una vista que no es a pantalla completa como la mía.

Gracias


Creo que esta es una solución aceptable.

Otra solución sería crear una vista "gorda" que se controle a sí misma (como, por ejemplo, MKMapView, UITextView, etc.). Esto podría hacer las cosas un poco más manejables, y si la vista es muy especializada, y su controlador solo debe funcionar con esta clase de vista, no perderá ninguna reutilización (porque no hay mucho).


Hola. Estás subclasificando NSObject y declarando un UIView dentro de él.

@interface MyScrollTabBarController : NSObject <MyTabBarViewDelegate> { } @property (nonatomic, readonly) UIView *view;

Sugiero que subclass UIView, por lo que no tendrá que declarar un objeto de vista adicional.

así que en lugar de self.view puedes simplemente referirte como self

tabBarController = [[MyScrollTabBarController alloc] initWithPlace:aPlace]; tabBarController.viewState = MyScrollTabBarViewStateXX; tabBarController.frame = CGRectMake(...); [self.view addSubview:tabBarController];


Sí, este es el enfoque correcto.

Los UIViewControllers son específicamente para controlar vistas de pantalla completa, no para pantallas secundarias. En iOS5 hay un mecanismo para componer controladores de vista de pantalla secundaria de esta manera, pero eso no está disponible en iOS4 sin muchos hackers.

En los casos en que la vista y el controlador están acoplados intrínsecamente, también podría considerar crear una subclase de vista personalizada que sea su propio controlador, por lo que podría tener una subclase de vista de tabla autónoma que administrara sus propios datos y podría simplemente colocarse en una página.