Upload
mobivery
View
246
Download
0
Embed Size (px)
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
Citation preview
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