Artículos con la etiqueta 'Xcode'


Cómo localizar imágenes y vistas en Interface Builder

Después de explicar cómo localizar nuestras cadenas en Xcode , como lo vemos ahora es simple - la aplicación de la misma técnica - para localizar y ver las imágenes e interfaces creados con Interface Builder.

Busque recursos gráficos

El proceso, como se mencionó, es el mismo, si tenemos una imagen ya está incluido en nuestros recursos, o coloque una nueva, y nos quieren "ubicar" - es decir, la gestión de 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:

Nos haga clic en Crear archivo localizable en la parte inferior izquierda.

Haga clic en Añadir 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 dentro de Interface Builder, donde vamos a ver - por defecto - la versión en Inglés.
En este punto, sólo sobrescribir uno (o ambos ficheros Adium.png ) para obtener una localización de las imágenes "flash".

Busque la XIB archivos

Incluso las interfaces construidas con Interface Builder se puede localizar en su totalidad, cuando se considere 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 ) de la interfaz XIB, lo selecciona, elige Obtener información en el menú contextual, dar la localizable archivo, añadir la localización en italiano:

ViewController

Haga clic en Inglés o Italiano abrirá Interface Builder! ) all'interno della classica cartella Classes . Esta vez, el sistema de archivos, nos daremos cuenta de que ha creado dos directorios ( English.lproj y Italian.lproj ) dentro de la carpeta de clases clásica. Ambos tendrán sus archivos infoViewController.xib . La comodidad en este, claramente resuelta en el código, cuando vamos a una instancia de nuestro código de control 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 en que se encuentran en todos los aspectos como dos XIB archivos separados.

Más información ...

10 consejos útiles y fragmentos para Apple iPhone y Xcode

1. Cuerdas en varias líneas

En Xcode, se puede "romper" una cadena de varias líneas mediante la inserción en el extremo de una barra invertida "\". Esta característica puede ser útil cuando, por ejemplo, queremos insertar el texto HTML en un control UIWebView :

Más información ...

Truco muy corto: 3 trucos para los desarrolladores de iPhone de Apple

Icono de la aplicación

El icono de 57 × 57 píxeles que representará a nuestra solicitud "deteriorado" de forma automática por el iPhone de Apple: añade un borde redondeado, un iluminado y 3D. Esta configuración se puede cambiar seleccionando el archivo [nome applicazione]-Info.plist y la adición de la propiedad "Icon ya incluye los efectos de brillo y bisel":

Más información ...

XCode Objective-C: atajos de teclado útiles

Xcode es un entorno de desarrollo muy potente y se reserva algunas sorpresas. Permite una función similar a la "fragmento" de el famoso editor TextMate . En la práctica, es posible insertar bloques de código utilizando la secuencia ESC + una combinación de una o más secuencias de caracteres. e otterrete: Por ejemplo, si desea insertar un bloque if trate de presionar ESC+if y obtendrá:

Immagine 3

. Como se muestra en la figura, aparece un menú (el mismo auto-realización), donde se puede elegir entre un simple bloque if o if/else . Al hacer clic en "enviar" que se obtiene:

Immagine 4

Aquí hay dos enlaces para ver la lista completa de atajos de teclado:

Más información ...

Objective-C: una alternativa al uso de CGRectMake

CGRectMake() es una función (en realidad una línea # define) que se utiliza mucho sobre todo cuando los objetos son creados por el código o la interfaz gráfica de usuario. o UIImageView . CGRectMake() restituisce una struct (struttura di tipo) CGRect : Su uso está por lo tanto, a menudo asociada componentes de inicialización de UIKit , sino también a simple UIView o UIImageView . CGRectMake() devuelve una struct (tipo de estructura) CGRect :

1
2
3
4
5
struct {CGRect
CGPoint origen;
CGSize tamaño;
};
typedef struct CGRect CGRect;

: Que a su vez se compone de dos diferentes estructura CGPoint y CGSize :

1
2
3
4
5
6
7
8
9
10
11
12
13
struct {CGPoint
CGFloat x;
CGFloat y;
};
typedef struct CGPoint CGPoint;

Tamaños *. * /

struct {CGSize
CGFloat ancho;
CGFloat altura;
};
typedef struct CGSize CGSize;

. Eso, a su vez, otra vez, contienen tipos CGFloat , o los tipos de float . Si analizamos el código de CGRectMake () son los siguientes:

1
2
3
4
5
6
7
8
CG_INLINE CGRect
CGRectMake (CGFloat x, y CGFloat, ancho CGFloat, CGFloat altura)
{
CGRect rect;
y; rect.origin.x = x; rect.origin.y = y;
height; rect.size.width = ancho; rect.size.height = altura;
volver rect;
}

De ello se deduce, por tanto, que esta parte del código:

1
2
3
4
[ UIButton buttonWithType : UIButtonTypeRoundedRect ] ; UIButton gbutton * = [UIButton buttonWithType: UIButtonTypeRoundedRect];
12 , 409 , 100 , 40 ) ; gbutton.frame = CGRectMake (12, 409, 100, 40);
@ "Press" forState : UIControlStateNormal ] ; [Gbutton setTitle: @ "Prensa" forState: UIControlStateNormal];
gbutton ] ; [MainWindow addSubview: gbutton];

Con razón se puede escribir como:

1
2
3
4
[ UIButton buttonWithType : UIButtonTypeRoundedRect ] ; UIButton gbutton * = [UIButton buttonWithType: UIButtonTypeRoundedRect];
CGRect ) { 12 , 409 , 100 , 40 } ; gbutton.frame = (CGRect) {12, 409, 100, 40};
@ "Press" forState : UIControlStateNormal ] ; [Gbutton setTitle: @ "Prensa" forState: UIControlStateNormal];
gbutton ] ; [MainWindow addSubview: gbutton];

Sólo para acelerar las cosas 'se ejecuta el código ... :)

Más información ...

Xcode acceso directo

Xcode es un entorno de desarrollo muy bueno, bonito y lleno de detalles que hacen de la escritura de código eficiente y agradable. Entre ellos se encuentra sin duda la conveniencia de la función de autocompletar al escribir, especialmente cuando la creación de aplicaciones para el iPhone de Apple, donde los marcos son muchos y recordar la sintaxis y la nomenclatura está llevando a cabo unos pocos.

Más información ...

XCode: Consejos sobre preferencias de depuración

Uso de las preferencias de Xcode se puede establecer el comportamiento de la atmósfera durante la fase de depuración de una aplicación para iPhone. La configuración por defecto, de hecho, son muy incómodos cuando se intenta y vuelve a intentarlo una aplicación, por ejemplo, después del lanzamiento de nuestra aplicación, debe abrir manualmente la ventana de la consola para ver la salida de varios NSLog() . Xcode también permite a los períodos de sesiones anteriores, así que tuvimos que limpiar la ventana con la mano. Afortunadamente, usted puede resolver el problema girando las preferencias:

xcode-preferences

Como se muestra en la figura anterior, sólo tiene que seleccionar un elemento del menú Inicio en la ventana de depuración para decidir que se abren automáticamente en el inicio de nuestra appicazione (me puse la consola y depurador, pero usted puede elegir los trajes mejor que usted). A la derecha, entonces nos encontramos con la consola de depuración automática clara, por lo que siempre empiezan con la consola limpia.

Más información ...

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 el Interface Builder! De hecho, vamos a eliminar los archivos físicos creados por Interface Builder asistente de Xcode. Al final de este post, entonces, tenemos una solicitud idéntica en todos los aspectos, a los que se construyeron en la primera parte, con la diferencia que vamos a lograr todos nuestros componentes visuales, incluyendo la ventana principal, para el código completo.

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 la postal de este ejemplo, pesa menos que la última vez! :)

Creamos el proyecto

Comenzamos creando nuestro proyecto SecondApp (para distinguirla de FirstApp), aunque esta vez elija Ventana basado en la aplicación:

newproject

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

deleteib

En este punto, ya no tenemos ninguna ventana, 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 seguimiento de
/ / El delegado de aplicación y luego pasarlo a la "mano"
UIApplicationMain ( argc, argv, nil , @ "SecondAppAppDelegate" ) ; int retval = UIApplicationMain (argc, argv, nil, @ "SecondAppAppDelegate");

; [Comunicado de piscina];
volver retVal;
}

Abra SecondAppAppDelegate.me entonces se crea la ventana principal a través de código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void ) applicationDidFinishLaunching : ( UIApplication * ) application { - (Void) applicationDidFinishLaunching: (UIApplication *) la aplicación {

/ / Obtener el tamaño de la pantalla (320, 480)
UIScreen mainScreen ] applicationFrame ] ; CGRect windowRect = [[mainScreen UIScreen] applicationFrame];
/ / Crear una ventana - como lo hicimos adiós a Interface Builder
[ [ UIWindow alloc ] initWithFrame : windowRect ] ; UIWindow MainWindow * = [[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 aparece 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, modifique 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> { @ Interfaz SecondAppAppDelegate: NSObject {<UIApplicationDelegate>
UIWindow * ventana;

* UITextField número;
UIButton botón *;
int numeroACaso;
}

nonatomic, retain ) UIWindow * window; @ Propiedad (no atómica, retener) UIWindow ventana *;

void ) controllaNumero; - (Void) obtenerNumero;

@ End

, in quanto non stiamo usando Interface Builder. También en este caso, hemos preparado la definición del método controllaNumero , ya que la última vez, pero hemos eliminado la indicación IBAction , ya que no estamos usando el Interface Builder.

Construimos el código de la interfaz

Es 's tiempo para crear código con todos los componentes de nuestra interfaz. ed inseriamo il seguente codice: Volvemos en el archivo de SecondAppAppDelegate.m , posizioniamoci antes de [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 animado: 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 la 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: @ "Haga clic aquí" forState: 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]; añade lo siguiente:

1
+ arc4random ( ) % 10 ; numeroACaso = 1 + arc4random () 10%;

Ahora que podemos hacer es implementar el método controllaNumero , que será idéntico (aparte del prototipo) a la que usó la ú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 bajo ...";
( numeroInserito> numeroACaso ) { } Else if (numeroInserito> numeroACaso) {
"Troppo alto..." ; message = @ "demasiado alto ...";
( numeroInserito == numeroACaso ) { } Else if (numeroInserito numeroACaso ==) {
"Bravo hai indovinato" ; message = @ "Bravo lo has adivinado";
+ arc4random ( ) % 10 ; numeroACaso = 1 + arc4random () 10%;
"Numero pensato %d" , numeroACaso ) ; NSLog (@ "El número% d", numeroACaso);
}
[ [ UIAlertView alloc ] UIAlertView alertMessaggio * = [[UIAlertView alloc]
"Responso" initWithTitle: @ "Respuesta"
mensaje: mensaje
delegado: nil
"OK" cancelButtonTitle: @ "OK"
] ; otherButtonTitles: nil];
; [AlertMessaggio espectáculo];
; [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 , porque quería dejarlo lo más simple y eficiente como sea posible y, también, para demostrar que los elementos no siempre son necesarias. Sin embargo, la inserción de 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 todavía traen beneficios en muchos otros casos, yen algunos son casi imprescindibles, como veremos en el futuro.

Más información ...

XCode: organizar el código con la marca # pragma

Xcode es un muy potente y versátil y ofrece al programador con muchas características útiles y sencillos de usar. Al escribir código complejo, o por lo menos articulado, es importante para organizar el código para que no pierdas el tiempo buscando las funciones dispersas en largas líneas de código. Después de comentar, lo primero y más importante que hacer, el medio ambiente proporciona directrices XCode (agradable) para mejorar la usabilidad y legginilità en el desarrollo. Una de ellas es la Directiva de #pragma mark que se convierte en muy útil en la organización de los grupos del código y los métodos.

En la siguiente imagen se puede ver la parte del código de mi proyecto PragmaTest :

pragmamark-1

El menú desplegable superior le permite una lista de todos los métodos de nuestra clase. Ahora bien, si nos conectamos nuestro método sobre la directiva #pragma mark que tiene una sintaxis:

1
# Pragma marca de la etiqueta {}

Obtenemos:

pragmamark-2

La primera #pragma mark con un guión (-) se inserta una línea de separación. El segundo es un texto (etiqueta) al gusto. Usted puede agregar la siguiente declaración en la que desea, la organización del código como mejor le parezca. Además también puede insertar pragma filas múltiples, escriba:

1
2
3
4
5
6
# Pragma mark -
# Pragma marca / **
# Pragma marca * Uso del pragma
# Pragma * marca en varias líneas de código
# Pragma marca * /
void ) mioMetodo { } - (Void) {} myMethod

Más información ...

XCode 3.1.3: Restaurar el SDK 2.2.1

Para los desarrolladores sólo el registro ya se ha lanzado una nueva versión del SDK para el iPhone de Apple, por lo que ahora es el momento de instalar el SDK de 3,0 por lo tanto la actualización de todo el entorno de desarrollo Xcode a la versión 3.1.3. Si ya ha actualizado usted habrá notado que la creación de un nuevo proyecto parece que falta el viejo 2.2.1 SDK (incluidos).

xcode313

En realidad todo está aquí en nuestra máquina, sólo puede ejecutar un procedimiento sencillo para restaurar mágicamente todos nuestros SDK anterior, así que trate de nuestra aplicación para el iPhone de Apple es la 3.0 SDK que con las versiones anteriores 2.2.1 e inferiores. Seleccione el proyecto, abra el menú contextual y seleccione Obtener información:

xcode131menu

En la ventana que se abre, la primera pestaña General, seleccione el SDK Base baja para todas las configuraciones y restauró el SDK 2.2.1 (o lo que sea).

xcode313info

Sin que, por arte de magia, el menú volverá a mostrar todo el XCode SDK 3.0 incluyendo

xcode313ok

Más información ...



Deje de SOPA