360 likes | 474 Views
Wednesday 2-3:30, DH 1046. COMP 446 / ELEC 446 Mobile Device Applications. Scott Cutler Professor in the Practice of Computer Technology Department of Computer Science Department of Electrical and Computer Engineering cutler@rice.edu 9/19/12. Agenda. Events of the Week
E N D
Wednesday 2-3:30, DH 1046 COMP 446 / ELEC 446 Mobile Device Applications Scott Cutler Professor in the Practice of Computer Technology Department of Computer Science Department of Electrical and Computer Engineering cutler@rice.edu 9/19/12
Agenda • Events of the Week • Next week’s assignment and class • Review of Assignment 2 • Some more on Views, Gestures, Protocols • Questions on Assignment #3 COMP 446 / ELEC 446 - Week 5
Events of the Week • Apple announces iPhone 5: What you need to know • I miss Apple's reality distortion field • Apple's dock connector change is awful, don't kid yourselves • Apple's iPhone 5: 2 million preorders, 24 hours and a unique upgrade cycle • Apple fanboys fight back against Samsung • Fox: iPhone 5 has laser keyboard, holographic images • Yahoo Tells Workers: No More BlackBerrys • What you gain and lose with Office 2013 subscriptions COMP 446 / ELEC 446 - Week 5
Current Roster • Victor Acuna • Ryan Artecona • Gbenga Badipe • Peter Chang • Joan Chao COMP 446 / ELEC 446 - Week 5
Current Roster (2) • Alex Chiu • Heaven Chen • Lingo Dai • Weibo He • SahilHingorani COMP 446 / ELEC 446 - Week 5
Current Roster (3) • Abdul Nimeri • Bill Robertson • Frank Salinas • Tyler Siegert • Austin Witt • Matthew Zhao COMP 446 / ELEC 446 - Week 5
COMP 446 Syllabus • Lecture 1 - 8/22/12 - Introduction • Watch before: None • Assignment: #1 - Calculator • Assignment due: Friday, 8/31 6:00 am (Thursday 30:00) • Lecture 2 - 8/29/12- Assignment 1 issues and questions from videos • Watch before: 1, 2 • Assignment: #2 – Function Calculator • Assignment due: Friday, 9/7 6:00 am (Thursday 30:00) • Lecture 3 - 9/05/12 - Assignment 2 issues and questions from videos • Watch before: 3, 4 (demo part) • Assignment: #3 – Graphing Universal Calculator • Assignment due: Tuesday, 9/18 6:00 am (Monday 30:00) • Lecture 4 - 9/12/12 - Assignment 3 issues and questions from videos • Watch before: 4 (post demo), 5, 6 • Assignment: Continue with #3 – Graphing Universal Calculator • Assignment due: Tuesday, 9/18 6:00 am (Monday 30:00) • Lecture 5 - 9/19/12 - Assignment 3 issues and questions from videos • Watch before: Watch 7 before class, 8 after class • Assignment: #4 – Fiickr Top Places • Assignment due: Friday, 9/28 6:00 am (Thursday 30:00) COMP 446 / ELEC 446 - Week 5
COMP 446 Syllabus • Lecture 6 - 9/26/12 - Assignment 4 issues and questions from videos • Watch before: 8, 9 very beginning of 10 • Assignment: #5 – Fiickr Map Places • Assignment due: Friday, 10/5 6:00 am (Thursday 30:00) • Lecture 7 - 10/03/12 - Assignment 5 issues and questions from videos • Watch before: 10 (after Tab Bar), 11, 12 • Assignment: 1: #6 – Fiickr Core Data - Likely to be broken into required and optional parts - Optional part required for A+2: Final Project Topic (due before next class) • Assignment due: Friday, 10/12 6:00 am (Thursday 30:00) • Lecture 8 - 10/10/12 - Assignment 6 issues and SQL • Watch before: 13, 14 • Assignment: Final Project Proposal • Assignment due: Tuesday, 10/16 6:00 am (Monday 30:00) • Lecture 9 - 10/17/12 - iOS6 • Watch before: Optional 15, 16 • Assignment: iOS 6 app • Assignment due: Friday, 10/26 6:00 am (Thursday 30:00) COMP 446 / ELEC 446 - Week 5
COMP 446 Syllabus • Lecture 10 - 10/24/12 – HTML 5 • Watch before: Optional 17, 18 • Assignment: Major Final Project Feature • Assignment due: Friday, 11/2 6:00 am (Thursday 30:00) • Lecture 11 - 10/31/12 - TBD • Assignment: Continue working on Final Project • Assignment due: Wednesday, 11/28 2:00pm • Lecture 12 - 11/7/12- Android vs. iOS vs. Windows Phone group debate • Assignment: Continue working on Final Project • Assignment due: Wednesday, 11/28 2:00pm • Lecture 13 - 11/14/12 - Individual meetings on Final Project • Assignment: Continue working on Final Project • Assignment due: Wednesday, 11/28 2:00pm • Lecture 14 - 11/21/12 – No class, but continue on final project • Assignment: Continue working on Final Project • Assignment due: Wednesday, 11/28 2:00pm • Lecture 15 - 11/28/12 - Final Presentations • Assignment: Document Final Project • Assignment due: By time assigned for COMP 446 final (there is NO final exam) COMP 446 / ELEC 446 - Week 5
Final Projects • Projects will be individual • An acceptable iPad project can couple to an iPhone project • Projects can be in iOS, Windows 8 or Android • You are responsible for Win 8 or Android technology • I have a small number of iOS devices that can be used by students without one. • May have to share • Likely have to deploy from a non-community Mac • Must utilize at least one major and one minor iOS framework and feature not covered in first 6 assignments; preferably >1 major. • Project must be pre-approved • Often because proposed project too difficult to complete • Sometimes need to be modified for content COMP 446 / ELEC 446 - Week 5
Final Project Ideas • Augmented Reality is always a winner • There are some interesting robots utilizing the iPhone. • One could make a board game with iPhone players and iPad game board. • OpenGL is a good feature. • External universal frameworks are NOT allowed. • Utilizing a backend is good, but not much credit given for backend logic COMP 446 / ELEC 446 - Week 5
Week 6 • Watch CS193p lectures #8 (second part), #9 and #10 (through Tab Bar) • Make progress on CS193p Assignment #4 • Try and complete before 9/26 class. Due Friday, 9/28 6:00 am . • Submit assignments, review lectures at www.comp446.com • Start thinking about big project • Next week’s lecture – UIScrollView and Table View Controllers COMP 446 / ELEC 446 - Week 5
What is coming up in the assignments? • Assignment #3 – Graphing Calculator • Core Graphics, views, frames, bounds, etc. • Navigation Controllers • Storyboards and Segues • Gesture recognizers • Protocols and Delegates • iPad apps, Universal Apps, SplitView controllers • Assignment #1 was easy. #2 was more difficult. #3 incorporates many new paradigms • Will need to watch through video 7 for iPad information COMP 446 / ELEC 446 - Week 5
What is coming up in the assignments? • Assignment #4 – Flickr Top Places • Tab bar controllers • TableView controllers • ScrollViews • Data from the internet • Assignment #5 – Fast Flickr Map • Builds on Assignment #4 • Multi Threading / Grand Central Dispatch • MapKit • Assignment #6 – Core Data Flickr • UIDocument • Core Data COMP 446 / ELEC 446 - Week 5
Assignment #3a Comments • Most people handled graph title display wrong. What is the purpose of the title? • Still had a number of @synthesize issues with “_” • Back button too often said BACK • For many x did not complete a number. • Many of you took away your undo key. It should still be there. • Some pans did not pan linearly. Graph should follow finger – and do so in real time. • Axis should always be full screen • For calculator, if you don’t do rotation properly, don’t allow rotation. • Some submissions did not handle rotation of the graph. COMP 446 / ELEC 446 - Week 5
Target / Action • When a controller wants a view to get back to it when something happens, it use Target / Action. • The Target is the class instance to receive a message from the view when something happens • The Action is the method sent to the Target when the trigger happens. • View items, like buttons, can have multiple target/action pairs. • A target and its associated method can be triggered by multiple situations. COMP 446 / ELEC 446 - Week 5
Protocols, Delegates and DataSources • Protocols define a set of required and optional methods and properties to accomplish something • Protocols can be placed in an existing or a separate header file. • Use @class className to forward reference a class • Protocols can inherit other protocols – adding the inherited requirements and optional methods to their own • Delegates are classes which publicize that they handle the requirements of a protocol. These classes get set as the delegate normally in a property of the class defining the protocol. • It is safe to send a required protocol method to a class that states it handles a protocol. It must check respondsTo for optional methods. • <myProtocol> is used to identify that a class responds to myProtocol • Can also be added to an iVar or property. • DataSources are Delagates handling data values COMP 446 / ELEC 446 - Week 5
Protocols and Assignment #3 • The Calculator is an MVC with the CalculatorBrain as the Model • The Graphing MVC is supposed to be generic and use a protocol for its view’s data (valueAtPointX) • Where should the protocol be defined? • Where should the protocol be implemented? COMP 446 / ELEC 446 - Week 5
Assignment 3 Protocol Definition • GraphView controller uses delegate to get y value for given x • GraphView wants to be generic • As such, GraphView is a great place to define protocol COMP 446 / ELEC 446 - Week 5
Assignment 3 DataSource • Can go in either GraphViewController or CalculatorViewController. • If in GraphViewController, then GraphViewController is no longer generic • Preferred location is in CalculatorViewController • Keeps GraphViewController generic • Perceived as being more difficult; but actually not • Requires indirect setting of DataSource • Removes need to pass equation COMP 446 / ELEC 446 - Week 5
Assignment 3 DataSource Steps • CVC <GraphViewDataSource> • self.gvc.dataSource=self; • GVC • -(void)setDataSource:(id)dataSource {self.gv.dataSource = dataSource; } • GV • @property (nonatomic, weak) id <GraphViewDataSource> dataSource; • @synthesize dataSource=_dataSource; COMP 446 / ELEC 446 - Week 5
Review of Video 7 Items • Many of the slides to follow come directly from the Fall 2011 Stanford CS193p slide deck. • Some come from earlier versions of CS193p which I think were a bit clearer than the current deck COMP 446 / ELEC 446 - Week 5
UIToolbar • Collection of UIBarButtonItems • Enable by checking “Shows Toolbar” • Toolbar items belong to view, not controller COMP 446 / ELEC 446 - Week 5
UISplitViewController COMP 446 / ELEC 446 - Week 5
UISplitViewControllerDelegate • Required to see left side in portrait mode. • - (BOOL)splitViewController:(UISplitViewController *)sender shouldHideViewController:(UIViewController *)master inOrientation:(UIInterfaceOrientation)orientation {return UIInterfaceOrientationIsPortrait(orientation);} // or YES/NO COMP 446 / ELEC 446 - Week 5
Left Side Going Away, Show BBI • - (void)splitViewController:(UISplitViewController *)sender willHideViewController:(UIViewController *)master withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popover { barButtonItem.title= @“Master”; // use a better word than “Master”! // setSplitViewBarButtonItem: must put the bar button somewhere on screen // probably in a UIToolbar or a UINavigationBar [detailViewControllersetSplitViewBarButtonItem:barButtonItem]; } • Your job to write setSplitViewBarButtonItem COMP 446 / ELEC 446 - Week 5
Left Side Coming Back, Remove BBI • - (void)splitViewController:(UISplitViewController *)sender willShowViewController:(UIViewController *)master invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem { // removeSplitViewBarButtonItem: must remove the bar button from its toolbar [detailViewControllerremoveSplitViewBarButtonItem:nil]; } COMP 446 / ELEC 446 - Week 5
Sample setSplitViewBarButtonItem - (void)setSplitViewBarButtonItem:(UIBarButtonItem *)barButtonItem { UIToolbar*toolbar = [self toolbar]; // might be outlet or calculated NSMutableArray*toolbarItems = [toolbar.itemsmutableCopy]; if (_splitViewBarButtonItem) [toolbarItemsremoveObject:_splitViewBarButtonItem]; // put the bar button on the left of our existing toolbar if (barButtonItem) [toolbarItemsinsertObject:barButtonItem atIndex:0]; toolbar.items= toolbarItems; _splitViewBarButtonItem = barButtonItem; } COMP 446 / ELEC 446 - Week 5
Updating Detail View Controller • Target/Action or Segue • Since detail always on screen and segue replaces view, Target / Action more common • Get pointer to detail view controller: • id detailViewController = [[self.splitViewControllerviewControllers] lastObject]; COMP 446 / ELEC 446 - Week 5
UIPopoverController • Not a UIViewController subclass • Typically created in storyboard • contentViewController property for displayed viewController COMP 446 / ELEC 446 - Week 5
Universal Applications • If not enabled, runs iPhone apps a 2X • If target for iPad, but nothing special done, you end up with a full screen application • Typical paradigm is with UISplitViewController • Create separate iPhone and iPad storyboards • Often significant reuse of most classes COMP 446 / ELEC 446 - Week 5
Am I Running on a iPad??? • BOOL iPad = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad); • If (self.splitViewController) { … } //splitViewController only on iPad COMP 446 / ELEC 446 - Week 5
View Controller Lifecycle • Made significantly simpler in iOS 5 with ARC • Main entry points • - awakeFromNib // earliest entry • - viewDidLoad // outlets set, bounds not set • - viewWillAppear:(BOOL)animated • VERY close to appearing. • May happen multiple times • Put expensive operations in separate thread COMP 446 / ELEC 446 - Week 5
Will / Did • Many lifecycle methods have Will and Did versions • - (void)viewWillDisappear:(BOOL)animated • - (void)viewDidAppear:(BOOL)animated; • - (void)viewDidDisappear:(BOOL)animated; • - (void)willRotateToInterfaceOrientation: … • - (void)willAnimateRotationToInterfaceOrientation: • - (void)didRotateFromInterfaceOrientation: COMP 446 / ELEC 446 - Week 5
viewDidUnload • Called in low memory situations • Only if you are off screen • ARC handles most of what used to be done COMP 446 / ELEC 446 - Week 5
Assignment #3 Questions COMP 446 / ELEC 446 - Week 5