viernes, 29 de mayo de 2015

UIView BeginAnimation, Animar una imagen CGAffineTransformMakeScale. UIView BeginAnimation, animate a CGAffineTransformMakeScale image.


- (void) viewDidLoad
{
    [super viewDidLoad];
    
    UIImage *imagenAnima = [UIImage imageNamed:@"imagen.png"];
    
    self.imageView = [[UIImageView allocinitWithImage:imagenAnima];
    [self.imageView setFrame:CGRectMake(0.0f,0.0f,50.0f,50.0f)];
    [self.view addSubview:self.imageView];
}


- (void) viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self iniciarAnimacion];
}

- (void) iniciarAnimacion
{
  
  [UIView beginAnimations:@"moverImagen"  context:(__bridge void *)self.imageView];
  
  [UIView setAnimationDuration:4.0f];
  [UIView setAnimationDelegate:self];
  [UIView setAnimationDidStopSelector: @selector(imageViewDidStop:finished:context:)];
  
  [self.imageView setCenter:self.view.center];
  [self.imageView setTransform:CGAffineTransformMakeScale(5.0f, 5.0f)];
  
  [UIView commitAnimations];
  
}

- (void)imageViewDidStop:(NSString *)paramAnimationID
                finished:(NSNumber *)paramFinished  context:(void *)paramContext{
    
    UIImageView *contextImageView = (__bridge UIImageView *)paramContext;
    NSLog(@"Información de la imágen %@", contextImageView);
    

}

jueves, 28 de mayo de 2015

NSMutableAttributedString Aplicar subrayado a las palabras de un texto. Apply NSMutableAttributedString underlined the words of a text.

    // Texto completo del documento
    NSString *textoDelDocumento = @"Los vehículos como el camión corresponden a una evolución del coche y en un paso intermedio la furgoneta.";
   
    // Palabras a las que queremos aplicar el subrayado
    NSArray *palabras = [[NSArray alloc] initWithObjects:@"camión",@"coche",@"furgoneta", nil];
    // Iniciamos NSMutableAttributedString con el texto del documento
    NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:textoDelDocumento];
    
    // APLICAMOS EL SUBRAYADO A LAS PALABRAS QUE QUEREMOS DESTACAR
    for (NSString *palabra in palabras) {
      NSRange range = [textoDelDocumento rangeOfString:palabra];
      [attrString addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:NSUnderlineStyleSingle] range:range];
    }

    [attrString addAttribute:NSBackgroundColorAttributeName  value:[UIColor cyanColorrange:NSMakeRange(0, [attrString length])];
    
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 20, 300, 80)];
    [label setAttributedText:attrString];
    [label setNumberOfLines:0];
    [label sizeToFit];

    [[self view] addSubview:label];

miércoles, 27 de mayo de 2015

Modificar la altura del Header y Footer del UITableView. Modify Header and Footer height of UITableView.


// @property (nonatomic, strong) UITableView *tableViewHeaderModif;


// ALTURA Y CONTENIDO DEL HEADER DE LA TABLA

- (CGFloat)   tableView:(UITableView *)tableView  heightForHeaderInSection:(NSInteger)section{
  
  CGFloat alturaHeader = 0.0f;
  
  if ([tableView isEqual:self.tableViewHeaderModif] && section == 0){
    alturaHeader = 40.0f;
  }
  
  return alturaHeader;
  
}

- (UIView *)  tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
    
    UILabel *viewHeader = nil;
    
    if ([tableView isEqual:self.tableViewHeaderModif] &&  section == 0){
        
        viewHeader = [[UILabel alloc] initWithFrame:CGRectZero];
        viewHeader.text = @"viewForHeaderInSection  Header";
        viewHeader.backgroundColor = [UIColor cyanColor];
        [viewHeader sizeToFit];
        
    }
    
    return viewHeader;
    
}

// ALTURA Y CONTENIDO DEL FOOTER DE LA TABLA

- (CGFloat)   tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
  
  CGFloat alturaFooter = 0.0f;
  
  if ([tableView isEqual:self.tableViewHeaderModif] && section == 0){
    alturaFooter = 20.0f;
  }
  
  return alturaFooter;
  
}


- (UIView *)  tableView:(UITableView *)tableView  viewForFooterInSection:(NSInteger)section{
  
  UILabel *viewFooter = nil;
  
  if ([tableView isEqual:self.tableViewHeaderModif] && section == 0){
      
    viewFooter = [[UILabel alloc] initWithFrame:CGRectZero];
    viewFooter.text = @"viewForFooterInSection PIE";
    viewFooter.backgroundColor = [UIColor yellowColor];
    [viewFooter sizeToFit];
      
  }
  
  return viewFooter;
  

}

Shake en el dispositivo, cuanto ha durado. Shake for how long time.

/*
@property (nonatomic) int inicio;
@property (nonatomic) int final;
@property (nonatomic) int duracion;
*/

@synthesize duracion = _duracion;
@synthesize inicio = _inicio;
@synthesize final = _final;


/*
 motion es de tipo UIEventSubtypeMotionShake
 event es de tipo UIMotionEvent
 */

- (void) motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
{

  NSLog(@"Detectado Shake en el dispositivo");

    _inicio = [NSDate timeIntervalSinceReferenceDate];
  
  // Simulo que el Shake se produce durante 2 segundos
  sleep(2);

}

// Fin motion

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    
    if ( event.subtype == UIEventSubtypeMotionShake ) {
        
        NSLog(@"Finalizado Shake en el dispositivo");
        
        _final = [NSDate timeIntervalSinceReferenceDate];
        _duracion = _final - _inicio;

      
        NSLog(@"%i", _duracion);
        
    }
    
    if ([super respondsToSelector:@selector(motionEnded:withEvent:)]) {
        [super motionEnded:motion withEvent:event];
    }
    

}

martes, 26 de mayo de 2015

UIDatePicker limitar fecha mínima y máxima. UIDatePicker limit minimum and maximum date.

@property (nonatomic, strong) UIDatePicker *temporizador;

#define DIAS_DEL_ANYO 365
#define HORAS_DEL_DIA 24
#define MINUTOS_POR_HORA 60
#define SEGUNDOS_POR_MINUTO 60
#define UN_ANYO  DIAS_DEL_ANYO * HORAS_DEL_DIA * MINUTOS_POR_HORA * SEGUNDOS_POR_MINUTO;

- (void)viewDidLoad{

  [super viewDidLoad];

  self.temporizador = [[UIDatePicker alloc] init];
  self.temporizador.datePickerMode = UIDatePickerModeDate;
    
  [self.view addSubview:self.temporizador];
  
  // intervalo
  NSTimeInterval intervaloAnyo = UN_ANYO;
    
  NSDate *fechaActual = [NSDate date];
  NSDate *fechaLimite = [fechaActual dateByAddingTimeInterval:intervaloAnyo];

 // Permite seleccionar una fecha con una año de márgen a
 //  partir de la fecha actual.

  self.temporizador.minimumDate = fechaActual;
  self.temporizador.maximumDate = fechaLimite;


}

lunes, 25 de mayo de 2015

Cambiar Tamaño texto en el contenido del HTML en un UIWebView. Change text size HTML content in UIWebView.


// Depende si es iPhone o iPad retorno el tamaño a aplicar a la fuente
#define TAMANYO_FUENTE_DISPOSITIVO() (UI_USER_INTERFACE_IDIOM() == 0) ? @"10" : @"20"


@property (strong, nonatomic) IBOutlet UIWebView *webViewPdf;



- (void) viewDidAppear:(BOOL)animated
{
    
    self.webViewPdf.scrollView.showsVerticalScrollIndicator = NO;
    
    NSURL *targetURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:_nomFichero ofType:@"html"]];
    NSString *contenidoHTML = [NSString stringWithContentsOfFile:targetURL.path encoding:NSUTF8StringEncoding error:NULL];

// Estilo aplicado a los párrafos, TAMANYO_FUENTE_TAG_P
// En el HMTL tenemos
// p {font-size:TAMANYO_FUENTE_TAG_Ppt; font-family: "Helvetica"; color: black;}


// Sustituir TAMANYO_FUENTE_TAG_P por 10 o 20 según dispositivo

    NSString *modificadoContenidoHTML = [contenidoHTML stringByReplacingOccurrencesOfString:@"TAMANYO_FUENTE_TAG_P" withString:TAMANYO_FUENTE_DISPOSITIVO()];
    
    [self.webViewPdf loadHTMLString:modificadoContenidoHTML baseURL:nil];
    

}

sábado, 23 de mayo de 2015

NSSet inicializar y recorrer valores. NSSet initialize and explore values.

// tipos de transporte
NSString *avion = @"avión";
NSString *coche = @"coche";
NSString *barco = @"barco";
NSString *metro = @"metro";
    
// creamos un set y no queremos elementos repetidos
// añadimos dos coches pero NSSet se asegura que no
// incluir dos instancias repetidas
NSSet *conjuntoTransportes = [[NSSet alloc] initWithObjects:
                     avion, coche, barco,
                     coche, metro, nil];

[conjuntoTransportes enumerateObjectsUsingBlock:^(__strong id transporte, BOOL *detener) {
  
  if ([transporte isKindOfClass:[NSString class]]){
      
    NSString *string = (NSString *)transporte;
      
    if ([string isEqualToString:@"coche"]){
      NSLog(@"Encontrado  %@ ", string);
      *detener = YES;
        
    }
      
  }
  
}];

  

viernes, 22 de mayo de 2015

NSArray Inicializar y recorrer valores. Initialize NSArray and read values.

// Puede contener diferentes tipos
// podemos guardar como si fuera una clase con propiedades
// en este caso nombre ciudad, latitud y longitud
NSArray *miciudad = @[@"NOMBRE CIUDAD", @4.1343, @1.2223];

// Recorro el contenido
for (NSInteger pos = 0; pos < [miciudad count]; pos++){
    
    id object = miciudad[pos];
    NSLog(@"Contenido:  %@", object);
    

}

Dibujar Figuras en UIView (drawRect). Draw Figures in UIView (drawRect).

/* UIView tiene que ser asignada a una UIViewController */

#import <UIKit/UIKit.h>

@interface AsignaaViewControllerView : UIView

@end


/* implemtación */

#import "AsignaaViewControllerView.h"

@implementation AsignaaViewControllerView

- (id)initWithFrame:(CGRect)frame{
    
  self = [super initWithFrame:frame];
  if (self) {
      // definir si procede
  }
  return self;
}

- (void)drawRect:(CGRect)rect{
  

  CGMutablePathRef mutablePathRef = CGPathCreateMutable();
  
  // RECTÁNGULOS
  CGRect rectanguloUnoAdibujar = CGRectMake(10.0f, 10.0f, 100.0f, 250.0f);
  CGRect rectanguloDosAdibujar = CGRectMake(50.0f, 120.0f, 70.0f, 180.0f);
  
  // ARRAY DE RECTÁNGULOS
  CGRect rectangulosAdibujar[2] = { rectanguloUnoAdibujar, rectanguloDosAdibujar };
  
  // RECTÁNGULOS EN mutablePathRef
  CGPathAddRects(mutablePathRef, NULL, (const CGRect *)&rectangulosAdibujar, 2);
  
  // CONTEXTO ACTUAL
  CGContextRef contextRef = UIGraphicsGetCurrentContext();
  CGContextAddPath(contextRef, mutablePathRef);
  
  // ATRIBUTOS
  [[UIColor colorWithRed:0.60f green:0.40f  blue:0.70f alpha:0.8f] setFill];
  [[UIColor blackColor] setStroke];
    
  CGContextSetLineWidth(contextRef,  6.0f);
  CGContextDrawPath(contextRef,  kCGPathFillStroke);

  CGPathRelease(mutablePathRef);
  

}

jueves, 21 de mayo de 2015

Escribir texto en UIView (drawRect). Write NSString at UIView (drawRect).

/* UIView tiene que ser asignada a una UIViewController */

#import <UIKit/UIKit.h>

@interface AsignaaViewControllerView : UIView

@end


/* implemtación */

#import "AsignaaViewControllerView.h"

@implementation AsignaaViewControllerView

- (id)initWithFrame:(CGRect)frame{
    
  self = [super initWithFrame:frame];
  if (self) {
      // definir si procede
  }
  return self;
}

- (void)drawRect:(CGRect)rect{
    
  // Estableces la fuente a aplicar
  UIFont *fuenteTexto =  [UIFont fontWithName:@"HelveticaNeue" size:14.0f];
  // Establecemos el texto
  NSString *cadena = @"Dibuja texto en UIView - drawRect";
  
  // Pintamos el texto en el contexto según la fuente definida en la posición 20, 200
  [cadena drawAtPoint:CGPointMake(20, 200)  withFont:fuenteTexto];
  

}

miércoles, 20 de mayo de 2015

Obtener el contenido de un NSDictionary. Get the contents of a NSDictionary.

    NSDictionary *traductorNumeros = @{
            @"uno" : @1,
            @"dos" : @2,
            @"cien" : @100,
            @"mil" : @1000
    };
    
    for (id keyValue in [traductorNumeros allKeys]){
    
        id numeroValue = [traductorNumeros objectForKey:keyValue];
        NSLog(@"keyValue: %@, Numero del key: %@", keyValue, numeroValue);
        

    }

Modificar el LeftView en un UITextField. Modify LeftView at UITextField.

 UITextField *tfImporte = [[UITextField allocinitWithFrame:CGRectMake(10.0f, 10.0f,  300.0f,  40.0f)];
    
 tfImporte.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
 tfImporte.keyboardType = UIKeyboardTypeDecimalPad;
 tfImporte.borderStyle = UITextBorderStyleRoundedRect;
 tfImporte.textAlignment = UITextAlignmentLeft;
    
 tfImporte.placeholder = @"Introducir importe en euros.";

  
 UILabel *simboloMoneda = [[UILabel alloc] initWithFrame:CGRectZero];
 simboloMoneda.text = @"€";
 simboloMoneda.font = self.myTextField.font;
 [simboloMoneda sizeToFit];
    
  tfImporte.leftView = simboloMoneda;
    
  tfImporte.leftViewMode = UITextFieldViewModeAlways;
  

  [self.view addSubview:tfImporte];


 // ***********************************************************************************
 // TAMBIÉN  LE PODEMOS ASIGNAR UNA IMAGEN
 // A obtenemos el recurso de NSBundle App
 // para asignar una imagen a LeftView del UITextField

 tfImporte.placeholder = @"Introducir importe en euros.";

 NSString *imagenRecurso =  [[NSBundle mainBundle] pathForResource:@"Icon-60" ofType:@"png"];
 NSData *dataImgRecurso = [[NSData alloc] init];
 dataImgRecurso = [[NSData alloc] initWithContentsOfFile:imagenRecurso options:NSMappedRead  error:nil];
 UIImage *imagen = [[UIImage alloc] initWithData:dataImgRecurso];
    
 // A LeftView le podemos asignar una imagen
 UIImageView *contenedor = [[UIImageView alloc] initWithImage:imagen];
 contenedor.frame = CGRectMake(0.0f, 0.0f,  30.0f,  30.0f);
 tfImporte.leftView = contenedor;
    
 tfImporte.leftViewMode = UITextFieldViewModeAlways;
  

 [self.view addSubview:tfImporte];

martes, 19 de mayo de 2015

Cargar un recurso del NSBundle de la App. Load Resources NSBundle.

  NSString *imagenRecurso =  [[NSBundle mainBundle] pathForResource:@"imagen" ofType:@"png"];
  NSData *dataImgRecurso = [[NSData alloc] init];
    
  if ([imagenRecurso length] > 0){
    
    NSError *error = nil;
    
    dataImgRecurso = [[NSData alloc] initWithContentsOfFile:imagenRecurso options:NSMappedRead  error:&error];
    
    if (error == nil && dataImgRecurso != nil){
      NSLog(@"Cargado correctamente en dataImgRecurso.");
    } else if (error == nil && dataImgRecurso == nil){
      NSLog(@"Error al cargar data del recurso.");
    }
      
  } else {
    
    NSLog(@"Could not find this file in the main bundle.");
      
  }
  

    UIImage *imgMostrar = [[UIImage alloc] initWithData:dataImgRecurso];

lunes, 18 de mayo de 2015

Atributos en un Texto NSAttributedString. NSForegroundColorAttributeName, NSFontAttributeName.

- (void)viewDidLoad{
    
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor whiteColor];
    
    self.lblEtiquetaAtributos = [[UILabel alloc] init];
   
    self.lblEtiquetaAtributos.attributedText = [self textoConAtributos];
    [self.lblEtiquetaAtributos sizeToFit];
    
    [self.view addSubview:self.lblEtiquetaAtributos];
    
}



- (NSAttributedString *) textoConAtributos{
    
    NSString *string = @"Asunto: Atributos para textos.";
    
    NSMutableAttributedString *retorno = [[NSMutableAttributedString alloc]
                                         initWithString:string];
    
    NSDictionary *atributoAsunto = @{
                                     NSFontAttributeName : [UIFont boldSystemFontOfSize:60.0f],
                                     NSForegroundColorAttributeName : [UIColor redColor],
                                     NSBackgroundColorAttributeName : [UIColor blackColor]
                                     };
    
    NSShadow *sombreado = [[NSShadow alloc] init];
    sombreado.shadowColor = [UIColor cyanColor];
    sombreado.shadowOffset = CGSizeMake(2.0f, 2.0f);
    
    NSDictionary *atributoRestoTexto = @{
                                         NSFontAttributeName : [UIFont boldSystemFontOfSize:20.0f],
                                         NSForegroundColorAttributeName : [UIColor blueColor],
                                         NSBackgroundColorAttributeName : [UIColor cyanColor],
                                         NSShadowAttributeName : sombreado };
    
    [retorno setAttributes:atributoAsunto range:[string rangeOfString:@"Asunto:"]];
    [retorno setAttributes:atributoRestoTexto range:[string rangeOfString:@"Atributos para textos"]];
    
    return [[NSAttributedString alloc] initWithAttributedString:retorno];
    

}

domingo, 17 de mayo de 2015

SegmentedControl en un NavigationItem. UISegmentedControl at NavigationItem.


- (void)viewDidLoad{
    
  [super viewDidLoad];
    
  self.view.backgroundColor = [UIColor whiteColor];
  
  NSArray *items = [[NSArray alloc] initWithObjects:
                    [UIImage imageNamed:@"imagen1.png"],
                    [UIImage imageNamed:@"imagen2.png"], nil];
  
  UISegmentedControl *segcntrl = [[UISegmentedControl alloc] initWithItems:items];
  segcntrl.segmentedControlStyle = UISegmentedControlStyleBar;
  
  [segcntrl addTarget:self action:@selector(segcntrlEjectua:)
             forControlEvents:UIControlEventValueChanged];
  
  UIBarButtonItem *rightBarButton = [[UIBarButtonItem alloc] initWithCustomView:segcntrl];
  
  [self.navigationItem setRightBarButtonItem:rightBarButton animated:YES];
  
  
}

- (void) segcntrlEjectua:(UISegmentedControl *)paramSender{
    
    if ([paramSender selectedSegmentIndex] == 0){
        NSLog(@"imagen1");
    } else  if ([paramSender selectedSegmentIndex] == 1){
        NSLog(@"imagen2");
    }
    

}

sábado, 16 de mayo de 2015

Imagen en Navigation Item. UIImage at NavigationItem.

- (void)viewDidLoad{
    
  [super viewDidLoad];
    
  self.view.backgroundColor = [UIColor whiteColor];

  UIImageView *imageViewTitulo = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100.0f, 40.0f)];
  imageViewTitulo.contentMode = UIViewContentModeScaleAspectFit;
  [imageViewTitulo setImage:[UIImage imageNamed:@"FullSizeLogo.png"]];
  // La imágen se muestra en navigation bar como título
  self.navigationItem.titleView = imageViewTitulo;
  

}

viernes, 15 de mayo de 2015

Guardar y recuperar un NSDictionary. Load and Save NSDictionary.

+(void)salvarEntidad:(NSDictionary *)entidadIn nombreIn:(NSString *)nombreIn
{
    
    NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:nombreIn];
    [NSKeyedArchiver archiveRootObject:entidadIn toFile:filePath];
    

}


+(NSDictionary *) recuperarEntidad:(NSString *)nombreIn
{

    NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:nombreIn];
    NSDictionary *entidad =  [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];

    return entidad;
    
}