Nueva aplicacion para iphone sobre el universo de ALIENS

Ya esta terminada y publicada la nueva aplicacion en la que he estado trabajando sobre el Universo de la Saga Aliens. Podeis encontrar toda la información sobre las películas, videojuegos, y proximamente Comics!

Descripción

Aplicacion con una recopilacion de informacion sobre el Universo Aliens, donde podras encontrar:

Argumentos de las peliculas de la saga
Referencia sobre los videojuegos de la saga
Informacion sobre el xenomorfo
Imagenes de la serie
Sonidos del xenomorfo
(30 sonidos originales del xenomorfo!!)

Proximamente… mas contenido del Universo aliens!!

Aqui el enlace de la aplicacion:
Un saludo a todos!!!

Solid Converter PDF – Convierto PDFs a otros formatos

 Aqui os presento un software muy pero que muy util, que sirve para convertir cualquier PDF que tengáis, en otro formato como WORD, TXT, etc, etc.

Aqui os pongo la pagina oficial:

http://www.soliddocuments.com/es/pdf/-to-word-converter/304/1

Mas informacion:

Solid Converter es un conversor de archivos PDF a documentos de word, excel, por lo que podremos modificar dichos documentos (cosa que en los archivos PDF no podemos hacer). Y no es necesario tener instalado Acrobat Reader.

Solid converter tiene varias opciones con las que modificar el estilo de fuente, decidir el estado de los gráficos tras la conversión, el número de páginas a convertir,…
Y no sólo eso, también nos va a permitir crear PDF a partir de un documento Word con un sólo clic y a una calidad óptima.

El programa se añade a laas opciones de word en la barra de herramientas, por lo que no tendremos que tener dos programas abiertos a la vez.
Conversión PDF a Word. Convierta sus archivos PDF a documentos de Microsoft® Word para editarlos fácilmente.

Conversión PDF a Excel. Convierta tablas de sus archivos PDF a hojas de cálculo de Microsoft® Excel. Seleccione páginas o el documento entero.

Extracción de Contenido WYSIWYG. Convierta tablas o seleccionadas de un archivo PDF. Crea archivos de o tablas en Word o Excel.

Conversiones de Calidad. No es necesario gastar horas volviendo a formatear y manipular sus archivos.
Creación PDF. Con sólo arrastrar y soltar. Cree PDFs fácilmente desde sus documentos. Interface de usuario WYSIWYG.

Conversiones en Lote. Ahorre tiempo utilizando paletas de conversión en lote en la interface del usuario o utilizando guiones de la línea de comando.

Reproducir sonidos en nuestras aplicaciones creadas con XCODE para iphone

Esto lo he cogido directamente del blog de Cocoa Mental, donde tienen un monton de informacion sobre diferentes temas de programacion para ios.
Lo pongo aqui por tenerlo a mano.
Su direccion: http://www.cocoaosx.com/2011/06/20/como-reproducir-sonidos-en-ios/

Formatos de Sonido para iPhone e iPad

Con Cocoa-Touch puedes reproducir sonidos en los siguientes formatos:

  1. wav (no comprimido)
  2. mp3 (comprimido)
  3. aiff (comprimido)
  4. caff (no comprimido)
Ogg, a fecha de hoy (Junio 2011) no es uno de ellos. Los formatos preferidos son CAFF (Core Audio File Format) y AIFF (Audio Interchange File Format). Son los que menos recursos consumirán.

¿Qué formato de sonido es más adecuado para iOS?

Para sonidos cortos, como un bip al tocar un botón, el ideal es CAFF. Al no ser comprimido, iOS no tendrá que perder el tiempo descomprimiéndolo y sonará casi instantaneamente. Apple recomienda no usarlo para ficheros de más de 30 segundos de duración.
Para sonidos más largos, es preferible usar el formato AIFF (que logra compresiones de hasta 4:1). iOS lo irá descomprimiendo sobre la marcha, a medida que lo reproduce.

Convertir sonidos al formato adecuado para Cocoa

Si tienes un sonido en mp3 o wav y deseas convertirlo a alguno de estos formatos, la herramienta necesaria viene incluída con el SDK de iPhone. Es una utilidad de linea de comandos llamada afconvert.
Algunos ejemplos del uso de afconvert:

#creates sound.caf (little endian, 16 bit)

afconvert -f caff -d LEI16 sound.wav
# creates sound.caf (little endian, 16 bit, 22kHz)
afconvert -f caff -d LEI16@22050 sound.wav
# creates sound.caf (little endian, 16 bit, MONO)
afconvert -f caff -d LEI16 -c 1 sound.wav
# creates sound.aifc (IMA4 compression)
afconvert -f AIFC -d ima4 sound.wav
# creates sound.aifc (IMA4 compression, MONO)
afconvert -f AIFC -d ima4 -c 1 sound.wav

Reproducir un sonido corto en iOS

Lo primero es añadir la siguiente framework a tu proyecto: AudioToolbox. Luego tienes que #import <AudioToolbox/AudioServices.h>

Crear un SystemSoundID para tu sonido

(void)viewDidLoad
{
    [superviewDidLoad];
    NSString *path = [[NSBundlemainBundle] pathForResource:@«btn»ofType:@«caf»];
    NSURL *url = [NSURLfileURLWithPath:path isDirectory:NO];
    SystemSoundID id;
    OSStatus res = AudioServicesCreateSystemSoundID((CFURLRef)url, &amp;id);
    if (res == kAudioServicesNoError) {
        self.btnClickId = id;
}

}

Reproducir el sonido

-(IBAction) playClic: (id) sender{

    AudioServicesPlaySystemSound(self.btnClickId);
}

Recuerda que luego habrá que llamar a AudioServicesDisposeSystemSoundID() para liberar recursos.

Reproducir un sonido largo en iOS

Lo primero es añadir las siguientes frameworks a tu proyecto:

  • AVFoundation
  • MediaPlayer
luego haz un #import <AVFoundation/AVAudioPlayer.h>
(IBAction) playLongSound: (id) sender{
    NSString *filePath = [[NSBundlemainBundle] pathForResource:@«beach_waves»ofType:@«aifc»];
    NSError *err = nil;
    NSData *soundData = [[NSDataalloc] initWithContentsOfFile:filePath options:NSDataReadingMappederror:&amp;err];
    AVAudioPlayer *p = [[AVAudioPlayeralloc] initWithData:soundData error:&amp;err];
    self.player = p;
    self.player.numberOfLoops = 1;
    [self.playerplay];}
Todos estos ejemplos suponen que los archivos de sonido han sido previamente añadidos a tu proyecto.

Donde obtener sonidos

Un excelente lugar para buscar sonidos bajo licencia Creative Commons es Freesound.

Gracias al blog de Cocoa Mental. Vuelvo a poner su direccion:

 http://www.cocoaosx.com/2011/06/20/como-reproducir-sonidos-en-ios/

Un saludo!!!

añadir un framework en xcode 4

Vamos a hacer una entrada sencilla, para ver o recordar como añadir un framework a nuestro proyecto en XCODE 4

Mejor una imagen que mil palabras!!!:

  1. En el navegador de proyecto (“project navigator”), selecciona tu proyecto.
  2. Selecciona el objetivo (“target”)
  3. Selecciona la pestaña “Build Phases”.
  4. Abre la sección “Link binaries with libraries”
  5. Haz clic en el botón “+”
  6. Selecciona tu framework
  7. Arrastra la framework  que acaba de añadirse a tu proyecto al grupo de “Frameworks” (opcional).

Un saludo!!!

Diseña tus presentaciones con PREZI!

Aqui os propongo una nueva herramienta online, para crear presentaciones espectaculares, con muy poquitos pasos. Se trata de prezi.

Se trata de una herramienta, que permite crear presentaciones como el powerpoint, pero con un resultado mucho mas vistoso e innovador.

Os pongo una serie de enlaces para que podais informaros de todo.

Direccion web de prezi.

En esta pagina oficial, puedes CREAR una cuenta, o APRENDER con unos sencillos videos, o EXPLORAR otras presentaciones de otros usuarios.

Pagina web con una pequeña introduccion a prezi

Un saludo!!

Primeros pasos con PhoneGap para Android

Esta entrada es para recordarme a mi mismo, como empezar a hacer cosillas con PhoneGap para Android. El tutorial lo he cogido de esta pagina web, y luego lo publicare en Castellano:

http://docs.phonegap.com/en/2.0.0/guide_getting-started_android_index.md.html#Getting%20Started%20with%20Android

Getting Started with Android

This guide describes how to set up your development environment for Cordova and run a sample application. Note that Cordova used to be called PhoneGap, so some of the sites still use the old PhoneGap name.

1. Requirements

  • Eclipse 3.4+

2. Install SDK + Cordova

3. Setup New Project

  • Launch Eclipse, and select menu item New Project
  • Then specify new application project
  • Then speciy an Application Name, a Project Name and Package Name with Namespace
  • Then select a graphic
  • Then Create a Blank Activity
  • Make sure the activity doesn’t inherit from anything. You most likely won’t have PhoneGap on your Eclipse Workspace. Once this is done, click finish
  • In the root directory of your project, create two new directories:
    • /libs
    • assets/www
  • Copy cordova-2.0.0.js from your Cordova download earlier to assets/www
  • Copy cordova-2.0.0.jar from your Cordova download earlier to /libs
  • Copy xml folder from your Cordova download earlier to /res
  • Verify that cordova-2.0.0.jar is listed in the Build Path for your project. Right click on the /libs folder and go to Build Paths/ > Configure Build Path…. Then, in the Libraries tab, add cordova-2.0.0.jar to the project. If Eclipse is being temperamental, you might need to refresh (F5) the project once again.
  • Edit your project’s main Java file found in the src folder in Eclipse:
    • Add import org.apache.cordova.*;
    • Change the class’s extend from Activity to DroidGap
    • Replace the setContentView() line with super.loadUrl(«file:///android_asset/www/index.html»);

  • Right click on AndroidManifest.xml and select Open With > Text Editor
  • Paste the following permissions between the <uses-sdk…/> and <application…/> tags.
    <supports-screens 
       
    android:largeScreens="true"
       
    android:normalScreens="true"
       
    android:smallScreens="true"
       
    android:resizeable="true"
       
    android:anyDensity="true" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.BROADCAST_STICKY" />

    *Note You are adding a blanket list of permissions to your application. You should remove permissions you aren’t using before submitting your application to Google Play.

  • Support orientation changes by pasting the following inside the <activity> tag.
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
  • Your AndroidManifest.xml file should look like

4. Hello World

  • Create and open a new file named index.html in the assets/www directory. Paste the following code:
    <!DOCTYPE HTML>
    <html>
    <head>
    <title>Cordova</title>
    <script type="text/javascript" charset="utf-8" src="cordova-2.0.0.js"></script>
    </head>
    <body>
    <h1>Hello World</h1>
    </body>
    </html>

5A. Deploy to Simulator

  • Right click the project and go to Run As > Android Application
  • Eclipse will ask you to select an appropriate AVD. If there isn’t one, then you’ll need to create it.

5B. Deploy to Device

  • Make sure USB debugging is enabled on your device and plug it into your system. (Settings > Applications > Development)
  • Right click the project and go to Run As > Android Application

Done!

Infografia con las medidas adecuadas de las imagenes de tus paginas de Facebook

Aqui os pongo informacion, sobre las dimensiones que deberian tener las imagenes que ponemos en nuestras paginas de facebook, para que no se distorsionen. Os pongo una infografia.

  • Cover photo (o “portada”): 851×315 px
  • Profile picture (o “imagen de perfil”): 180×180 px
  • App image (o “imagen de aplicaciones”): 111×74 px
  • Thumbnail (o “miniatura”): 32×32 px
  • Images within wall posts (o “imágenes del muro”): 404×404 px
  • Highlighted and milestone images (o “imágenes destacadas”: 843×403 px

Un saludo a todos!

Aprendiendo Objetive-C para IOS (Dia 27)

Guion del blog de curso de Objetive-C para IOS – DIA 27
—————————————————————————–
Después de unos dias… volvemos a la carga con XCODE!!!
Vamos a ver esta vez, como crearnos una nueva vista, usando un scrollview, y metiendo una imagen, pero esta vez, queremos poder hacer zoom a la imagen, asi como arrastrar el dedo por la pantalla, y cambiar la ubicacion del archivo de imagen.

Voy a usar un mapa grande de la serie «Juego de Tronos», que quiero utilizar proximamente en una aplicacion que tengo creada, y que estoy trabajando para actualizarla.
Creamos pues un nuevo proyecto de tipo single view como siempre, y creamos en la vista un UIScrollView
A continuacion, creamos una nueva clase, que sera una subclass de UIViewController, y la llamamos imagenViewController.
Por ultimo, vamos a las propiedades en el storyboard de nuestra vista, y le decimos que la clase es la de nuestro imagenViewController.
Hacemos el outlet de nuestro scrollView, y lo llamamos directamente scrollView
Importamos ahora la imagen del mapa, arrastrando el archivo de imagen a nuestro xcode. La llamaremos image1.jpg
Hasta aqui, solo hemos preparado nuestro proyecto. Vamos ahora con la programacion.
Hay que tener en cuenta, que tengo que arreglarmelas para que la imagen responda ante diferentes gestos del usuario, ya que queremos poder hacer zoom, o poder desplazar la imagen de un lado a otro.
Para eso, me creo una nueva clase que sera una subclase de UIImageView, a la que le daremos las diferentes caracteristicas para que responda ante los TAP del usuario. He usado un codigo de Apple, que esta en su pagina web, y lo he modificado un poquito para nuestros propositos. La clase se llamara TapDetectingImageView
Veamos como quedan los archivos de dicha clase (Fijaos en la explicacion de los comentarios
————-
TapDetectingImageView.h:
————————
@protocol TapDetectingImageViewDelegate;
@interface TapDetectingImageView : UIImageView {
    
    // Variables que agregamos a nuestra clase, para poder detectar los posibles toques.
    CGPoint tapLocation;         // Necesarios para guardar las cordenadas cuando se le da un toque a la pantalla
    BOOL multipleTouches;        // estara puesto a YES, si se le da mas de un toque
    BOOL twoFingerTapIsPossible; // Estara establecido a NO cuando se puedan usar dos toques.
    
}
@property (nonatomic, weak) id <TapDetectingImageViewDelegate> delegate;
@end
/*
 Vamos a definir ahora el protocolo necesario para que la aplicacion responda antes los toques del usuario.
 Implementaremos varios metodos, segun sea nuestro caso.
 */
@protocol TapDetectingImageViewDelegate <NSObject>
@optional
//En el caso de un simple toque
– (void)tapDetectingImageView:(TapDetectingImageView *)view gotSingleTapAtPoint:(CGPoint)tapPoint;
//En el caso de dos toques
– (void)tapDetectingImageView:(TapDetectingImageView *)view gotDoubleTapAtPoint:(CGPoint)tapPoint;
//En el caso de pellizcar la pantalla
– (void)tapDetectingImageView:(TapDetectingImageView *)view gotTwoFingerTapAtPoint:(CGPoint)tapPoint;
@end
————-
TapDetectingImageView.m:
————————
#import «TapDetectingImageView.h»
@implementation TapDetectingImageView
@synthesize delegate;
– (id)initWithImage:(UIImage *)image {
    self = [super initWithImage:image];
    if (self) {
        [self setUserInteractionEnabled:YES];
        
        UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
        UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
        UITapGestureRecognizer *twoFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTwoFingerTap:)];
        
        [doubleTap setNumberOfTapsRequired:2];
        [twoFingerTap setNumberOfTouchesRequired:2];
        
        [self addGestureRecognizer:singleTap];
        [self addGestureRecognizer:doubleTap];
        [self addGestureRecognizer:twoFingerTap];
        
        //SI USAMOS ARC, tenemos que tapar estar lineas, sino las DESTAPAMOS
        //[singleTap release];
        //[doubleTap release];
        //[twoFingerTap release];
    }
    return self;
}
#pragma mark Private
– (void)handleSingleTap:(UIGestureRecognizer *)gestureRecognizer {
    if ([delegate respondsToSelector:@selector(tapDetectingImageView:gotSingleTapAtPoint:)])
        [delegate tapDetectingImageView:self gotSingleTapAtPoint:[gestureRecognizer locationInView:self]];
}
– (void)handleDoubleTap:(UIGestureRecognizer *)gestureRecognizer {
    if ([delegate respondsToSelector:@selector(tapDetectingImageView:gotDoubleTapAtPoint:)])
        [delegate tapDetectingImageView:self gotDoubleTapAtPoint:[gestureRecognizer locationInView:self]];
}
    
– (void)handleTwoFingerTap:(UIGestureRecognizer *)gestureRecognizer {
    if ([delegate respondsToSelector:@selector(tapDetectingImageView:gotTwoFingerTapAtPoint:)])
        [delegate tapDetectingImageView:self gotTwoFingerTapAtPoint:[gestureRecognizer locationInView:self]];
}
    
@end
————-
Ya tenemos creado el archivo necesario para realizar la deteccion de los toques. Vamos ahora con nuestro archivo principal, llamado imageViewController.
————-
//
//  imagenViewController.h
//  Diario027
//
//  Created by david fraj blesa on 06/07/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
#import <UIKit/UIKit.h>
//Vemos que establecemos el protocolo UIScrollViewDelegate en la definicion, asi nos obligamos a implementar sus metodos si fuera necesarios
@interface imagenViewController : UIViewController<UIScrollViewDelegate>
//Conectamos el scrollview (Lo hemos realizado directamente, arrastrando con el raton hasta aqui)
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
//Creamos una variable de imagen
@property (retain, nonatomicUIImageView *image;
//Establecemos el metodo que cambiara el tamaño. Acordaos que esto es solo la definicion
– (CGRect)zoomRectForScale:(float)scale withCenter:(CGPoint)center ;
@end
————-
//
//  imagenViewController.m
//  Diario027
//
//  Created by david fraj blesa on 06/07/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
#import «imagenViewController.h»
//Debemos importar el archivo TapDetectingImageView.h, para poder usar los gestos
#import «TapDetectingImageView.h»  
//Definimos una CONSTANTE, para cambiar la velocidad del ZOOM
#define ZOOM_STEP 1.5
@implementation imagenViewController
//Hacemos el synthesize de scrollView(Nuestro scroll) y de image(nuestra imagen), para tener asi los getter y los setters.
@synthesize scrollView;
@synthesize image;
– (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}
– (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn’t have a superview.
    [super didReceiveMemoryWarning];
    
    // Release any cached data, images, etc that aren’t in use.
}
#pragma mark – View lifecycle
/*
// Implement loadView to create a view hierarchy programmatically, without using a nib.
– (void)loadView
{
}
*/
/*
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
– (void)viewDidLoad
{
    [super viewDidLoad];
}
*/
– (void)viewDidUnload
{
    //Cuando la vista de descargue, establecemos esto a nil
    [self setScrollView:nil];
    [self setImage:nil];
    
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}
– (void)viewDidLoad {  
    [super viewDidLoad];  
    
    //Cuando carguemos la VIEW, establecemos diferentes parametros de scrollView
    scrollView.bouncesZoom = YES;  
    scrollView.delegate = self;  
    scrollView.clipsToBounds = YES;  
    
    //Creamos la imagen, y le asignamos el mapa.
    image = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@»image1.jpg»]];  
    image.userInteractionEnabled = YES;  
    image.autoresizingMask = ( UIViewAutoresizingFlexibleWidth );  
    
    //Añadimos dicha imagen a nuestro scrollView
    [scrollView addSubview:image];  
    
    //Establecemos el tamaño del contenido
    scrollView.contentSize = [image frame].size;  
    
    // añadimos el reconocedor de gestos a la imagen
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];  
    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];  
    UITapGestureRecognizer *twoFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTwoFingerTap:)];  
    
    [doubleTap setNumberOfTapsRequired:2];  
    [twoFingerTap setNumberOfTouchesRequired:2];  
    
    [image addGestureRecognizer:singleTap];  
    [image addGestureRecognizer:doubleTap];  
    [image addGestureRecognizer:twoFingerTap];  
    
    //Si estamos usando ARC, tenemos que tener esto tapado, tal como esta aqui
    //[singleTap release];  
    //[doubleTap release];  
    //[twoFingerTap release];  
    
    // Calculamos la escala minima, para fijar la anchura de la imagen, y empezar a escalarla  
     float minimumScale=[scrollView frame].size.width/[image frame].size.width;
     
    //imageScrollView.maximumZoomScale = 1.0;  
    scrollView.minimumZoomScale = minimumScale;  
    scrollView.zoomScale = minimumScale;  
}  
– (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {  
    // Le ponemos return YES, para que soporte el cambio de orientacion 
    return YES;  
}  
#pragma mark UIScrollViewDelegate methods  
– (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {  
    return image;  
}  
#pragma mark TapDetectingImageViewDelegate methods  
//Que pasa si slo le damos una vez
– (void)handleSingleTap:(UIGestureRecognizer *)gestureRecognizer {  
    // al darle solo una vez, no hacemos nada.  
}  
//Que pasa si le damos dos veces
– (void)handleDoubleTap:(UIGestureRecognizer *)gestureRecognizer {  
    // Hacemos zoom
    float newScale = [scrollView zoomScale] * ZOOM_STEP;  
    CGRect zoomRect = [self zoomRectForScale:newScale withCenter:[gestureRecognizer locationInView:gestureRecognizer.view]];  
    [scrollView zoomToRect:zoomRect animated:YES];  
}  
//Que pasa si pellizcamos
– (void)handleTwoFingerTap:(UIGestureRecognizer *)gestureRecognizer {  
    // Al pellizcar la pantalla 
    float newScale = [scrollView zoomScale] / ZOOM_STEP;  
    CGRect zoomRect = [self zoomRectForScale:newScale withCenter:[gestureRecognizer locationInView:gestureRecognizer.view]];  
    [scrollView zoomToRect:zoomRect animated:YES];  
}  
#pragma mark Utility methods  
//Metodo para reescalar
– (CGRect)zoomRectForScale:(float)scale withCenter:(CGPoint)center {  
    
    CGRect zoomRect;  
    
    //Como estamos recibiendo la nueva escala, la usamos para establecer el nuevo rectangulo, que hara el papel de zoom
    zoomRect.size.height = [scrollView frame].size.height / scale;  
    zoomRect.size.width  = [scrollView frame].size.width  / scale;  
    
    // Elegimos el origen correcto, que sera el centro de la pantalla 
    zoomRect.origin.x    = center.x – (zoomRect.size.width  / 2.0);  
    zoomRect.origin.y    = center.y – (zoomRect.size.height / 2.0);  
    
    return zoomRect;  
}  
@end
————-
He comentado todo el codigo para explicar lo que se hace en cada apartado.
Parte del codigo lo he recogido de esta pagina web
Lo malo que en esta web, esta todo en Ingles, y esta programado para la version anterior de XCODE, asi que he tenido que retocarlo un poco, para poder usar asi el ARC
Un saludo a todos!!
————-
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.
————-

iphone de imitacion

Ayer tuve la oportunidad de probar un iphone de imitacion (de estos llamados iphone chinos), y os recomiendo que NO compreis uno por muy barato que sea. Si no enciendes el movil, y lo pones junto a un iphone de verdad, podrias pensar que es el mismo movil. En cuanto lo coges, empiezas a notar cosas raras, como la calidad de los botones, o el interruptor de silenciar, que no da la calidad adecuada.

Una vez que enciendes el telefono movil, la pantalla tactil notas que es horrible. Tienes que «arrastrar» el dedo para pasar de pantalla. Eso si, han imitado casi a la perfeccion el aspecto de las aplicaciones, pero no os engañeis, solo el aspecto. Si te metes en una aplicacion, la calidad de la misma deja mucho que desear.

En el navegador web, solo consegui meterme en google en chino, y aunque me metia en google.es, los resultados seguian saliendo en chino.

Por supuesto que NO se puede acceder al appstore oficial, ni a itunes, con lo que no tienes ninguna caracteristica que te ofrece apple.

Las aplicaciones eran en formato jar (Formato de JAVA que utilizaban los moviles de hace unos 8 años, como el N70), con lo que solo pueden funcionar aplicaciones de tipo MIDDLET (Ovidaos de Whatsup, angrybird, tomtom, ….. es decir…. olvidaos de cualquier aplicacion en este movil).

Que hacer con este movil pues???? Pues como mucho, se puede emplear para hacer fotos (2mpx si llega), o escuchar musica, o navegar por internet (supongo que alguna forma habra de cambiar el google chino), pero poco mas. Es un movil creado para engañar a la gente a primera vista. Que no os engañen!!!!

Un saludo.