'IPhone' Categoría


10 Fragmento de utilidad para el iPhone de Apple

Ejecutar un método después de n segundos

Toda la familia performSelector es muy interesante y puede ser útil en una multitud de casos. Su aplicación más simple y común es la siguiente:

1
2
3
4
5
@selector ( myMethod ) withObject : nil afterDelay : 3 ] ; [Self performSelector: @ selector (myMethod) withObject: nil afterDelay: 3];
/ /
void ) myMethod { - (Void) {myMethod
"Hello World!" ) ; NSLog (@ "Hola Mundo!");
}

Sin embargo, tenga en cuenta que el "timer" no es exacta. Este procedimiento, por lo tanto, se debe utilizar cuando no es necesario "considerable" de precisión del tiempo.

Recuperar la versión de la

1
2
version = [ [ [ NSBundle mainBundle ] infoDictionary ] objectForKey : @ "CFBundleVersion" ] ; NSString * Version = [[[ NSBundle mainBundle] infoDictionary] objectForKey: @ "CFBundleVersion"];
"versione = %@" , version ) ; NSLog (@ "Version =% @", versión);

Sí, cierto o cierto?

e TRUE sono in pratica la stessa edentica cosa: El ir a peinarse a través del iPhone de Apple kernel puede darse cuenta de que YES , true , y TRUE son prácticamente la misma cosa edentica:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/ / Definición de la SI
# Definir SI (BOOL) 1
# Definir NO 0 (BOOL)

/ / Definición de la verdad
# Definición de una verdadera
# Definir 0 falsa

/ / Definición de TRUE
# Si! Definida (VERDADERO)
# Definición de un VERDADERO
# Endif

# Si! Definida (FALSO)
# Definir 0 FALSO
# Endif

Al menos por ahora ...

Vibración

1
2
3
# Importar <AudioToolbox/AudioToolbox.h>
/ /
; AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);

CGImageRef puntero de una UIImage

1
2
3
4
[ UIImage imageNamed : @ "LittleHeart.png" ] ; UIImage corazón * = [UIImage imageNamed: @ "LittleHeart.png"];
heart CGImage ] ; CGImageRef imagen = [corazón CGImage];
/ / La imagen ahora se puede "trama" en una CGContextRef
CGRect ) { 0 , 0 , 100 , 100 } , image ) ; CGContextDrawImage (c, (CGRect) {0, 0, 100, 100}, imagen);

Animaciones

1
2
3
4
5
nil context : NULL ] ; [BeginAnimations UIView: contexto nada: NULL];
1.5 ] ; [UIView setAnimationDuration: 1,5];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
/ / ...
; [CommitAnimations UIView];

NSLog

1
2
3
"NSString object %@ " , myString ) ; NSLog (@ "NSString objeto% @", MyString);
"Float: %f " , myFloat ) ; NSLog (@ "float:% f", myFloat);
"Integer: %i " , myInt ) ; NSLog (@ "entero:% s", myInt);

Convertidor de RGB a UIColor

1
# Definir RGBA (R, G, B, A) [UIColor colorWithRed: r/255.0 verde: azul g/255.0: b/255.0 alfa: a]

Paso de parámetros a un NSTimer

Explotando el parámetro userInfo puede enviar un puntero a nuestro objeto al método invocado por el temporizador.

1
2
3
4
5
6
7
8
9
10
11
12
13
scheduledTimerWithTimeInterval : 1 target : self selector : @selector ( timerMethod ) userInfo : objectPointer repeats : YES ] ; [ NSTimer scheduledTimerWithTimeInterval: 1 de destino: selector de auto: @ selector (timerMethod) userInfo: repite objectPointer: YES];

/ / ...

void ) timerMethod : ( NSTimer * ) timer { - (Void) timerMethod: ( NSTimer *) {contador de tiempo
/ / Recuperar el puntero a mi objeto
timer userInfo ] ; objectPointer = [temporizador userInfo];
/ / O
myMethod ] ; [[Temporizador userInfo] myMethod];
[ [ timer userInfo ] myProperty ] ; int a = [[temporizador userInfo] myProperty];
/ / ¿Qué es la misma
[ objectPointer myProperty ] ; int a = [objectPointer myProperty];
}

Tiempo de ejecución

Aquí está una manera fácil de calcular tiempo necesario para comprobar la velocidad de la ejecución de código:

1
2
3
4
; CFAbsoluteTime initialTime CFAbsoluteTimeGetCurrent = ();
/ / ... código
; CFAbsoluteTime finalTime CFAbsoluteTimeGetCurrent = ();
"Tempo trascorso %f" , finalTime - initialTime ) ; NSLog (@ "f% transcurrido el tiempo", finalTime - initialTime);

Más información ...

Objective-C: exponen las propiedades de una clase

Me gustaría mostrar y discutir algunos ejemplos acerca de cómo agregar y manipular las propiedades en la clase de Objective-C. : Un ejemplo clásico es, precisamente, de la siguiente manera: en la definición de nuestra interfaz de clase se definen dos propiedades nome y cognome :

1
2
3
4
5
6
7
8
9
10
11
/ / MyClass.h
# Importar <Foundation/Foundation.h>

NSObject { @ Interface MyClass: NSObject {
nome; NSString * nombre;
cognome; NSString * nombre;
}

retain ) NSString * nome; @ Propiedad (retener) NSString * nombre;
retain ) NSString * cognome; @ Propiedad (retener) NSString * nombre;
@ End

e setter usati rispettivamente per leggere ed impostare le nostre due proprietà: En el archivo de la aplicación que inserta la declaración @synthesize de manera que Xcode va a producir para nosotros los métodos getter y setter , respectivamente, que se utiliza para leer y establecer nuestras dos propiedades:

1
2
3
4
5
6
7
8
/ / MyClass.m
# Importar "MyClass.h"

@ Aplicación MyClass

Sintetizar @ nombre, apellido;

@ End

, possiamo scrive: Cuando usted va a utilizar nuestra clase MyClass , que es cuando istanziaremo un objeto de tipo MyClass , se puede escribir:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/ / Cualquier otra clase, como AppDelegate
/ / En el archivo. H
# Importar <UIKit/UIKit.h>
# Importar "MyClass.h"

@ Clase TestViewController;

NSObject <UIApplicationDelegate> { @ Interfaz TesAppDelegate: NSObject {<UIApplicationDelegate>
UIWindow * ventana;
* TestViewController viewController;

MyClass * MiClase;
}

/ / En el archivo. M
MyClass alloc ] ; MiClase = [MyClass alloc];
"Giovambattista" ; miaClasse.nome @ = "Giovambattista";
"miaClasse.nome = %@" , miaClasse.nome ) ; NSLog (@ "% @ = miaClasse.nome" miaClasse.nome);

O, que es equivalente a:

1
2
3
/ / Siempre en el archivo. M
@ "Undolog" ] ; [SetNome myClass: @ "Undolog"];
"miaClasse.nome = %@" , [ miaClasse nome ] ) ; NSLog (@ "miaClasse.nome =% @", [miClase nombre]);

Hasta aquí todo bien. Sin embargo, podría inducir a error a la equivalencia de "variabli" interno (ivar) como bienes inmuebles. Para entender la diferencia, proponer de nuevo lo mismo que hacerlo sin que, en esta ocasión, la @synthesize . . Ahora, por lo tanto, debemos tratar con nosotros para escribir los métodos getter y setter . Para enfatizar aún más las diferencias, las variables internas rinominerò insertando un guión bajo delante del nombre. Sin embargo, vemos el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Importar <Foundation/Foundation.h>

NSObject { @ Interface MyClass: NSObject {
_nome; NSString * _name;
_cognome; NSString * _cognome;
}

NSString * ) nome; // get - ( NSString *) Nombre; / / obtener
NSString * ) cognome; // get - ( NSString *) Nombre; / / obtener

void ) setNome : ( NSString * ) stringaIngresso; // set - (Void) setNome: ( NSString *) stringaIngresso; / / conjunto
void ) setCognome : ( NSString * ) stringaIngresso; // set - (Void) setCognome: ( NSString *) stringaIngresso; / / conjunto

@ End

. A diferencia del ejemplo anterior, los punteros a las variables internas (incapsultate) se han convertido en _nome y _cognome . . @property è scomparso, in quanto non serve più. Además, hay cuatro definiciones de métodos que representan nuestra get y set . @property ha desaparecido, ya no es necesario.
Vemos el archivo de implementación MyClass.m :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Importar "MyClass.h"

@ Aplicación MyClass

/ / Obtener un "nombre"
NSString * ) nome { - ( NSString *) Nombre {
_name Retorno;
}
/ / Set para "nombre"
void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso
_name = StringaIngresso;
}

/ / Obtener de "apellido"
NSString * ) cognome { - ( NSString *) Nombre {
_cognome regresar;
}
/ / Set para "Last Name"
void ) setCognome : ( NSString * ) stringaIngresso { - (Void) setCognome: ( NSString *) {stringaIngresso
_cognome = stringaIngresso;
}

@ End

Una clase que por escrito se puede utilizar exactamente igual que el anterior, a saber:

1
2
3
4
5
6
7
8
MyClass alloc ] ; MiClase = [MyClass alloc];
"Giovambattista" ; miaClasse.nome @ = "Giovambattista";
"miaClasse.nome = %@" , miaClasse.nome ) ; NSLog (@ "% @ = miaClasse.nome" miaClasse.nome);

/ / O, que es equivalente a:

@ "Undolog" ] ; [SetNome myClass: @ "Undolog"];
"miaClasse.nome = %@" , [ miaClasse nome ] ) ; NSLog (@ "miaClasse.nome =% @", [miClase nombre]);

e set , evidenziando – anche con l'aggiunta dell'underscore – le differenze tra il nome della proprietà e la sua ivar interna _nome . En el nivel de abandono educativo @synthesize nos obligó a escribir "sus propios" métodos de get y set , poniendo de relieve - incluso con la adición dell'underscore - las diferencias entre el nombre de la propiedad y su Ivar interna _nome .
permette un reale controllo del dato prima della sua impostazione (o prima della sua lettura) e quindi un reale incapsulamento per proteggere la variabile interna. A nivel funcional, el uso personal de los métodos de get y set permite el control real de los datos antes de su entorno (o antes de su lectura) y luego una encapsulación real para proteger a la variable interna.
Por ejemplo, sería posible para impedir el paso de cadenas vacías a la propiedad nome :

1
2
3
4
void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso
stringaIngresso == @ "" ) stringaIngresso = @ "senza nome" ; if (@ stringaIngresso == "") stringaIngresso @ = "sin nombre";
_name = StringaIngresso;
}

Variante adicional

Si desea utilizar las variables internas con el guión bajo delante (que rpoviene Adobe ActionScript puede ser utilizado también) no es necesario abandonar el uso de la directiva @synthesize . Xcode permite "fusionar" los métodos anteriores:

1
2
_nome; Sintetizar @ name = _name;
_cognome; Sintetizar @ name = _cognome;

. De este modo podemos utilizar el puntero interno _nome ", resumió" - en el exterior - como una propiedad de nome . e setter , è vero anche che lo fa solo se non li trova, quindi se desiderate “implementare” un vostro metodo di getter e/o setter potete farlo anche se avete usato la direttiva @synthesize . Por otra parte, aunque el uso de @synthesize produce los métodos de generación automática (mensajes) de getter y setter , también es cierto que sólo lo hace si los encuentra, por lo que si quieren "aplicar" un método para el getter y el / o setter puede hacer esto incluso si ha utilizado la directiva @synthesize .

Las asignaciones de memoria

En los ejemplos anteriores he omitido algunos detalles importantes para una implementación real. En primer lugar, no han mostrado ningún método init() , útil para la inicialización de objetos y valores por defecto. Además, carece de la adición de un método dealloc() :

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
33
34
35
/ / Archivo MyClass.m
# Importar "MyClass.h"

@ Aplicación MyClass

id ) init { - (Id) {init
self = [ super init ] ) { if (self = [super init]) {
"Nome preimpostato" ; _name @ = "Nombre del ajuste";
"Cognome preimpostato" ; _cognome @ = "Nombre del ajuste";
}
volver sí mismo;
}

void ) dealloc { - (Void) {dealloc
; [_name Lanzamiento];
; [_cognome Lanzamiento];
; [Super dealloc];
}

NSString * ) nome { - ( NSString *) Nombre {
_name Retorno;
}
void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso
stringaIngresso == @ "" ) stringaIngresso = @ "senza nome" ; if (@ stringaIngresso == "") stringaIngresso @ = "sin nombre";
_name = StringaIngresso;
}

NSString * ) cognome { - ( NSString *) Nombre {
_cognome regresar;
}
void ) setCognome : ( NSString * ) stringaIngresso { - (Void) setCognome: ( NSString *) {stringaIngresso
_cognome = stringaIngresso;
}

@ End

, etc… En el futuro, a continuación podrán ver los detalles sobre las propiedades readonly , retain , etc ... :)

Más información ...

Apple iPhone: Crear un botón de activación personalizado

non funzionano quando un UIButton è impostato in modalità UIButtonTypeCustom ! Los estados UIControlStateSelected o UIControlStateHighlighted no funcionan cuando un UIButton modo se establece UIButtonTypeCustom ! O, mejor dicho, no funcionan (porque reservados para otros tipos de botón), por ejemplo, para crear un botón con dos estados: nota de alternancia. Si hemos creado dos imágenes (stato1.png y stato2.png) para nuestro botón, podemos proceder de la siguiente manera:

1
2
3
/ / El encabezado del archivo que creamos una variable global para usaremo
/ / Activar el cheque era
ToggleFlag BOOL;

Ahora vamos a crear nuestro botón:

1
2
3
4
5
6
7
8
9
/ / Creamos un botón y lo colocamos inicialmente en el estado "stato1.png"
/ / Edición initWithFrame: (CGRect)} {100,100,50,50 con la posición y
/ / Tamaño de la imagen tiene
; toggleFlag = YES;
[ [ UIButton buttonWithType : UIButtonTypeCustom ] initWithFrame : ( CGRect ) { 100 , 100 , 50 , 50 } ] ; UIButton ToggleButton * = [[UIButton buttonWithType: UIButtonTypeCustom] initWithFrame: (CGRect) {100, 100, 50, 50}];
@ "" forState : UIControlStateNormal ] ; [ToggleButton setTitle: @ "" forState: UIControlStateNormal];
[ UIImage imageNamed : @ "stato1.png" ] forState : UIControlStateNormal ] ; [ToggleButton setBackgroundImage: [UIImage imageNamed: @ "stato1.png"] forState: UIControlStateNormal];
self action : @selector ( onToggle : ) forControlEvents : UIControlEventTouchUpInside ] ; [Addtarget ToggleButton: acción de auto: @ selector (onToggle forControlEvents :): UIControlEventTouchUpInside];
toggleButton ] ; [Self.view addSubview: ToggleButton];

Al hacer clic en el botón, se envía un mensaje a gestionar onToggle :

1
2
3
4
5
6
7
void ) onToggle : ( id ) sender { - (Void) onToggle: (id) {emisor
/ / Recuperar puntero a UIButton
( UIButton * ) sender; UIButton buttonClicked * = (UIButton *) del remitente;
/ / Ejecutar el Toogle
toggleFlag = toggleFlag!;
[ UIImage imageNamed : ( toggleFlag ) ? @ "stato1.png" : @ "stato2.png" ] forState : UIControlStateNormal ] ; [ButtonClicked setBackgroundImage: [UIImage imageNamed: (toggleFlag) @ "Stato1.png" @ "stato2.png"] forState: UIControlStateNormal];
}

Más información ...

Fragmento muy corto: reproducir archivos mp3 para el iPhone de Apple

Una alternativa muy fácil de ejecutar una secuencia de un archivo mp3 en el iPhone de Apple podría ser:

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 ...

Fragmento muy breve: un formato de datos de un control de UIDatePicker

El control UIDatePicker es tal vez la presencia del controlador de gráficos más hermoso en el iPhone de Apple. Además de la belleza también es sencillo de usar, extremadamente versátil y se utiliza en muchas situaciones.

Más información ...

Objective-C: NSLog () de C struct

o CGPoint , ad esempio. La sintaxis NSLog(@"%@", ... ); que funciona y se utiliza para obtener información sobre los objetos, pero no funciona en C tipos de datos tales como la estructura CGRect o CGPoint , por ejemplo. o NSStringFromCGPoint : Para aprovechar NSLog(@"%@", ... ); también de tipo C. estructuras que pueden apoyarse en funciones de conversión como NSStringFromCGRect() o NSStringFromCGPoint :

1
2
3
4
5
CGRect ) { 10 , 20 , 30 , 40 } ; CGRect mioRect = (CGRect) {10, 20, 30, 40};
CGPoint ) { 32 , 64 } ; CGPoint mioPoint = (CGPoint) {32, 64};
/ /
"Info rettangolo: %@" , NSStringFromCGRect ( mioRect ) ) ; NSLog (@ "rectángulo de Información:% @", NSStringFromCGRect (mioRect));
"Info point: %@" , NSStringFromCGPoint ( mioPoint ) ) ; NSLog (@ "punto de información:% @", NSStringFromCGPoint (mioPoint));

En concreto, es posible perfeccionar los procedimientos correspondientes macros útiles pequeños, como:

1
# Definir NSLogRect (Rect) NSLog (@ "% s (% 0.0f,% 0.0f) 0.0f% 0.0fx%", # rect, rect.origin.x, rect.origin.y, rect.size.width , rect.size.height)

O bien:

1
2
3
4
# Definir NSLogCGPoint (punto) NSLog (@ "% s (% 0.0f,% 0.0f)", # punto.x punto, Point.y)

CGPoint ) { 32 , 64 } ; CGPoint mioPoint = (CGPoint) {32, 64};
; NSLogCGPoint (mioPoint);

Esto dará como resultado:

1
32 , 64 ) mioPoint: (32, 64)

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 ...

Fragmento muy breve: los números al azar para el iPhone,

Si usted necesita para generar números aleatorios en una aplicación deben dejar de lado el iPhone de Apple Objective-C, ya que no propone ninguna orden de la clase. La solución se propone que el C: rand(), srand(), random(), srandom() e arc4random() .

Más información ...



Deje de SOPA