Cursos universitarios gratuitos

Hola amiguetes developers!!

He recibido la notificación de esta tanda de cursos universitarios de origen anglosajon y español que imparten varias universidades, son online y gratuitos, van desde Phyton a desarrollo de app´s android, e incluso OpenGL. Espero que le sirva a más de uno :

Cursos universitarios online gratuitos




http://nr.news-republic.com/Web/ArticleWeb.aspx?regionid=7&articleid=28582572&m=d





Compartir Compartir Compartir Compartir




iOS : Ejercicio 17. Cargar imagen en UIImageView desde internet

Blog >Lista ejercicios >  Ejercicio 17


Hola desarrolladores,vamos con el tutorial de ejercicios completando la parte de multihilos de iOS.




Ejercicio 17: Conectarse a la red y cargar una imagen desde internet

Creamos un proyecto de la forma habitual,create new proyect - single view application. Ahí crearemos en el storyboard 2 objetos con sus correspondientes conexiones : una ImageView y un Button :



Vamos a utilizar una variable de tipo NSData :

NSData es un objeto genérico para empaquetar buffers de datos, se usa para transmitir o guardar datos en estado puro.


Pero antes de eso, vamos a subir una imagen a un servidor para poder utilizarla, yo personalmente y entre otros uso dropbox, es gratuito, así que sino teneis no se que haceis con vuestra vida pero deberiais, se hace muy rapido, te registras y te bajas el cliente desde aquí




Ahora subimos esta imagen o la que elijamos (que friquis somos los informáticos) :




Y una vez la imágen ha sido subida a arriba botón derecho - copiar enlace publico. Bien por la política de dropbox para que sea público tenemos 2 opciones, o moverla a la carpeta que nos crea por defecto dropbox llamada "Public" o cambiamos las tres www por dl de tal manera que nos queda el enlace así :

https://dl.dropbox.com/s/oulaen0jeknx718/img.jpg?dl=0




Volvamos a XCode y en el .m donde la función de acción del botón, creamos el archivo NSData junto a otra variable NSUrl donde esta la url de nuestra imagen :


@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIImageView *Img;
- (IBAction)botonAccionImg:(id)sender;
@end
- (IBAction)botonAccionImg:(id)sender {
    //URL IMAGEN
    NSURL *url= [NSURL URLWithString:@"https://dl.dropbox.com/s/oulaen0jeknx718/image.jpg?dl=0"];
    //NSDATA CON URL
    NSData *dato=[NSData dataWithContentsOfURL:url];
    //LO CARGAMOS EN LA IMAGEN
    [self.Img setImage=[UIImage imageWithData:dato]];
}


Ejecutamos el proyecto y al pulsar el boton de "Cargar Imagen" se carga nuestra imagen perfectamente, sólo que hay una pega, desde que se pulsa el botón, hasta que se carga la imagen, no podemos hacer nada es decir, en este proyecto sólo hay un boton con el que interactuar, pero si hubiera más elementos con los que interactuar, no podríamos tocarlos.

(Podeis probar insertando un tab-bar y pulsando sobre las opciones, ya vereis que no os deja)


Para que esto no ocurra, ya que de cara al usuario no queda bien que mientras se ande cargando algo se quede el teléfono como colgado,ya que tecnicamente no es así, pero da esa impresión, hay que meter este proceso en un hilo, y eso lo hacemos de la siguiente manera :


 @implementation ViewController

- (void)viewDidLoad

{
    [super viewDidLoad];
}

- (IBAction)botonAccionImg:(id)sender {
    //GESTOR DE HILOS (COLA)
    NSOperationQueue *cola=[NSOperationQueue new];
    //OPERACION A LANZAR
    //initwITHtARGET:self (sobre esta clase)
    //selector:metodo a ejecutar en el hilo que estamos creando
    //object: objeto a mandar a ese metodo
    NSInvocationOperation *operacion = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(cargarImagen) object:nil];
    //añadimos la operacion a la cola
    [cola addOperation:operacion];
}

-(void) cargarImagen{
    //URL IMAGEN
    NSURL *url= [NSURL URLWithString:@"https://dl.dropbox.com/s/oulaen0jeknx718/image.jpg?dl=0"];
    //NSDATA CON URL
    NSData *dato=[NSData dataWithContentsOfURL:url];
    //LO CARGAMOS EN UN OBJETO IMAGE
    UIImage *Img = [UIImage imageWithData:dato];
    //Volvemos al hilo principal
    [self.Img performSelectorOnMainThread:@selector(setImage:) withObject:Img waitUntilDone:YES];
}
@end 










Compartir Compartir Compartir Compartir




Thebestandroide Indice Thebestandroide Ejercicio anterior Thebestandroide Siguiente ejercicio

iOS : Ejercicio 16. Multitasking, preparar dispositivo para estado Background

Blog >Lista ejercicios >  Ejercicio 16


Continuando con el tema de multihilo, vamos a ver un ejemplo de cómo preparar una aplicación para que pase a un estado de suspensión :




Ejercicio 16: Multitasking, preparar dispositivo estado suspensión

Creamos un proyecto de la forma habitual, create a new Xcode proyect - Single View Application y una vez creado vamos a indicarle que la aplicación puede llevar ciertas tareas en segundo plano, en Supporting Files - archivo-info.plist




Y en Bundle OS Type code, pulsamos sobre el +, y ahi Required background modes :




Ahí vamos añadiendo elementos en función de las tareas que queramos poner en segundo plano, por ejemplo, escuchar musica y recibir datos via IP :




Una vez configurado esto, vamos a ver si el dispositivo acepta operaciones en background, añadimos un label al storyboard con su correspondiente conexión, y poco más, después añadimos en el archivo .m el código necesario para saber si el dispositivo acepta que las aplicaciones esten en modo "background" (segundo plano) :


.H

@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *milabel;

@end

.M

@implementation ViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
 UIDevice *dispositivo;
    BOOL segundoPlano=NO;
    ///PREGUNTAMOS SI EL DISPOSITIVO SOPORTA SERVICIOS EN SEGUNDO PLANO
    if([dispositivo respondsToSelector:@selector(isMultitaskingSupported)]){
        segundoPlano=dispositivo.multitaskingSupported;
    }
    //PREGUNTAMOS VALOR DE LA VARIABLE Y MOSTRAMOS VALOR EN EL LABEL
    if(segundoPlano){
    
        self.milabel.text=@"Terminal con background";
    }else{
        self.milabel.text=@"Terminal sin background";
    }
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
@end






Este dispositivo da como terminal sin background, porque lo estoy probando en un emulador y no le permite el modo.






Compartir Compartir Compartir Compartir




Thebestandroide Indice Thebestandroide Ejercicio anterior Thebestandroide Siguiente ejercicio

iOS : Ejercicio 15. Multitasking, lanzar hilo segundario

Blog >Lista ejercicios >  Ejercicio 15


Hola amigos, continuamos con el post en el blog Thebestandroide con la programación multihilo en Objetive - C





Ejercicio 15 : Notificación local segundo plano.


En primer lugar vamos a describir los tipos de Notificaciones, ya que es interesante saber que las aplicaciones compatibles con la ejecución en segundo plano pueden recibir notificaciones, se pueden dividir en 2 tipos :

Remotas : Se dan en el servicio de notrificación de Apple, llamado Push. 

Locales : Se programan desde la app para que se activen en segundo plano transcurrido un tiempo determinado.

Bien, en este ejemplo de multitasking, vamos a hacer un ejemplo de las Locales:

Comenzamos creando un proyecto de la forma habitual, new - proyect - single view application,ahi en el ViewController.m configuramos una notificación para que aparezca a los 8 segundos :



@implementation ViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    UILocalNotification *alerta= [[UILocalNotification alloc] init];
    //PARAMETROS CONFIGURACION ALERTA
    alerta.alertBody=@"Notificación";
    alerta.alertAction=@"View";
    //Icono
    alerta.applicationIconBadgeNumber=1;
    //tiempo para que se lance 8segundos
    alerta.fireDate=[NSDate dateWithTimeIntervalSinceNow:8];
    //mostrar alerta
    [[UIApplication sharedApplication] scheduleLocalNotification:alerta];
}

@end


Bien ahora ejecutamos la aplicación y le damos al botón principal para salir o cmd+shift+h, al pasar los 8 segundos aparecerá la notificación sobre el icono de la app





O al bajar la persiana, veremos la notificación que había corrido en segundo plano :







Compartir Compartir Compartir Compartir




Thebestandroide Indice Thebestandroide Ejercicio anterior Thebestandroide Siguiente ejercicio