Guion del blog de curso de Objetive-C para IOS – DIA 9
nota: Esto es no es curso propiamente dicho, es un diario de autoaprendizaje de objetive-c, que me sirve para afianzar conocimientos, y de paso, tener un diario de referencia, con ejemplos propios de uso del lenguaje.
————-
Vamos a ver como se puede utilizar un NSTimer, para realizar diferentes acciones. Por ejemplo, el crear un contador, o el mover un objeto por la pantalla.
Creamos un nuevo proyecto, de tipo single-view, sin usar storyboard, ni ARC.
Creamos un interface como se ve a continuación, con dos imágenes, 3 labels y un Stepper
Creamos todos los outlets de los componentes, y un catión del stepper, para que se actualice el label adecuado cada vez que incrementamos o decrementos su valor.
Teneis como siempre la explicación, en los comentarios de los archivos
Los archivos quedaran así:
//
// ViewController.h
// Diario009
//
// Created by david fraj blesa on 14/06/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController{
//Esto sera una variable de tipo entero, para controlar el tiempo
int contador;
int contador2;
NSTimer *eltimer;
NSTimer *eltimer2;
}
@property (retain, nonatomic) IBOutlet UILabel *lblTiempo;
@property (retain, nonatomic) IBOutlet UILabel *lblTiempo2;
@property (retain, nonatomic) IBOutlet UIImageView *imgBola;
@property (retain, nonatomic) IBOutlet UIImageView *imgBola2;
@property (retain, nonatomic) IBOutlet UIStepper *spMasMenos;
@property (retain, nonatomic) IBOutlet UILabel *lblNumero;
– (IBAction)spMasMenos_valueChanged:(id)sender;
-(void) metodo;
-(void) metodo2;
@end
——————–
——————–
//
// ViewController.m
// Diario009
//
// Created by david fraj blesa on 14/06/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
#import «ViewController.h»
@implementation ViewController
@synthesize lblTiempo;
@synthesize lblTiempo2;
@synthesize imgBola;
@synthesize imgBola2;
@synthesize spMasMenos;
@synthesize lblNumero;
– (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren’t in use.
}
#pragma mark – View lifecycle
– (void)viewDidLoad
{
//Ponemos el contador a 0
contador=0;
contador2=0;
//Inicializamos el timer
//El NSTimer, funciona de tal manera que al reservar memoria para dicho timer
//Tenemos que decirle el intervalo de tiempo, el objetivo o target de
//Dicho timer, el «metodo» que se ejecutara cada vez, y el numero de
//veces que se va a repetir
eltimer=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(metodo) userInfo:nil repeats:YES];
//Creamos un nuevo Timer, pero que se ejecute mas rapido
eltimer2=[NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(metodo2) userInfo:nil repeats:YES];
//Establecemos el valor del contador mas menos a 1
[spMasMenos setValue:1];
lblNumero.text=[NSString stringWithFormat:@»%.0f», spMasMenos.value];
//nota: con @»%.0f», estamos mostrando el float/double con 0 decimales
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
– (IBAction)spMasMenos_valueChanged:(id)sender {
//Cada vez que cambie el valor, actualizamos para saber la velocidad
lblNumero.text=[NSString stringWithFormat:@»%.0f», spMasMenos.value];
}
//Este metodo se ejecutara una vez por segundo, de forma indefinica
-(void) metodo{
//Incrementamos el contador
contador++;
//Actualizamos el estado del label con el contenido del timer
lblTiempo.text=[NSString stringWithFormat:@»%d», contador];
//Vamos a mover la bola
//Para eso, lo unico que hacemos es cambiar el valor de su centro, haciendo
//uso del value que hay en el componente Stepper con el nombre
//spMasMenos. Podria ser una constante como 1, sin ningun problema
imgBola.center=CGPointMake(imgBola.center.x+spMasMenos.value, imgBola.center.y+spMasMenos.value);
}
//Este metodo se ejecutara 100 veces cada segundo, de forma indefinida
-(void) metodo2{
//Incrementamos el contador
contador2++;
//Actualizamos el estado del label con el contenido del timer
lblTiempo2.text=[NSString stringWithFormat:@»%d», contador2];
//Vamos a mover la bola2
imgBola2.center=CGPointMake(imgBola2.center.x+1, imgBola2.center.y+1);
}
– (void)viewDidUnload
{
[self setLblTiempo:nil];
[self setLblTiempo2:nil];
[self setImgBola:nil];
[self setImgBola2:nil];
[self setSpMasMenos:nil];
[self setLblNumero:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
– (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}
– (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}
– (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
}
– (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
}
– (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
– (void)dealloc {
[lblTiempo release];
[lblTiempo2 release];
[imgBola release];
[imgBola2 release];
[spMasMenos release];
[lblNumero release];
[super dealloc];
}
@end