Your SlideShare is downloading. ×

Iphone course 2

727

Published on

Published in: Technology, News & Politics
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
727
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
15
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. iPhone Application Development II Janet Huang 2011/11/30
  • 2. Today’s topic• Model View Control• Protocol, Delegation, Target/Action• Location in iPhone • CoreLocation • MapKit• Location-based iPhone Application
  • 3. MVC should did will target controller outlet countNotification de data da & KVO le ta ga action te so urc es model view
  • 4. IBOutlet & IBAction target action controller view outlet#import <UIKit/UIKit.h>@interface HelloViewController : UIViewController{ IBOutlet UILabel* display;}- (IBAction)pressButton:(id)sender;@end Interface Builder ViewController
  • 5. Delegation pattern delegate delegatedelegator (helper object)
  • 6. class RealPrinter { // the "delegate" void print() { System.out.print("something"); }}class Printer { // the "delegator" RealPrinter p = new RealPrinter(); // create the delegate void print() { p.print(); // delegation }}public class Main { // to the outside world it looks like Printer actually prints. public static void main(String[] args) { Printer printer = new Printer(); printer.print(); }} java simple example
  • 7. interface I { void f(); void g();}class A implements I { public void f() { System.out.println("A: doing f()"); } public void g() { System.out.println("A: doing g()"); }}class B implements I { public void f() { System.out.println("B: doing f()"); } public void g() { System.out.println("B: doing g()"); }}class C implements I { // delegation I i = new A(); public void f() { i.f(); } public void g() { i.g(); } // normal attributes public void toA() { i = new A(); } public void toB() { i = new B(); }}public class Main { public static void main(String[] args) { C c = new C(); c.f(); // output: A: doing f() c.g(); // output: A: doing g() c.toB(); c.f(); // output: B: doing f() c.g(); // output: B: doing g() }} java complex example
  • 8. @protocol I <NSObject>-(void) f;-(void) g;@end@interface A : NSObject <I> { } // constructor@end -(id)init {@implementation A if (self = [super init]) { i = [[A alloc] init]; }-(void) f { NSLog(@"A: doing f"); } return self;-(void) g { NSLog(@"A: doing g"); } }@end // destructor@interface B : NSObject <I> { } -(void)dealloc { [i release]; [super dealloc]; }@end @end@implementation B-(void) f { NSLog(@"B: doing f"); } int main (int argc, const char * argv[]) {-(void) g { NSLog(@"B: doing g"); } NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]@end init]; C *c = [[C alloc] init];@interface C : NSObject <I> { [c f]; // output: A: doing f id<I> i; // delegation [c g]; // output: A: doing g} [c toB];-(void) toA; [c f]; // output: B: doing f-(void) toB; [c g]; // output: B: doing g@end [c release]; [pool drain];@implementation C return 0;-(void) f { [i f]; } }-(void) g { [i g]; }-(void) toA { [i release]; i = [[A alloc]init]; }-(void) toB { [i release]; i = [[B alloc]init]; }
  • 9. Delegation • Delegate: a helper object can execute a task for the delegator • Delegator: delegate a task to the delegate delegate CLLocationManagerDelegate MyCoreLocationController the delegator the delegate (declare methods) (implement methods)@interface MyCoreLocationController : NSObject <CLLocationManagerDelegate> protocol
  • 10. Location in iPhone• Core Location • framework for specifying location on the planet• MapKit • graphical toolkit for displaying locations on the planet
  • 11. CoreLocation• A frameworks to manage location and heading • CLLocation (basic object) • CLLocationManager • CLHeading• No UI• How to get CLLocation? • use CLLocationManager
  • 12. CoreLocation• Where is the location? (approximately) @property (readonly) CLLocationCoordinate2D coordinate; typedef { CLLocationDegrees latitude; CLLocationDegrees longitude; } CLLocationCoordinate2D; //meters A negative value means “below sea level.” @property(readonly)CLLocationDistancealtitude;
  • 13. CoreLocation• How does it know the location? • GPS • Wifi • Cell network• The more accurate the technology, the more power it costs
  • 14. CLLocationManager• General approach • Check to see if the hardware you are on/user supports the kind of location updating you want. • Create a CLLocationManager instance and set a delegate to receive updates. • Configure the manager according to what kind of location updating you want. • Start the manager monitoring for location changes.
  • 15. CoreLocation• Accuracy-based continuous location monitoring @propertyCLLocationAccuracydesiredAccuracy; @property CLLocationDistance distanceFilter;• Start the monitoring - (void)startUpdatingLocation; - (void)stopUpdatingLocation;• Get notified via the CLLocationManager’s delegate - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation;
  • 16. MapKit• Display a map• Show user location• Add annotations on a map
  • 17. MKMapView• 2 ways to create a map • create with alloc/init • drag from Library in Interface builder• MKAnnotation
  • 18. MKMapView • Controlling the region the map is displaying @property MKCoordinateRegion region; typedef struct { CLLocationCoordinate2D center; MKCoordinateSpan span; } MKCoordinateRegion; typedef struct { CLLocationDegrees latitudeDelta; CLLocationDegrees longitudeDelta; } // animated version - (void)setRegion:(MKCoordinateRegion)region animated:(BOOL)animated; • Can also set the center point only@property CLLocationCoordinate2D centerCoordinate;- (void)setCenterCoordinate:(CLLocationCoordinate2D)center animated:(BOOL)animated;
  • 19. MKAnnotationHow to add an annotation on a map? - implement a customized annotation using MKAnnotation protocol @protocol MKAnnotation <NSObject> @property (readonly) CLLocationCoordinate2D coordinate; @optional @property (readonly) NSString *title; @property (readonly) NSString *subtitle; @end typedef { CLLocationDegrees latitude; CLLocationDegrees longitude; } CLLocationCoordinate2D; - add annotation to MKMapView [mapView addAnnotation:myannotation];
  • 20. #import <Foundation/Foundation.h>#import <MapKit/MapKit.h>@interface MyAnnotation : NSObject <MKAnnotation>{ CLLocationCoordinate2D coordinate; NSString * title; NSString * subtitle;}@property (nonatomic, assign) CLLocationCoordinate2D coordinate;@property (nonatomic, copy) NSString * title;@property (nonatomic, copy) NSString * subtitle;- (id)initWithCoordinate:(CLLocationCoordinate2D)coord;@end MyAnnotation.h#import "MyAnnotation.h"@implementation MyAnnotation@synthesize coordinate;@synthesize title;@synthesize subtitle;- (id)initWithCoordinate:(CLLocationCoordinate2D)coord { self = [super init]; if (self) { coordinate = coord; } return self;}- (void) dealloc{ [title release];! [subtitle release]; [super dealloc];}@end MyAnnotation.m
  • 21. Google Map APIA geolocation api request: http://maps.googleapis.com/maps/api/geocode/output?parameters https://maps.googleapis.com/maps/api/geocode/output?parametersURL parameters: - address (required) - latlng (required) - sensor (required) - bounds - region - language http://code.google.com/apis/maps/documentation/geocoding/
  • 22. http://maps.googleapis.com/maps/api/geocode/json?address=台北101&sensor=true { "results" : [ { "address_components" : [ { "long_name" : "101縣道", "short_name" : "101縣道", "types" : [ "route" ] }, { "long_name" : "New Taipei City", "short_name" : "New Taipei City", "types" : [ "administrative_area_level_2", "political" ] }, { "long_name" : "Taiwan", "short_name" : "TW", "types" : [ "country", "political" ] } ], "formatted_address" : "Taiwan, New Taipei City, 101縣道", "geometry" : { "bounds" : { "northeast" : { "lat" : 25.26163510, "lng" : 121.51636480 }, "southwest" : { "lat" : 25.17235040, "lng" : 121.44038660
  • 23. http://maps.googleapis.com/maps/api/geocode/xml?address=台北101&sensor=true <?xml version="1.0" encoding="UTF-8"?> <GeocodeResponse> <status>OK</status> <result> <type>route</type> <formatted_address>Taiwan, New Taipei City, 101縣道</formatted_address> <address_component> <long_name>101縣道</long_name> <short_name>101縣道</short_name> <type>route</type> </address_component> <address_component> <long_name>New Taipei City</long_name> <short_name>New Taipei City</short_name> <type>administrative_area_level_2</type> <type>political</type> </address_component> <address_component> <long_name>Taiwan</long_name> <short_name>TW</short_name> <type>country</type> <type>political</type> </address_component> <geometry> <location> <lat>25.2012026</lat>
  • 24. http://maps.google.com/maps/geo?q=台北101 { "name": "台北101", "Status": { "code": 200, "request": "geocode" }, "Placemark": [ { "id": "p1", "address": "Taiwan, New Taipei City, 101縣道", "AddressDetails": { "Accuracy" : 6, "Country" : { "AdministrativeArea" : { "AdministrativeAreaName" : "新北市", "Thoroughfare" : { "ThoroughfareName" : "101縣道" }http://maps.google.com/maps/geo?q=台北101&output=csv 200,6,25.2012026,121.4937590
  • 25. Location-based iPhone Implementation
  • 26. Hello Location - get user current location - show a map - show current location - show location information
  • 27. Hello Map - add an annotation on a map - add title and subtitle on this annotation
  • 28. Hello Address - query an address using google geolocation api - show the result on the map

×