formacion en movilidad: conceptos de desarrollo en ios (iii)

Post on 09-May-2015

247 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

En esta tercera sesión formativa, impartida por Sergi Hernando, CTO de Mobivery, se trataron los siguientes conceptos: UIWebView, View Cotroller en iPad y el Simulador

TRANSCRIPT

Televisió de CatalunyaFormación en movilidad

Conceptos de desarrollo en iOS3ª sesión mayo 2013

1

Qué veremos hoy

Repaso de la sesión anterior

UIWebView

View Cotroller en iPad

Simulador

2

Recursos

Tutoriales de Ray Wenderlichwww.raywenderlich.com/tutorials

Cursos de Stanford en iTunes Uitunes.stanford.edu

iOS Developer Librarydeveloper.apple.com/library/ios

3

RepasoView Controller

UIViewController

4

RepasoNavigation Bar

UINavigationItemUIBarButtonItem - NSString - UIBarButtonItem

5

RepasoUIBarButtonItem

self.navigationItem.rightBarButtonItem

6

RepasoUIStoryboardSegue

Modal

7

Repaso// MasterViewController.m

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ if ([[segue identifier] isEqualToString:@"newDetail"]) {! ! NewVideoViewController *viewController = (NewVideoViewController *)[segue destinationViewController];! ! viewController.masterViewController = self;! }}

8

Repaso// NewVideoViewController.m

- (IBAction)done:(id)sender {! [self dismissViewControllerAnimated:YES completion:^{! ! NSDictionary *values = @{! ! ! @"title": self.videoTitle.text, @"author": self.videoAuthor.text, @"url": self.videoURL.text! ! };! ! [self.masterViewController insertNewObject:values];! }];}

9

Repaso// MasterViewController.m

- (void)insertNewObject:(NSDictionary *)values{ // ... [newManagedObject setValue:[NSDate date] forKey:@"timeStamp"]; [newManagedObject setValue:[values objectForKey:@"title"] forKey:@"title"]; [newManagedObject setValue:[values objectForKey:@"author"] forKey:@"author"]; [newManagedObject setValue:[values objectForKey:@"url"] forKey:@"url"]; // ...}

10

Debugging

11

UIWebView

// DetailViewController.h

@interface DetailViewController : UIViewController <UISplitViewControllerDelegate, UIWebViewDelegate>

@property (strong, nonatomic) id detailItem;

@property (nonatomic, weak) IBOutlet UILabel *titleLabel;@property (nonatomic, weak) IBOutlet UILabel *authorLabel;@property (nonatomic, weak) IBOutlet UIWebView *webView;

@end

12

UIWebView

// DetailViewController.m

- (void)configureView{ // ... self.titleLabel.text = [self.detailItem valueForKey:@"title"]; self.authorLabel.text = [self.detailItem valueForKey:@"author"];}

13

UIWebView

// DetailViewController.m

- (void)configureView{ // ... self.titleLabel.text = [self.detailItem valueForKey:@"title"]; self.authorLabel.text = [self.detailItem valueForKey:@"author"];

NSURL *theURL = [[NSURL alloc] initWithString:[self.detailItem valueForKey:@"url"]]; NSURLRequest *request = [[NSURLRequest alloc] initWithURL:theURL];

[self.webView loadRequest:request];}

14

UIWebViewUIWebViewDelegate

// DetailViewController.m

- (void)configureView{ // ... self.titleLabel.text = [self.detailItem valueForKey:@"title"]; self.authorLabel.text = [self.detailItem valueForKey:@"author"];

NSURL *theURL = [[NSURL alloc] initWithString:[self.detailItem valueForKey:@"url"]]; NSURLRequest *request = [[NSURLRequest alloc] initWithURL:theURL];

[self.webView setDelegate:self]; [self.webView loadRequest:request];}

15

UIWebViewUIWebViewDelegate

// DetailViewController.m

- (void)configureView{ // ... self.titleLabel.text = [self.detailItem valueForKey:@"title"]; self.authorLabel.text = [self.detailItem valueForKey:@"author"];

NSURL *theURL = [[NSURL alloc] initWithString:[self.detailItem valueForKey:@"url"]]; NSURLRequest *request = [[NSURLRequest alloc] initWithURL:theURL];

[self.webView setDelegate:self]; [self.webView loadRequest:request];}

#pragma mark - UIWebViewDelegate

- (void)webViewDidStartLoad:(UIWebView *)webView {}

- (void)webViewDidFinishLoad:(UIWebView *)webView {}

16

UIWebViewUIActivityIndicatorView

// DetailViewController.h

@interface DetailViewController : UIViewController <UISplitViewControllerDelegate, UIWebViewDelegate>

@property (strong, nonatomic) id detailItem;

@property (nonatomic, weak) IBOutlet UILabel *titleLabel;@property (nonatomic, weak) IBOutlet UILabel *authorLabel;@property (nonatomic, weak) IBOutlet UIWebView *webView;@property (nonatomic, strong) IBOutlet UIActivityIndicatorView *spinner;

@end

17

UIWebViewUIActivityIndicatorView

// DetailViewController.m

- (void)configureView{ // ... self.titleLabel.text = [self.detailItem valueForKey:@"title"]; self.authorLabel.text = [self.detailItem valueForKey:@"author"]; self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; self.spinner.center = self.view.center;

NSURL *theURL = [[NSURL alloc] initWithString:[self.detailItem valueForKey:@"url"]]; NSURLRequest *request = [[NSURLRequest alloc] initWithURL:theURL];

[self.webView setDelegate:self]; [self.webView loadRequest:request];}

#pragma mark - UIWebViewDelegate

- (void)webViewDidStartLoad:(UIWebView *)webView {}

- (void)webViewDidFinishLoad:(UIWebView *)webView {}

18

UIWebViewUIActivityIndicatorView

// DetailViewController.m

- (void)configureView{ // ... self.titleLabel.text = [self.detailItem valueForKey:@"title"]; self.authorLabel.text = [self.detailItem valueForKey:@"author"]; self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; self.spinner.center = self.view.center;

NSURL *theURL = [[NSURL alloc] initWithString:[self.detailItem valueForKey:@"url"]]; NSURLRequest *request = [[NSURLRequest alloc] initWithURL:theURL];

[self.webView setDelegate:self]; [self.webView loadRequest:request];}

#pragma mark - UIWebViewDelegate

- (void)webViewDidStartLoad:(UIWebView *)webView { dispatch_async(dispatch_get_main_queue(), ^{ });}

- (void)webViewDidFinishLoad:(UIWebView *)webView {}

19

UIWebViewUIActivityIndicatorView

// DetailViewController.m

- (void)configureView{ // ... self.titleLabel.text = [self.detailItem valueForKey:@"title"]; self.authorLabel.text = [self.detailItem valueForKey:@"author"]; self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; self.spinner.center = self.view.center;

NSURL *theURL = [[NSURL alloc] initWithString:[self.detailItem valueForKey:@"url"]]; NSURLRequest *request = [[NSURLRequest alloc] initWithURL:theURL];

[self.webView setDelegate:self]; [self.webView loadRequest:request];}

#pragma mark - UIWebViewDelegate

- (void)webViewDidStartLoad:(UIWebView *)webView { dispatch_async(dispatch_get_main_queue(), ^{ [self.view addSubview:self.spinner]; [self.spinner startAnimating]; });}

- (void)webViewDidFinishLoad:(UIWebView *)webView {}

20

UIWebViewUIActivityIndicatorView

// DetailViewController.m

- (void)configureView{ // ... self.titleLabel.text = [self.detailItem valueForKey:@"title"]; self.authorLabel.text = [self.detailItem valueForKey:@"author"]; self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; self.spinner.center = self.view.center;

NSURL *theURL = [[NSURL alloc] initWithString:[self.detailItem valueForKey:@"url"]]; NSURLRequest *request = [[NSURLRequest alloc] initWithURL:theURL];

[self.webView setDelegate:self]; [self.webView loadRequest:request];}

#pragma mark - UIWebViewDelegate

- (void)webViewDidStartLoad:(UIWebView *)webView { dispatch_async(dispatch_get_main_queue(), ^{ [self.view addSubview:self.spinner]; [self.spinner startAnimating]; });}

- (void)webViewDidFinishLoad:(UIWebView *)webView { dispatch_async(dispatch_get_main_queue(), ^{ });}

21

UIWebViewUIActivityIndicatorView

// DetailViewController.m

- (void)configureView{ // ... self.titleLabel.text = [self.detailItem valueForKey:@"title"]; self.authorLabel.text = [self.detailItem valueForKey:@"author"]; self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; self.spinner.center = self.view.center;

NSURL *theURL = [[NSURL alloc] initWithString:[self.detailItem valueForKey:@"url"]]; NSURLRequest *request = [[NSURLRequest alloc] initWithURL:theURL];

[self.webView setDelegate:self]; [self.webView loadRequest:request];}

#pragma mark - UIWebViewDelegate

- (void)webViewDidStartLoad:(UIWebView *)webView { dispatch_async(dispatch_get_main_queue(), ^{ [self.view addSubview:self.spinner]; [self.spinner startAnimating]; });}

- (void)webViewDidFinishLoad:(UIWebView *)webView { dispatch_async(dispatch_get_main_queue(), ^{ [self.spinner stopAnimating]; [self.spinner removeFromSuperview]; });}

22

Coffee Break!

23

MVCView Controller Lifecycle

viewDidLoad:

viewWillAppear:

viewDidAppear:

didReceiveMemoryWarning:

24

MVCView Controller Lifecycle

viewDidLoad:

“This method is called after the view controller has loaded its view hierarchy into memory. You usually override this method to perform additional

initialization on views that were loaded from nib files”- (void)viewDidLoad{ [super viewDidLoad]; self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; self.spinner.center = self.view.center;}

25

MVCView Controller Lifecycle

viewWillAppear:

“This method is called before the receiver’s view is about to be added to a view hierarchy. You can override this method to perform custom tasks

associated with displaying the view”- (void)viewDidLoad{ [super viewDidLoad]; self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; self.spinner.center = self.view.center;}

- (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; self.titleLabel.text = [self.detailItem valueForKey:@"title"]; self.authorLabel.text = [self.detailItem valueForKey:@"author"];}

26

MVCView Controller Lifecycle

viewDidAppear:

“You can override this method to perform additional tasks associated with presenting the view”

- (void)viewDidLoad{ [super viewDidLoad]; self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; self.spinner.center = self.view.center;}

- (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; self.titleLabel.text = [self.detailItem valueForKey:@"title"]; self.authorLabel.text = [self.detailItem valueForKey:@"author"];}

- (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; NSURL *theURL = [[NSURL alloc] initWithString:[self.detailItem valueForKey:@"url"]]; NSURLRequest *request = [[NSURLRequest alloc] initWithURL:theURL]; [self.webView setDelegate:self]; [self.webView loadRequest:request];}

27

MVCView Controller Lifecycle

didReceiveMemoryWarning:

“You can override this method to release any additional memory used by your view

controller”

28

EjercicioNew Video View Controller en iPad

29

iOS SimulatorFile

Open Printer SimulatorSave Screen Shot ⌘S

30

iOS SimulatorHardware

Device iPad 2, mini

iPad (Retina) iPhone 3G, 3GS

iPhone (Retina 3.5-inch) 4, 4S

iPhone (Retina 4-inch) 5, iPod Touch

Version 5.0 (9A334) WWDC 2011

5.1 (9B176) 6.0 (10A403) WWDC 2012

6.1 (10B141)

31

iOS SimulatorHardware

Rotate Left ⌘←Rotate Right ⌘→Shake Gesture ^⌘Z

32

iOS SimulatorHardware

Home ⇧⌘HLock ⌘L

33

iOS SimulatorHardware

Simulate Memory Warning didReceiveMemoryWarning:

Toggle In-Call Status Bar ⌘TSimulate Hardware KeyboardTV Out Disabled 640 x 480 720 x 480 1024 x 768 1280 x 720 (720p) 1920 x 1024 (1080p)

34

iOS SimulatorDebug

Toggle Slow Animations

35

iOS SimulatorDebug

Color Blended Layers Reduce amount of red to improve performance

Color Copied ImagesColor Misaligned ImagesColor Offscreen-Rendered

36

iOS SimulatorDebug

Location None Custom Location... Apple Stores Apple City Bicycle Ride City Run Freeway Drive

37

iOS SimulatorWindow

Scale 100% ⌘1 75% ⌘2 50% ⌘3

38

InstrumentsProfiling

⌘I

39

InstrumentsAllocations

40

InstrumentsAllocations

- (void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning];

self.webView = nil; self.spinner = nil; self.authorLabel = nil; self.titleLabel = nil; self.detailItem = nil;}

41

InstrumentsLeaks

42

¡Gracias!

43

top related