ProMotion-amap 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3d553efc4a20071ec4a296503fc1aea40cadcc3c
4
+ data.tar.gz: 4264934552eed6acc9d861bf12b57083c9355621
5
+ SHA512:
6
+ metadata.gz: 742d5731c72d41e998a6993d1d4ce83964dc87aac7d571aaecb404cdcd9a5afd7ffe5a02c6458ac0c5cd9810b4129c715c9b01e24f3e0e1b3466f002fdccb07b
7
+ data.tar.gz: 6e528ce3640347edbe261cbbf119d175c9d7e7efa6a09ffca6b6931929ba903eba4a8e814d85e4842954ddf221602372bdd906e52f3cf0290936b947160c8f5a
@@ -0,0 +1,269 @@
1
+ # ProMotion-amap
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/ProMotion-map.svg)](http://badge.fury.io/rb/ProMotion-map) [![Build Status](https://travis-ci.org/clearsightstudio/ProMotion-map.svg)](https://travis-ci.org/clearsightstudio/ProMotion-map) [![Code Climate](https://codeclimate.com/github/clearsightstudio/ProMotion-map.png)](https://codeclimate.com/github/clearsightstudio/ProMotion-map)
4
+
5
+ ProMotion-map provides a PM::MapScreen, extracted from the
6
+ popular RubyMotion gem [ProMotion](https://github.com/clearsightstudio/ProMotion).
7
+ AMap link: http://lbs.amap.com/api/ios-sdk/summary/
8
+
9
+ ## Installation
10
+
11
+ ```ruby
12
+ gem 'ProMotion-map'
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ Easily create a map screen, complete with annotations.
18
+
19
+ *Has all the methods of PM::Screen*
20
+
21
+ ```ruby
22
+ class MyMapScreen < PM::MapScreen
23
+ title "My Map"
24
+ start_position latitude: 35.090648651123, longitude: -82.965972900391, radius: 4
25
+
26
+ def annotation_data
27
+ [{
28
+ longitude: -82.965972900391,
29
+ latitude: 35.090648651123,
30
+ title: "Rainbow Falls",
31
+ subtitle: "Nantahala National Forest",
32
+ action: :show_forest
33
+ },{
34
+ longitude: -82.966093558105,
35
+ latitude: 35.092520895652,
36
+ title: "Turtleback Falls",
37
+ subtitle: "Nantahala National Forest",
38
+ action: :show_forest
39
+ },{
40
+ longitude: -82.95916,
41
+ latitude: 35.07496,
42
+ title: "Windy Falls",
43
+ action: :show_forest
44
+ },{
45
+ longitude: -82.943031505056,
46
+ latitude: 35.102516828489,
47
+ title: "Upper Bearwallow Falls",
48
+ subtitle: "Gorges State Park",
49
+ action: :show_forest
50
+ },{
51
+ longitude: -82.956244328014,
52
+ latitude: 35.085548421623,
53
+ title: "Stairway Falls",
54
+ subtitle: "Gorges State Park",
55
+ your_param: "CustomWhatever",
56
+ action: :show_forest
57
+ }, {
58
+ longitude: -82.965972900391,
59
+ latitude: 35.090648651123,
60
+ title: "Rainbow Falls",
61
+ subtitle: "Nantahala National Forest",
62
+ image: UIImage.imageNamed("custom-pin"),
63
+ action: :show_forest
64
+ }]
65
+ end
66
+
67
+ def show_forest
68
+ selected = selected_annotations.first
69
+ # Do something with the selected annotation.
70
+ end
71
+ end
72
+ ```
73
+
74
+ Here's a neat way to zoom into a specific marker in an animated fashion and then select the marker:
75
+
76
+ ```ruby
77
+ def zoom_to_marker(marker)
78
+ set_region region(coordinate: marker.coordinate, span: [0.05, 0.05])
79
+ select_annotation marker
80
+ end
81
+ ```
82
+
83
+ ---
84
+
85
+ ### Methods
86
+
87
+ #### annotation_data
88
+
89
+ Method that is called to get the map's annotation data and build the map. If you do not want any annotations, simply return an empty array.
90
+
91
+ All possible properties:
92
+
93
+ ```ruby
94
+ {
95
+ longitude: -82.956244328014, # REQUIRED
96
+ latitude: 35.085548421623, # REQUIRED
97
+ title: "Stairway Falls", # REQUIRED
98
+ subtitle: "Gorges State Park",
99
+ image: "my_custom_image",
100
+ left_accessory: my_button,
101
+ right_accessory: my_other_button,
102
+ action: :my_action, # Overrides :right_accessory
103
+ action_button_type: UIButtonTypeContactAdd # Defaults to UIButtonTypeDetailDisclosure
104
+ }
105
+ ```
106
+
107
+ You may pass whatever properties you want in the annotation hash, but `:longitude`, `:latitude`, and `:title` are required.
108
+
109
+ Use `:image` to specify a custom image. Pass in a string to conserve memory and it will be converted using `UIImage.imageNamed(your_string)`. If you pass in a `UIImage`, we'll use that, but keep in mind that there will be another unnecessary copy of the UIImage in memory.
110
+
111
+ Use `:left_accessory` and `:right_accessory` to specify a custom accessory, like a button.
112
+
113
+ You can access annotation data you've arbitrarily stored in the hash by calling `annotation_instance.params[:your_param]`.
114
+
115
+ The `:action` parameter specifies a method that should be run when the detail button is tapped on the annotation. It automatically adds a `UIButtonTypeDetailDisclosure` button to the `:left_accessory`. In your method you can find out which annotation's accessory was tapped by calling `selected_annotations.first`.
116
+
117
+ #### update_annotation_data
118
+
119
+ Forces a reload of all the annotations
120
+
121
+ #### annotations
122
+
123
+ Returns an array of all the annotations.
124
+
125
+ #### center
126
+
127
+ Returns a `CLLocation2D` instance with the center coordinates of the map.
128
+
129
+ #### center=({latitude: Float, longitude: Float, animated: Boolean})
130
+
131
+ Sets the center of the map. `animated` property defaults to `true`.
132
+
133
+ #### show_user_location
134
+
135
+ Shows the user's location on the map.
136
+
137
+ ##### iOS 8 Location Requirements
138
+
139
+ iOS 8 introduced stricter location services requirements. You are now required to add a few key/value pairs to the `Info.plist`. Add these two lines to your `Rakefile` (with your descriptions, obviously):
140
+
141
+ ```ruby
142
+ app.info_plist['NSLocationAlwaysUsageDescription'] = 'Description'
143
+ app.info_plist['NSLocationWhenInUseUsageDescription'] = 'Description'
144
+ ```
145
+
146
+ *Note: you need both keys to use `get_once`, so it's probably best to just include both no matter what.* See [Apple's documentation](https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW18) on iOS 8 location services requirements for more information.
147
+
148
+ #### hide_user_location
149
+
150
+ Hides the user's location on the map.
151
+
152
+ #### showing_user_location?
153
+
154
+ Returns a `Boolean` of whether or not the map view is currently showing the user's location.
155
+
156
+ #### user_location
157
+
158
+ Returns a `CLLocation2D` object of the user's location or `nil` if the user location is not being tracked
159
+
160
+ #### zoom_to_user(radius = 0.05, animated=true)
161
+
162
+ Zooms to the user's location. If the user's location is not currently being shown on the map, it will show it first. `radius` is a `CLLocationDegrees` of the latitude and longitude deltas. _See Apple documentation for `MKCoordinateSpan` for more information._
163
+
164
+ #### select_annotation(annotation, animated=true)
165
+
166
+ Selects a single annotation.
167
+
168
+ #### select_annotation_at(annotation_index, animated=true)
169
+
170
+ Selects a single annotation using the annotation at the index of your `annotation_data` array.
171
+
172
+ #### selected_annotations
173
+
174
+ Returns an array of annotations that are selected. If no annotations are selected, returns `nil`.
175
+
176
+ #### deselect_annotations(animated=false)
177
+
178
+ Deselects all selected annotations.
179
+
180
+ #### add_annotation(annotation)
181
+
182
+ Adds a new annotation to the map. Refer to `annotation_data` (above) for hash properties.
183
+
184
+ #### add_annotations(annotations)
185
+
186
+ Adds more than one annotation at a time to the map.
187
+
188
+ #### clear_annotations
189
+
190
+ Removes all annotations from the `MapScreen`.
191
+
192
+ #### zoom_to_fit_annotations({animated:true, include_user:false})
193
+
194
+ Changes the zoom and center point of the `MapScreen` to fit all the annotations. Passing `include_user` as `true` will cause the zoom to not only include the annotations from `annotation_data` but also the user pin in the zoom region calculation.
195
+
196
+ #### set_region(region, animated=true)
197
+
198
+ Sets the region of the `MapScreen`. `region` should be an instance of `MKCoordinateRegion`.
199
+
200
+ #### region(params)
201
+
202
+ Helper method to create an `MKCoordinateRegion`. Expects a hash in the form of:
203
+
204
+ ```ruby
205
+ my_region = region({
206
+ coordinate:{
207
+ latitude: 35.0906,
208
+ longitude: -82.965
209
+ },
210
+ # span is the latitude and longitude delta
211
+ span: [0.5, 0.5]
212
+ })
213
+ ```
214
+
215
+ ---
216
+
217
+ ### Class Methods
218
+
219
+ #### start_position(latitude: Float, longitude: Float, radius: Float)
220
+
221
+ Class method to set the initial starting position of the `MapScreen`.
222
+
223
+ ```ruby
224
+ class MyMapScreen < PM::MapScreen
225
+ start_position latitude: 36.10, longitude: -80.26, radius: 4
226
+ end
227
+ ```
228
+
229
+ `radius` is the zoom level of the map in miles (default: 10).
230
+
231
+ ---
232
+
233
+ ### CocoaTouch Property Convenience Methods
234
+
235
+ `MKMapView` contains multiple property setters and getters that can be accessed in a more ruby-like syntax:
236
+
237
+ ```ruby
238
+ type # Returns a MKMapType
239
+ type = (MKMapType)new_type
240
+
241
+ zoom_enabled?
242
+ zoom_enabled = (bool)enabled
243
+
244
+ scroll_enabled?
245
+ scroll_enabled = (bool)enabled
246
+
247
+ pitch_enabled?
248
+ pitch_enabled = (bool)enabled
249
+
250
+ rotate_enabled?
251
+ rotate_enabled = (bool)enabled
252
+ ```
253
+
254
+ ---
255
+
256
+ ### Accessors
257
+
258
+ #### `map` or `mapview`
259
+
260
+ Reference to the created UIMapView.
261
+
262
+ ## Contributing
263
+
264
+ 1. Fork it
265
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
266
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
267
+ 4. Make some specs pass
268
+ 5. Push to the branch (`git push origin my-new-feature`)
269
+ 6. Create new Pull Request
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+ require 'motion-cocoapods'
3
+ unless defined?(Motion::Project::Config)
4
+ raise "ProMotion-map must be required within a RubyMotion project."
5
+ end
6
+
7
+ Motion::Project::App.setup do |app|
8
+ lib_dir_path = File.dirname(File.expand_path(__FILE__))
9
+ app.files << File.join(lib_dir_path, "ProMotion/map/map_screen_annotation.rb")
10
+ app.files << File.join(lib_dir_path, "ProMotion/map/map_screen_module.rb")
11
+ app.files << File.join(lib_dir_path, "ProMotion/map/map_screen.rb")
12
+
13
+ app.frameworks += %w(CoreLocation MapKit)
14
+
15
+ app.pods do
16
+ pod 'AMap2DMap', '~> 2.4.2'
17
+ end
18
+ end
@@ -0,0 +1,6 @@
1
+ module ProMotion
2
+ class MapScreen < ViewController
3
+ include ProMotion::ScreenModule
4
+ include ProMotion::MapScreenModule
5
+ end
6
+ end
@@ -0,0 +1,67 @@
1
+ module ProMotion
2
+ class MapScreenAnnotation
3
+ attr_reader :params
4
+
5
+ # Creates the new annotation object
6
+ def initialize(params = {})
7
+ @params = params
8
+ set_defaults
9
+
10
+ unless @params[:latitude] && @params[:longitude]
11
+ PM.logger.error("You are required to specify :latitude and :longitude for annotations.")
12
+ return nil
13
+ end
14
+ @coordinate = CLLocationCoordinate2D.new(@params[:latitude], @params[:longitude])
15
+ end
16
+
17
+ def set_defaults
18
+ @params = {
19
+ title: "Title",
20
+ pin_color: MAPinAnnotationColorRed,
21
+ identifier: "Annotation-#{@params[:pin_color]}-#{@params[:image]}",
22
+ show_callout: true,
23
+ animates_drop: false
24
+ }.merge(@params)
25
+ end
26
+
27
+ def title
28
+ @params[:title]
29
+ end
30
+
31
+ def subtitle
32
+ @params[:subtitle] ||= nil
33
+ end
34
+
35
+ def coordinate
36
+ @coordinate
37
+ end
38
+
39
+ def cllocation
40
+ CLLocation.alloc.initWithLatitude(@params[:latitude], longitude:@params[:longitude])
41
+ end
42
+
43
+ def setCoordinate(new_coordinate);
44
+ if new_coordinate.is_a? Hash
45
+ @coordinate = CLLocationCoordinate2D.new(new_coordinate[:latitude], new_coordinate[:longitude])
46
+ else
47
+ @coordinate = new_coordinate
48
+ end
49
+ end
50
+
51
+ def method_missing(meth, *args)
52
+ if @params[meth.to_sym]
53
+ @params[meth.to_sym]
54
+ else
55
+ PM.logger.warn "The annotation parameter \"#{meth}\" does not exist on this pin."
56
+ nil
57
+ end
58
+ end
59
+
60
+ # Deprecated
61
+ def annotation_params
62
+ PM.logger.warn("annotation.annotation_params is deprecated and will be removed soon. Please use annotation.params instead.")
63
+ @params
64
+ end
65
+
66
+ end
67
+ end
@@ -0,0 +1,308 @@
1
+ module ProMotion
2
+ module MapScreenModule
3
+
4
+ def screen_setup
5
+ self.view = nil
6
+ NSLog NSBundle.mainBundle.bundleIdentifier
7
+ MAMapServices.sharedServices.apiKey = "d479b065447f24f12381a58a1aa41f00"
8
+ self.view = MAMapView.alloc.initWithFrame(self.view.bounds)
9
+ self.view.delegate = self
10
+
11
+ check_annotation_data
12
+ @promotion_annotation_data = []
13
+ set_up_start_position
14
+ end
15
+
16
+ def view_will_appear(animated)
17
+ super
18
+ update_annotation_data
19
+ end
20
+
21
+ def check_annotation_data
22
+ PM.logger.error "Missing #annotation_data method in MapScreen #{self.class.to_s}." unless self.respond_to?(:annotation_data)
23
+ end
24
+
25
+ def update_annotation_data
26
+ clear_annotations
27
+ add_annotations annotation_data
28
+ end
29
+
30
+ def map
31
+ self.view
32
+ end
33
+ alias_method :mapview, :map
34
+
35
+ def center
36
+ self.view.centerCoordinate
37
+ end
38
+
39
+ def center=(params={})
40
+ PM.logger.error "Missing #:latitude property in call to #center=." unless params[:latitude]
41
+ PM.logger.error "Missing #:longitude property in call to #center=." unless params[:longitude]
42
+ params[:animated] ||= true
43
+
44
+ # Set the new region
45
+ self.view.setCenterCoordinate(
46
+ CLLocationCoordinate2D.new(params[:latitude], params[:longitude]),
47
+ animated:params[:animated]
48
+ )
49
+ end
50
+
51
+ def show_user_location
52
+ if location_manager.respondsToSelector('requestWhenInUseAuthorization')
53
+ location_manager.requestWhenInUseAuthorization
54
+ end
55
+
56
+ set_show_user_location true
57
+ end
58
+
59
+ def hide_user_location
60
+ set_show_user_location false
61
+ end
62
+
63
+ def set_show_user_location(show)
64
+ self.view.showsUserLocation = show
65
+ end
66
+
67
+ def showing_user_location?
68
+ self.view.showsUserLocation
69
+ end
70
+
71
+ def user_location
72
+ user_annotation.nil? ? nil : user_annotation.coordinate
73
+ end
74
+
75
+ def user_annotation
76
+ self.view.userLocation.location.nil? ? nil : self.view.userLocation.location
77
+ end
78
+
79
+ def zoom_to_user(radius = 0.05, animated=true)
80
+ show_user_location unless showing_user_location?
81
+ set_region(MACoordinateRegionMakeWithDistance(user_location, radius, radius), animated)
82
+ end
83
+
84
+ def annotations
85
+ @promotion_annotation_data
86
+ end
87
+
88
+ def select_annotation(annotation, animated=true)
89
+ self.view.selectAnnotation(annotation, animated:animated)
90
+ end
91
+
92
+ def select_annotation_at(annotation_index, animated=true)
93
+ select_annotation(annotations[annotation_index], animated:animated)
94
+ end
95
+
96
+ def selected_annotations
97
+ self.view.selectedAnnotations
98
+ end
99
+
100
+ def deselect_annotations(animated=false)
101
+ unless selected_annotations.nil?
102
+ selected_annotations.each do |annotation|
103
+ self.view.deselectAnnotation(annotation, animated:animated)
104
+ end
105
+ end
106
+ end
107
+
108
+ def add_annotation(annotation)
109
+ @promotion_annotation_data << MapScreenAnnotation.new(annotation)
110
+ self.view.addAnnotation @promotion_annotation_data.last
111
+ end
112
+
113
+ def add_annotations(annotations)
114
+ @promotion_annotation_data = Array(annotations).map{|a| MapScreenAnnotation.new(a)}
115
+ self.view.addAnnotations @promotion_annotation_data
116
+ end
117
+
118
+ def clear_annotations
119
+ @promotion_annotation_data.each do |a|
120
+ self.view.removeAnnotation(a)
121
+ end
122
+ @promotion_annotation_data = []
123
+ end
124
+
125
+ def annotation_view(map_view, annotation)
126
+ return if annotation.is_a? MAUserLocation
127
+
128
+ params = annotation.params
129
+
130
+ identifier = params[:identifier]
131
+ if view = map_view.dequeueReusableAnnotationViewWithIdentifier(identifier)
132
+ view.annotation = annotation
133
+ else
134
+ # Set the pin properties
135
+ if params[:image]
136
+ view = MAAnnotationView.alloc.initWithAnnotation(annotation, reuseIdentifier:identifier)
137
+ else
138
+ view = MAPinAnnotationView.alloc.initWithAnnotation(annotation, reuseIdentifier:identifier)
139
+ end
140
+ end
141
+ view.image = params[:image] if view.respond_to?("image=") && params[:image]
142
+ view.animatesDrop = params[:animates_drop] if view.respond_to?("animatesDrop=")
143
+ view.pinColor = params[:pin_color] if view.respond_to?("pinColor=")
144
+ view.canShowCallout = params[:show_callout] if view.respond_to?("canShowCallout=")
145
+
146
+ if params[:left_accessory]
147
+ view.leftCalloutAccessoryView = params[:left_accessory]
148
+ end
149
+ if params[:right_accessory]
150
+ view.rightCalloutAccessoryView = params[:right_accessory]
151
+ end
152
+
153
+ if params[:action]
154
+ button_type = params[:action_button_type] || UIButtonTypeDetailDisclosure
155
+
156
+ action_button = UIButton.buttonWithType(button_type)
157
+ action_button.addTarget(self, action: params[:action], forControlEvents:UIControlEventTouchUpInside)
158
+
159
+ view.rightCalloutAccessoryView = action_button
160
+ end
161
+ view
162
+ end
163
+
164
+ def set_start_position(params={})
165
+ params[:latitude] ||= 37.331789
166
+ params[:longitude] ||= -122.029620
167
+ params[:radius] ||= 10
168
+
169
+ meters_per_mile = 1609.344
170
+
171
+ initialLocation = CLLocationCoordinate2D.new(params[:latitude], params[:longitude])
172
+ region = MACoordinateRegionMakeWithDistance(initialLocation, params[:radius] * meters_per_mile, params[:radius] * meters_per_mile)
173
+ set_region(region, animated:false)
174
+ end
175
+
176
+ def set_up_start_position
177
+ if self.class.respond_to?(:get_start_position) && self.class.get_start_position
178
+ self.set_start_position self.class.get_start_position_params
179
+ end
180
+ end
181
+
182
+ # TODO: Why is this so complex?
183
+ def zoom_to_fit_annotations(args={})
184
+ # Preserve backwards compatibility
185
+ args = {animated: args} if args == true || args == false
186
+ args = {animated: true, include_user: false}.merge(args)
187
+
188
+ ann = args[:include_user] ? (annotations + [user_annotation]).compact : annotations
189
+
190
+ #Don't attempt the rezoom of there are no pins
191
+ return if ann.count == 0
192
+
193
+ #Set some crazy boundaries
194
+ topLeft = CLLocationCoordinate2D.new(-90, 180)
195
+ bottomRight = CLLocationCoordinate2D.new(90, -180)
196
+
197
+ #Find the bounds of the pins
198
+ ann.each do |a|
199
+ topLeft.longitude = [topLeft.longitude, a.coordinate.longitude].min
200
+ topLeft.latitude = [topLeft.latitude, a.coordinate.latitude].max
201
+ bottomRight.longitude = [bottomRight.longitude, a.coordinate.longitude].max
202
+ bottomRight.latitude = [bottomRight.latitude, a.coordinate.latitude].min
203
+ end
204
+
205
+ #Find the bounds of all the pins and set the map_view
206
+ coord = CLLocationCoordinate2D.new(
207
+ topLeft.latitude - (topLeft.latitude - bottomRight.latitude) * 0.5,
208
+ topLeft.longitude + (bottomRight.longitude - topLeft.longitude) * 0.5
209
+ )
210
+
211
+ # Add some padding to the edges
212
+ #span = MACoordinateSpanMake(
213
+ # long = ((topLeft.latitude - bottomRight.latitude) * 1.075).abs,
214
+ # lat = ((bottomRight.longitude - topLeft.longitude) * 1.075).abs
215
+ #)
216
+
217
+ region = MACoordinateRegionMakeWithDistance(coord, long, lat)
218
+ fits = self.view.regionThatFits(region)
219
+
220
+ set_region(fits, animated: args[:animated])
221
+ end
222
+
223
+ def set_region(region, animated=true)
224
+ self.view.setRegion(region, animated:animated)
225
+ end
226
+
227
+ def region(params)
228
+ return nil unless params.is_a? Hash
229
+
230
+ params[:coordinate] = CLLocationCoordinate2D.new(params[:coordinate][:latitude], params[:coordinate][:longitude]) if params[:coordinate].is_a? Hash
231
+ #params[:span] = MACoordinateSpanMake(params[:span][0], params[:span][1]) if params[:span].is_a? Array
232
+
233
+ if params[:coordinate] && params[:span]
234
+ MACoordinateRegionMakeWithDistance( params[:coordinate], params[:span][0], params[:span][1] )
235
+ end
236
+ end
237
+
238
+ def look_up_address(args={}, &callback)
239
+ args[:address] = args if args.is_a? String # Assume if a string is passed that they want an address
240
+
241
+ geocoder = CLGeocoder.new
242
+ return geocoder.geocodeAddressDictionary(args[:address], completionHandler: callback) if args[:address].is_a?(Hash)
243
+ return geocoder.geocodeAddressString(args[:address].to_s, completionHandler: callback) unless args[:region]
244
+ return geocoder.geocodeAddressString(args[:address].to_s, inRegion:args[:region].to_s, completionHandler: callback) if args[:region]
245
+ end
246
+
247
+ ########## Cocoa touch methods #################
248
+ def mapView(map_view, viewForAnnotation:annotation)
249
+ annotation_view(map_view, annotation)
250
+ end
251
+
252
+ def mapView(map_view, didUpdateUserLocation:userLocation)
253
+ if self.respond_to?(:on_user_location)
254
+ on_user_location(userLocation)
255
+ else
256
+ PM.logger.info "You're tracking the user's location but have not implemented the #on_user_location(location) method in MapScreen #{self.class.to_s}."
257
+ end
258
+ end
259
+
260
+ ########## Cocoa touch Ruby counterparts #################
261
+
262
+ def type
263
+ map.mapType
264
+ end
265
+
266
+ def type=(type)
267
+ map.mapType = type
268
+ end
269
+
270
+ %w(zoom scroll pitch rotate).each do |meth|
271
+ define_method("#{meth}_enabled?") do
272
+ map.send("is#{meth.capitalize}Enabled")
273
+ end
274
+
275
+ define_method("#{meth}_enabled=") do |argument|
276
+ map.send("#{meth}Enabled=", argument)
277
+ end
278
+ end
279
+
280
+ module MapClassMethods
281
+ def start_position(params={})
282
+ @start_position_params = params
283
+ @start_position = true
284
+ end
285
+
286
+ def get_start_position_params
287
+ @start_position_params ||= nil
288
+ end
289
+
290
+ def get_start_position
291
+ @start_position ||= false
292
+ end
293
+ end
294
+ def self.included(base)
295
+ base.extend(MapClassMethods)
296
+ end
297
+
298
+ private
299
+
300
+ def location_manager
301
+ @location_manager ||= CLLocationManager.alloc.init
302
+ @location_manager.delegate ||= self
303
+ @location_manager
304
+ end
305
+
306
+
307
+ end
308
+ end
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ProMotion-amap
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.0
5
+ platform: ruby
6
+ authors:
7
+ - Mark Rickert
8
+ - Jamon Holmgren
9
+ - David Ruan
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2015-02-05 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: ProMotion
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '2.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '2.0'
29
+ - !ruby/object:Gem::Dependency
30
+ name: motion-cocoapods
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '1'
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '1'
43
+ - !ruby/object:Gem::Dependency
44
+ name: motion-stump
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '0.3'
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '0.3'
57
+ - !ruby/object:Gem::Dependency
58
+ name: motion-redgreen
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '0.1'
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '0.1'
71
+ - !ruby/object:Gem::Dependency
72
+ name: rake
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ description: Adds PM::MapScreen support to ProMotion. Using AMap
86
+ email:
87
+ - mark@mohawkapps.com
88
+ - jamon@clearsightstudio.com
89
+ executables: []
90
+ extensions: []
91
+ extra_rdoc_files: []
92
+ files:
93
+ - README.md
94
+ - lib/ProMotion-map.rb
95
+ - lib/ProMotion/map/map_screen.rb
96
+ - lib/ProMotion/map/map_screen_annotation.rb
97
+ - lib/ProMotion/map/map_screen_module.rb
98
+ homepage: https://github.com/ruanwz/ProMotion-amap
99
+ licenses:
100
+ - MIT
101
+ metadata: {}
102
+ post_install_message:
103
+ rdoc_options: []
104
+ require_paths:
105
+ - lib
106
+ required_ruby_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ required_rubygems_version: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ requirements: []
117
+ rubyforge_project:
118
+ rubygems_version: 2.4.5
119
+ signing_key:
120
+ specification_version: 4
121
+ summary: Adds PM::MapScreen support to ProMotion. Extracted from ProMotion.
122
+ test_files: []