Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

52
MOBILE APPS CON OBJECTIVE-C DAY 02 19/NOVEMBRE/2011 alberto pasca | [email protected] www.cutaway.it

description

Technical speech per objectivec e ios versione 3.1. Argomenti trattati: ~ interfacce grafiche ~ eventi ~ Foundation.framework ~ persistenza dati ~ librerie ~ esempi Source code / esempi: https://github.com/elpsk

Transcript of Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

Page 1: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

MOBILE APPS CON

OBJECTIVE-C

DAY 02 19/NOVEMBRE/2011

alberto pasca | [email protected]

Page 2: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

contents | day 02

interfacce grafiche eventi Foundation.framework persistenza dati librerie

Mobile Apps con Objective-c | alberto pasca

Page 3: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

interfacce grafiche (.xib)Mobile Apps con Objective-c |

alberto pasca

UIWindow

UIView

UIButton

UILabel

UITextField

[…]

UIProgressBar

Page 4: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

IBAction & IBOutletMobile Apps con Objective-c |

alberto pasca

@interface ViewController : UIViewController { IBOutlet UIButton *FirstButton;}

@property (nonatomic, retain) UIButton *FirstButton;

- (IBAction) ButtonTouched:(id)sender;

@end

Page 5: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

controllersMobile Apps con Objective-c |

alberto pasca

NavigationController

Tab BarController

TableViewController

Page 6: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

Cosa vedremo…

• IBAction• IBOutlet

• UINavigationController• UITabBar• UITableView

Lezione_05_controllers

controllers – codeMobile Apps con Objective-c |

alberto pasca

Page 7: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

UIView – frame / boundsMobile Apps con Objective-c |

alberto pasca

UIKit vs CoreGraphics

Page 8: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

UIView - creazioneMobile Apps con Objective-c |

alberto pasca

UIView *v = [[UIView alloc] initWithFrame:f];[self.view addSubview:v];[v release];

- (void)drawRect;

v3

v2 v1

v4

• Aggiunte• Rimosse• Spostate di z-index• Trovate con i TAG• Animate• Riconoscono eventi muti-touch

Page 9: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

UIView – gerarchia

NSObject

NSArray NSString UIResponder

UIView

UIControl

UITextField UISlider

UILabel

Mobile Apps con Objective-c | alberto pasca

Page 10: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

UIView – touchMobile Apps con Objective-c |

alberto pasca

- (void) touchesBegan;- (void) touchesMoved;- (void) touchesEnded;- (void) touchesCancelled;

Eventi touch generici

Eventi touch particolari

UITapGestureRecognizer

UIPinchGestureRecognizerUIRotationGestureRecognizer

UISwipeGestureRecognizerUIPanGestureRecognizer

UILongPressGestureRecognizer

iOS 3.2+ -> UIGestureRecognizer

iPad 11 dita insieme

Page 11: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

UIView – animazioniMobile Apps con Objective-c |

alberto pasca

{[UIView beginAnimations:@”MyAnimation" context:nil];

[UIView setAnimationDelegate:self];[UIView setAnimationWillStartSelector:@selector(AnimStarted)];[UIView setAnimationDidStopSelector:@selector(AnimStopped)];

[UIView setAnimationBeginsFromCurrentState:YES];[UIView setAnimationDuration:2.0];[...][UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

MyView.alpha = .0;MyBeautifulButton.z = 100;// move// bounce// [...]

[UIView commitAnimations];}

Page 12: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

Cosa vedremo…

• UIView• Aggiunta / Rimozione• z-Index• Colori, dimensioni,

etc…

• Eventi Touch base• Eventi

UIGestureResponder• Animazioni semplici

Lezione_06_AnimazioniLezione_07_Touch

touch e animazioni – codeMobile Apps con Objective-c |

alberto pasca

Page 13: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

UITableViewMobile Apps con Objective-c |

alberto pasca

• Data Source (Array)

• ProtocolliUITableViewDataSource

UITableViewDelegate

Page 14: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

UITableViewCellMobile Apps con Objective-c |

alberto pasca

UITableViewCellStyleDefault

UITableViewCellStyleSubtitle

UITableViewCellStyleValue1

UITableViewCellStyleValue2

Page 15: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

UIButtonMobile Apps con Objective-c |

alberto pasca

- (IBAction) ButtonTouched:(id)sender { UIButton *btn = (UIButton*)sender; switch (btn.tag) { // quale button? case 0: break; case 1: break; case 2: break; // [...] }}

TIPI

CONFIG

(UIButton*)sender

Page 16: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

UITextField – UITextViewMobile Apps con Objective-c |

alberto pasca

Protocolli UITextFieldDelegateUITextViewDelegate

• ShouldBeginEditing• DidBeginEditing• ShouldEndEditing• DidEndEditing• ShouldClear• ShouldReturn

[textField becomeFirstResponder];[textField resignFirstResponder];

Page 17: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

UISwitchMobile Apps con Objective-c |

alberto pasca

UISwitch *sw = [[UISwitch alloc] initWithFrame:CGRectMake(0, 0, 50, 100)];

sw.on = NO;

sw.on = YES;

X, Y, W, H

CGRect rect; rect.origin.x = 0; rect.origin.y = 0; rect.size.width = 50; rect.size.height = 100;

Page 18: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

UIImageViewMobile Apps con Objective-c |

alberto pasca

[ImgView setImage: [UIImage imageWithData: [NSData dataWithContentsOfURL: [NSURL URLWithString: @"http://tinyurl.com/cr2tmu6" ] ] ] ];

Page 19: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

UIWebBrowserMobile Apps con Objective-c |

alberto pasca

Protocollo UIWebViewDelegate

webViewDidStartLoadwebViewDidFinishLoaddidFailLoadWithErrorshouldStartLoadWithRequest

[WebView loadRequest: [NSURLRequest requestWithURL: [NSURL URLWithString: textField.text]]];

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

Page 20: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

Cosa vedremo…

• UITextField• UITextView• UILabel• UIButton• UISwitch• UISlider• UIImageView• UIWebBrowser

• Interazione codice

Lezione_08_Componenti

componenti – codeMobile Apps con Objective-c |

alberto pasca

Page 21: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

eventi

Mobile Apps con Objective-c | alberto pasca

Page 22: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

eventi - NSNotificationMobile Apps con Objective-c |

alberto pasca

creazione[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveTestNotification:) name:@"completato” object:nil];

[[NSNotificationCenter defaultCenter] postNotificationName:@”completato" object:nil];

utilizzo

[[NSNotificationCenter defaultCenter] removeObserver:self];

distruzione

Page 23: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

eventi - gps

CoreLocation (CL) Framework Protocollo <CLLocationManagerDelegate>

- didUpdateToLocation

- didFailWithError

[[CLLocationManager alloc] init];

CLLocationCoordinate2D coords =

CLLocationCoordinate2DMake(45.50316, 9.16447);

Mobile Apps con Objective-c | alberto pasca

Page 24: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

Cosa vedremo…

• Posizione GPS• Bussola

Lezione_09_GPS

gps / bussola – codeMobile Apps con Objective-c |

alberto pasca

Page 25: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

eventi - accelerometroMobile Apps con Objective-c |

alberto pasca

CoreLocation (CL) Framework Protocollo <UIAccelerometerDelegate>

- didAccelerate

UIAcceleration: x, y, z

[[UIAccelerometer sharedAccelerometer] setUpdateInterval:.2];

[[UIAccelerometer sharedAccelerometer] setDelegate:self];

Page 26: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

eventi - rotazione

- (BOOL) shouldAutorotateToInterfaceOrientation:

(UIInterfaceOrientation)interfaceOrientation

{

// UIInterfaceOrientationPortrait

// UIInterfaceOrientationLandscapeLeft

// UIInterfaceOrientationLandscapeRight

// UIInterfaceOrientationPortraitUpsideDown

}

Mobile Apps con Objective-c | alberto pasca

Page 27: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

eventi - UIApplicationDelegate

Mobile Apps con Objective-c | alberto pasca

< UIApplicationDelegate >

• didFinishLaunchingWithOptions

Cambiamenti di stato• Da attivo a inattivo

applicationWillResignActive

• Da attivo a backgroundapplicationDidEnterBackground

• Da background a inattivoapplicationWillEnterForeground

• Da inattivo ad attivoapplicationDidBecomeActive

• Da attivo a “sta per terminare”applicationWillTerminate

Chiamata / SMS

Quit

REopen

Sveglia

Quit

Page 28: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

Cosa vedremo…

• UIApplicationDelegate• Giroscopio• Accelerometro• Device Motion• Magnetometro• Shake

Lezione_10_Accelerometro

movimenti – codeMobile Apps con Objective-c |

alberto pasca

Page 29: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

FoundationFramework

Mobile Apps con Objective-c | alberto pasca

Page 30: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

Foundation – NSString vs NSMutableString

Lunghezza: length

Ricerca: rangeOfString

Sostituzione: replaceCharactersInRange:withString

Inserimento caratteri: insertString:atIndex:

Comparazione: isEqualToString

Prefissi / Suffissi: hasPrefix, hasSuffix

Conversioni: intValue, doubleValue, UTF8String

NSRange, NSMakeRange, NSNotFound

Mobile Apps con Objective-c | alberto pasca

Page 31: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

Foundation - NSNumberMobile Apps con Objective-c |

alberto pasca

char, short int, int, long int, long long int, float, double, BOOL

Utilizzare tipi scalari come oggetti

+ numberWithBool:+ numberWithChar:+ numberWithDouble:+ numberWithFloat:+ numberWithInt:+ numberWithInteger:+ numberWithLong:+ numberWithLongLong:+ numberWithShort:+ numberWithUnsignedChar:+ numberWithUnsignedInt:+ numberWithUnsignedInteger:+ numberWithUnsignedLong:+ numberWithUnsignedLongLong:+ numberWithUnsignedShort:

– boolValue– charValue– decimalValue– doubleValue– floatValue– intValue– integerValue– longLongValue– longValue– shortValue– unsignedCharValue– unsignedIntegerValue– unsignedIntValue– unsignedLongLongValue– unsignedLongValue– unsignedShortValue

ACCESSOCREAZIONE

Page 32: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

Foundation - NSArray

elementi SOLO alla creazione

sola lettura

elementi in creazione elementi in esecuzione lettura / scrittura shift automatico elementi

NSArray NSMutableArray

Mobile Apps con Objective-c | alberto pasca

NSArray *nomeArray = [NSArray arrayWithObjects:@"A",@"B",@"C",nil];

NSMutableArray *nomeMutableArray = [NSMutableArray arrayWithObjects:@"A",@"B",@"C",nil]; [nomeMutableArray addObject:@"D"]; [nomeMutableArray insertObject:@"Z" atIndex:0]; NSLog(@"%@", [nomeArray objectAtIndex:0]); NSLog(@"%@", [nomeMutableArray objectAtIndex:0]);

Page 33: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

Foundation - NSDictionaryMobile Apps con Objective-c |

alberto pasca

elementi SOLO alla creazione

sola lettura

elementi in creazione elementi in esecuzione lettura / scrittura

NSDictionary NSMutableDictionary

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: @"VAL_00", @"KEY_00", @"VAL_01", @"KEY_01", nil]; NSMutableDictionary *mutDict = [NSMutableDictionary dictionaryWithObjectsAndKeys:

@"VAL_00", @"KEY_00", @"VAL_01", @"KEY_01", nil]; [mutDict setValue:@"VAL_99" forKey:@"KEY_00"];[mutDict setObject:@"VAL_02" forKey:@"KEY_02"]; NSLog(@"%@", [dict objectForKey:@"KEY_00"]); // valueForKeyNSLog(@"%@", [mutDict objectForKey:@"KEY_00"]); // valueForKey

Page 34: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

Cosa vedremo…

• NSString• NSMutableString• NSNumber• NSArray• NSMutableArray• NSDictionary• NSMutableDictionary

Lezione_11_Foundation

Foundation.framework – code

Mobile Apps con Objective-c | alberto pasca

Page 35: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

persistenza dati

Mobile Apps con Objective-c | alberto pasca

Page 36: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

persistenza – NSUserDefault

“database” locale (area riservata) thread safe

NSString *sessionKey = @"865eft8itg98sdf3”;

NSUserDefaults *store = [NSUserDefaults standardUserDefaults];

[store setObject:sessionKey forKey:@"SESSION"];

NSUserDefaults *get = [NSUserDefaults standardUserDefaults];

NSString *data = [get stringForKey:@"SESSION"];

NSLog(@"DATA: %@", data);

Mobile Apps con Objective-c | alberto pasca

Page 37: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

persistenza – NSCoding

store in locale di CLASSI intere

<NSCoding> codifica / decodifica oggetti per l’archiviazione

Mobile Apps con Objective-c | alberto pasca

- (id) initWithCoder: (NSCoder *)decoder- (void) encodeWithCoder: (NSCoder *)coder

Recupero oggetti/valore: decoder -> decodeObjectForKeySalvataggio oggetti/valore: coder -> encodeObject

Page 38: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

persistenza – .plist e .bundle NSBundle

[[NSBundle mainBundle] pathForResource:@"Test” ofType:@"plist"];

== Test.plist

<?xml version="1.0" encoding="UTF-8"?>

<plist version="1.0">

<dict>

<key>primo</key>

<string>001</string>

<key>secondo</key>

<string>Valore 2</string>

</dict>

</plist>

Mobile Apps con Objective-c | alberto pasca

Page 39: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

persistenza – Root.plist

Accesso ai SETTINGS del device Lettura / Scrittura con APP chiusa!

Mobile Apps con Objective-c | alberto pasca

Page 40: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

persistenza – SQLLite

Libreria libsqlite3.dylib

Funzionalità SQL, ma limitate SELECT INSERT DELETE etc…

Libreria in C, metodi in C

Editor come Terminale, Browser Plugin, IDE multipiattaforma

Mobile Apps con Objective-c | alberto pasca

Page 41: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

Cosa vedremo…

• NSUserDefault• NSCoding• File .PLIST• Setting sistema

• Conta esecuzioni app• Read/Write Settings• Salvataggio classi su

store

Lezione_12_Storage

persistenza – codeMobile Apps con Objective-c |

alberto pasca

Page 42: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

librerie & extras

Mobile Apps con Objective-c | alberto pasca

Page 43: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

MKMapKit

MKMapKit.framework

Mappe Foto Ibride

MKAnnotation Localizzazione GPS Polyline (no route!) Geocodifica

Mobile Apps con Objective-c | alberto pasca

Page 44: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

Network

NSURL NSURLRequest NSURLConnection

[[NSURLConnection alloc] initWithRequest:request delegate:self]

connectionDidFinishLoadingconnection didReceiveResponseconnection didReceiveDataconnection didFailWithError

Mobile Apps con Objective-c | alberto pasca

Page 45: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

NSXMLParser

<NSXMLParserDelegate>

Parsing XML Carattere per carattere! Callback per ogni evento

– parserDidStartDocument:

– parserDidEndDocument:– parser:parseErrorOccurred:

– parser:foundCharacters:

Mobile Apps con Objective-c | alberto pasca

PRO: 1. Integrato2. Velocissimo

CONTRO: 3. Complesso4. No XPATH !

Page 46: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

librerie – TBXML / XPathQuery OpenSource

TBXML Più veloce dopo NSXMLParser Accesso diretto ai nodi e attributi

XPathQuery (richiede la lib “libxml2.dlyb”) Navigazione con Xpath Recupero di tutti i nodi in un colpo solo

Mobile Apps con Objective-c | alberto pasca

http://goo.gl/Kr1Hk | http://goo.gl/Au6SV

Page 47: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

librerie - FMDB

Wrapper per SQLLite Scritto in Objective-C anziché in C Molto facile da usare

[FMDatabase databaseWithPath:dbPath]

FMResultSet *rs = [db executeQuery:

@"SELECT / INSERT / etc…"];

[rs close];

Mobile Apps con Objective-c | alberto pasca

http://goo.gl/szY0t

Page 48: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

extras – device infoMobile Apps con Objective-c |

alberto pasca

[[UIScreen mainScreen] bounds] [UIScreen mainScreen].brightness

[UIDevice currentDevice].model [UIDevice currentDevice].systemName [UIDevice currentDevice].systemVersion [UIDevice currentDevice].proximityMonitoringEnabled [UIDevice currentDevice].uniqueIdentifier [UIDevice currentDevice].orientation [UIDevice currentDevice].multitaskingSupported [UIDevice currentDevice].batteryLevel

Schermo

Device

Page 49: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

extras – Paint !

CoreGraphics.framework

> UIGraphicsBeginImageContext

> UIGraphicsEndImageContext

CGContextSetLineWidth CGContextSetRGBStrokeColor CGContextAddLineToPoint

Mobile Apps con Objective-c | alberto pasca

Page 50: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

extras – Musica !

#import <AVFoundation/AVFoundation.h>#import <AudioToolbox/AudioToolbox.h>

<AVAudioPlayerDelegate>

[AVAudioPlayer initWithContentsOfURL:url error:nil];AudioPlayer.numberOfLoops = 0;[AudioPlayer play];[AudioPlayer stop];

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

Mobile Apps con Objective-c | alberto pasca

Audio

Vibrazione

Page 51: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

Cosa vedremo…

• MKMapKit• Localizzazione GPS• MKAnnotation• MKMapType

• Connessione HTTP• Syncronous /

Asyncronous

• NSXmlParser• TBXML• XPathQuery

• Disegnare con le dita

Lezione_13_MapKitLezione_14_NetworkLezione_15_XMLParserLezione_16_Paint

extras – codeMobile Apps con Objective-c |

alberto pasca

Page 52: Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02

# EOF - day 02.

alberto pasca – [email protected]

Codice e slide verranno inviate ai partecipanti.

grazie dell’attenzione.