Trabajar con Interface Builder se puede utilizar un objeto de forma espontánea UIImageView para configurar el fondo de nuestro controlador de vista. Como alternativa, puede eliminar este objeto, con el consiguiente ahorro un poco de memoria, y tomar ventaja de la vista asociada con el controlador de vista. Sólo tiene que conectar nuestro controlador de vista:
Artículos con la etiqueta 'Interface Builder'
Fragmento muy breve: el UIView para mostrar una imagen
Objective-C: cómo girar una imagen en el espacio 3D
), un oggetto di più basso livello con innumerevoli potenzialità. La clase UIView muestra un puntero a la capa ( CALayer ), un objeto de la planta baja con un gran potencial. La capa proporciona una variedad de métodos y propiedades relacionadas con la visualización del contenido de la vista. Por ejemplo, se puede manipular el contenido de una vista en un espacio tridimensional. En " contaminación de las muestras es interesante observar que el código es simple, y todo lo que se crea con Interface Builder:

Cómo encontrar las imágenes y vistas en Interface Builder
Después de explicar cómo localizar nuestras cuerdas en Xcode , es fácil ver ahora cómo - mediante la aplicación de la misma técnica - para localizar y ver las imágenes / interfaces creados con Interface Builder.
Localizar los recursos gráficos
El proceso, como se mencionó, es el mismo, si tenemos una imagen ya está incluido en nuestros recursos, o insertar una nueva, y nos quieren "ubicar" - es decir, para manejar dos o más imágenes en función de los idiomas soportados - simplemente haga clic en el botón imagen de la derecha ( Adium.png en este ejemplo) y seleccione Obtener información:

Crear archivo localizable hacemos clic en la parte inferior izquierda.

Nosotros, haga clic en Agregar e introduzca la localización Italian :

Con el fin de obtener:

esattamente come accadeva con il testo: Nuestra imagen se mueve (física, una de las raras ocasiones en que ocurre nell'alberatura Xcode se refleja en el sistema de archivos) en carpetas virtuales English.lproj y Italian.lproj tal y como sucedió con el texto:

contiene una stessa versione dell'immagine. En este punto, cada una de las carpetas English.lproj y Italian.lproj contiene la misma versión de la imagen. Esta imagen es manipulada en Interface Builder, donde podremos ver - por defecto - la versión en Inglés.
En este punto, sólo sobrescribir uno (o ambos archivos Adium.png ) para obtener una ubicación de las imágenes "flash".
Localice el XIB archivos
Incluso las interfaces construidas con Interface Builder se puede encontrar en su totalidad, cuando lo considera necesario. ) con interfaccia XIB , lo selezioniamo, scegliamo Get Info dal menu contestuale, rendiamo il file localizzabile, aggiungiamo la localizzazione in italiano: El procedimiento es idéntico al realizado con las capacidades gráficas: agregar un ViewController (por ejemplo, infoViewController ) XIB interfaz, que se selecciona, elige Obtener información en el menú contextual, dan la localizable archivo, añadir la localización italiano:

Al hacer clic en Italiano o el italiano se abrirá Interface Builder! ) all'interno della classica cartella Classes . Esta vez, el sistema de archivos, te darás cuenta de que ha creado dos directorios ( English.lproj y Italian.lproj ) dentro de la carpeta de clases clásica. Ambos tienen sus archivos infoViewController.xib . La comodidad en este, resuelve con claridad en el código, y cuando vamos a una instancia de nuestro código de controlador vamos a tener una "limpia" de esta manera:
1 2 | [ InfoViewController alloc ] ; InfoViewController * info = [InfoViewController alloc]; info.view ] ; [Self.view addSubview: info.view]; |
Como puedes ver no hay ni rastro de cualquier declaración relativa a la ubicación, totalmente administrado por el sistema. Las dos interfaces, por supuesto, puede ser completamente diferente, como lo son en efecto como dos archivos separados XIB.
iPhone SecondApp: Adivinar el número - Parte 2
Como se ha mencionado iPhone FirstApp: Adivinar el número - Parte 1 podemos ver cómo hacer una aplicación para el iPhone de Apple sin necesidad de utilizar Interface Builder! De hecho, vamos a eliminar los archivos físicos creados por Interface Builder, Xcode asistente. Al final de este post, entonces, tenemos una aplicación idéntica en todos los aspectos, a la conseguida en la primera parte, con la diferencia que vamos a lograr todos nuestros componentes visuales, incluyendo la ventana principal, por completo con el código.
La aplicación ya está hecho, si lo que desea es descargar, está disponible en mi repositorio de Google Code:
Me gustaría señalar de inmediato que el ZIP de este ejemplo que pesan menos que la última vez! ![]()
Creamos el proyecto
Comenzamos por crear nuestro proyecto SecondApp (para distinguirla de FirstApp), aunque esta vez elija Ventana de aplicaciones basado en:

Ahora vamos a borrar todo lo relacionado con Interface Builder. : eliminatelo anche dal file system, quindi selezionate Also Move to Trash . Elimine el archivo MainWindow.xib , que se encuentra en la carpeta de Resources : también se elimina del sistema de archivos, a continuación, seleccione también se mueven a la papelera. nella casella Main nib file base name : A continuación, seleccione el archivo SecondoApp-info.plist y eliminar la referencia a la MainWindow punta de caja principal nombre base del archivo:

En este punto, ya no tienen Windows, por lo menos a través de Interface Builder. , e modifichiamo la funzione main() in questo modo: Por lo tanto, abrir el archivo main.m , situado en Other Sources , y modificar la función main() así:
1 2 3 4 5 6 7 8 9 10 11 | int argc, char * argv [ ] ) { int main (int argc, char * argv []) { pool = [ [ NSAutoreleasePool alloc ] init ] ; NSAutoreleasePool * Piscina = [[ NSAutoreleasePool alloc] init]; / / Al eliminar el archivo. XIB hemos perdido el punto / / Delegado a la Asamblea Parlamentaria Paritaria, a continuación, pasar a la "mano" UIApplicationMain ( argc, argv, nil , @ "SecondAppAppDelegate" ) ; int retval = UIApplicationMain (argc, argv, nil, @ "SecondAppAppDelegate"); ; [Comunicado de piscina]; volver retval; } |
Abrir SecondAppAppDelegate.me a continuación, crear la ventana principal en el código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | void ) applicationDidFinishLaunching : ( UIApplication * ) application { - (Void) applicationDidFinishLaunching: (UIApplication *) {aplicación / / Obtener el tamaño de la pantalla (320, 480) UIScreen mainScreen ] applicationFrame ] ; CGRect windowRect = [[Principal UIScreen] applicationFrame]; / / Se crea una ventana - como lo hemos hecho en Interface Builder bye bye [ [ UIWindow alloc ] initWithFrame : windowRect ] ; MainWindow UIWindow * = [[UIWindow alloc] initWithFrame: windowRect]; / / Establecer el fondo de la ventana de color amarillo, para diferenciar / / El FirstApp solicitud anterior [ UIColor yellowColor ] ] ; [SetBackgroundColor MainWindow: [UIColor yellowColor]]; mainWindow ] ; [Self SetWindow: MainWindow]; ; [Ventana makeKeyAndVisible]; ; [MainWindow liberación]; } |
Ya se puede probar la aplicación, si usted consigue una ventana amarilla que lo hizo todo bien!
, necessario solo se si usa Interface Builder. En el archivo de SecondAppAppDelegate.h podemos eliminar IBOutlet , sólo es necesario si se utiliza Interface Builder. También añadir que nuestras variables globales, la última vez que había entrado en el controlador. A continuación, modificar el archivo SecondAppAppDelegate.h :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # Importar <UIKit/UIKit.h> NSObject <UIApplicationDelegate> { @ Interface SecondAppAppDelegate: NSObject {<UIApplicationDelegate> UIWindow * ventana; UITextField * número; UIButton botón *; numeroACaso int; } nonatomic, retain ) UIWindow * window; @ Propiedad (no atómica, retener) UIWindow ventana *; void ) controllaNumero; - (Void) obtenerNumero; @ End |
, in quanto non stiamo usando Interface Builder. Una vez más, hemos preparado la definición del método controllaNumero , como la última vez, pero hemos eliminado la indicación IBAction , porque no se está utilizando Interface Builder.
Creamos la interfaz de código
Es el momento de crear código con todos los componentes de nuestra interfaz. ed inseriamo il seguente codice: Volvamos al archivo SecondAppAppDelegate.m , posizioniamoci antes [mainWindow release] e introduzca el siguiente código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | / / Creamos la barra de título [ [ UINavigationBar alloc ] initWithFrame : CGRectMake ( 0.0 , 0.0 , 320.0 , 44.0 ) ] ; UINavigationBar myNavigationBar * = [[UINavigationBar alloc] initWithFrame: CGRectMake (0.0, 0.0, 320.0, 44.0)]; myNavigationBar.barStyle = UIBarStyleDefault; [ [ UINavigationItem alloc ] initWithTitle : @ "Indovina un numero" ] ; UINavigationItem navigationItem * = [[UINavigationItem alloc] initWithTitle: @ "Adivina el número"]; navigationItem animated : NO ] ; [MyNavigationBar pushNavigationItem: navigationItem animados: NO]; myNavigationBar ] ; [Ventana addSubview: myNavigationBar]; / / Crear la etiqueta [ [ UILabel alloc ] initWithFrame : CGRectMake ( 10 , 50 , 300 , 80 ) ] ; UILabel myLabel * = [[UILabel alloc] initWithFrame: CGRectMake (10, 50, 300, 80)]; UIColor clearColor ] ; myLabel.backgroundColor = [UIColor clearColor]; ; myLabel.numberOfLines = 2; "iPhone ha pensato un numero da 1 a 10, prova ad indovinarlo?" ; myLabel.text = @ "El iPhone ha diseñado un número del 1 al 10, trata de adivinar?" myLabel ] ; [Ventana addSubview: myLabel]; / / Crear entrada de texto UITextField alloc ] initWithFrame : CGRectMake ( 10 , 120 , 300 , 30 ) ] ; = número [[UITextField alloc] initWithFrame: CGRectMake (10, 120, 300, 30)]; numero.borderStyle = UITextBorderStyleRoundedRect; numero.textAlignment = UITextAlignmentCenter; numero.keyboardType = UIKeyboardTypeNumberPad; "Inserisci il numero" ; numero.placeholder = @ "Introduzca el número"; numero ] ; [Ventana addSubview: número]; / / Crear el botón UIButton buttonWithType : UIButtonTypeRoundedRect ] ; botón = [UIButton buttonWithType: UIButtonTypeRoundedRect]; 10 , 180 , 300 , 30 ) ; bottone.frame CGRectMake = (10, 180, 300, 30); @ "Premi qui" forState : UIControlStateNormal ] ; [Botón setTitle: @ "Click Aquí" Forst: UIControlStateNormal]; self action : @selector ( controllaNumero ) forControlEvents : UIControlEventTouchUpInside ] ; El botón [AddTarget: acción de auto: @ selector (obtenerNumero) forControlEvents: UIControlEventTouchUpInside]; bottone ] ; [Ventana addSubview: botón]; ; [MyLabel liberación]; ; [NavigationItem liberación]; ; [MyNavigationBar liberación]; |
della scorsa volta, subito dopo il [mainWindow release]; inseriamo: Desde el ' applicationDidFinishLaunching corresponde a viewDidLoad que la última vez, justo después de la [mainWindow release]; insertar:
1 | + arc4random ( ) % 10 ; numeroACaso arc4random = 1 + () 10%; |
Ahora que podemos hacer es implementar el método controllaNumero , que será idéntico (aparte del prototipo) para que el tiempo utilizado por última vez:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | void ) controllaNumero { - (Void) {obtenerNumero "Premuto bottone di controlla numero" ) ; NSLog (@ "número presionado el botón de control"); [ numero.text integerValue ] ; numeroInserito = int [numero.text integerValue]; message; NSString * mensaje; "Il numero inserito è %d" , numeroInserito ) ; NSLog (@ "El número introducido es% d", numeroInserito); numeroInserito <numeroACaso ) { if (numeroInserito <numeroACaso) { "Troppo basso..." ; message = @ "demasiado baja ..."; ( numeroInserito> numeroACaso ) { } Else if (numeroInserito> numeroACaso) { "Troppo alto..." ; message = @ "demasiado alto ..."; ( numeroInserito == numeroACaso ) { } Else if (numeroInserito numeroACaso ==) { "Bravo hai indovinato" ; message = @ "Bravo, lo habéis adivinado"; + arc4random ( ) % 10 ; numeroACaso arc4random = 1 + () 10%; "Numero pensato %d" , numeroACaso ) ; NSLog (@ "% d Número de pensamiento," numeroACaso); } [ [ UIAlertView alloc ] UIAlertView alertMessaggio * = [[UIAlertView alloc] "Responso" initWithTitle: @ "Respuesta" mensaje: mensaje delegado: nil "OK" cancelButtonTitle: @ "OK" ] ; otherButtonTitles: nil]; ; [AlertMessaggio show]; ; [AlertMessaggio liberación]; "" ; numero.text @ = ""; } |
Ya hemos terminado!
Conclusiones y consideraciones
, proprio perchè volevo lasciarlo il più semplice e snello possibile e, anche, per dimostrare che non sono elementi sempre necessari. Este ejemplo no hacer uso directo de un UIView o UIViewController , sólo porque me quería ir lo más simple y ágil como sea posible y, también, para mostrar que los elementos no siempre son necesarias. Sin embargo insertar objetos directamente en la ventana puede tener algún sentido en este ejemplo y otros contextos esporádicos. portano comunque benefici in tantissimi altri casi, ein alcuni sono praticamente indispensabili; come avremo modo di vedere in futuro. El uso de UIView y UIViewController traer beneficios en muchos otros casos, sin embargo, algunos son ein prácticamente indispensable, como veremos en el futuro.
iPhone FirstApp: Adivinar el número - Parte 1
La primera fuente que me levanté en mis manos ha sido escrito en básico y consistía en unas pocas líneas de código, para aclararme. Era un juego simple que genera un número aleatorio de 1 a 10 y, a través del teclado, compruebe que el número introducido se Maggioni, menor o igual al número aleatorio. A pesar de su simplicidad en bruto sigue siendo, para mí, uno de los mejores ejemplos - simple, divertida y práctica - para explicar a aquellos que no saben nada acerca de la programación lo que se entiende realmente por "programa de ordenador". Así que me decidí a proponer para el iPhone de Apple, tal vez ayude a alguien ...
Hola Teléfono
A partir de hoy inaugura una nueva sección (categoría que corregir), dedicada al desarrollo de aplicaciones en el iPhone de Apple! Declaro ahora que muchos de los artículos que publicará un "corte" en línea con el espíritu de este blog, que será principalmente para usuarios avanzados. Sin embargo, como lo he hecho para otros temas, voy a tratar de ser lo más claro posible y, cuando sea necesario, para insertar un "concepto básico" de utilidad para un público más amplio.






Últimos Comentarios
José : Hola quería preguntar cómo se puede hacer en el post que he subido una galería de 50 imágenes, por ejemplo, ...
José : Consejo, si desea restaurar todas las miniaturas plugin de pulgares Regenerar
José : ¡Gracias! Guía muy interesante.
Giovambattista Fazioli : actualización: WordPress ha actualizado la documentación de esta función.
Giovambattista Fazioli : @ iLeW: por supuesto, ver aquí