ProMotion-mapbox 0.1.3 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 26efa825778c8d404ae1b130789880090096ad49
4
- data.tar.gz: 60f111c8d989685b78ebd3aae625b3d26ce3f566
3
+ metadata.gz: 5c26888901adec0750d41242b2120fb1c6d2e73c
4
+ data.tar.gz: 7340940dd5deb688654f3f3b47cd0124e5932f81
5
5
  SHA512:
6
- metadata.gz: 3055a5af508968019dea7844bb218e8bf73136698a18999d81d02cc40adb7b6b4e25d131c975a8c302758c1b0aa1f5ebbc8babba3661249dfd6562c3c74c3f63
7
- data.tar.gz: b56900cc7a9d02c5e45f8992d9a6682297c56fdc17881a1901cbdfd6ab906e4996e534095291b900a26ccd0eae9814594ab5e87d05a74037c6e7c708cf4f0166
6
+ metadata.gz: 79a7d189d2a8a1cd8d2c8f68a56c432139ab83e386e33e67b4134fe084f6f52400a7b8564bfe9a32d41c86f39eb5742c6ccfe5c4ae097bf8afdccf53e16e8d18
7
+ data.tar.gz: b0eb414d8389ebaf6fd139dfc88765fc729a4c488424f6f8ece6c27e8a7516939db93be252e6d4c772c17b390b38a80f39796d4a5ef94145840be7237b008107
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/ProMotion-mapbox.svg)](http://badge.fury.io/rb/ProMotion-mapbox)
4
4
 
5
- ProMotion-mapbox provides a PM::MapScreen, forked from the
5
+ ProMotion-mapbox provides a PM::MapScreen that users [Mapbox](https://www.mapbox.com) as the map provider. Forked from the
6
6
  popular RubyMotion gem [ProMotion-map](https://github.com/clearsightstudio/ProMotion-map).
7
7
 
8
8
  ## Installation
@@ -23,9 +23,6 @@ Easily create a map screen, complete with annotations.
23
23
 
24
24
  ```ruby
25
25
  class MyMapScreen < PM::MapScreen
26
- mapbox_setup access_token: "YOU_MAPBOX_ACCESS_TOKEN",
27
- tile_source: "mylogin.map"
28
-
29
26
  title "My Map"
30
27
  start_position latitude: 35.090648651123, longitude: -82.965972900391, radius: 4
31
28
  tap_to_add
@@ -36,39 +33,40 @@ class MyMapScreen < PM::MapScreen
36
33
  latitude: 35.090648651123,
37
34
  title: "Rainbow Falls",
38
35
  subtitle: "Nantahala National Forest",
39
- action: :show_forest,
36
+ left_action: :show_forest,
40
37
  pin_color: :green
41
38
  },{
42
39
  longitude: -82.966093558105,
43
40
  latitude: 35.092520895652,
44
41
  title: "Turtleback Falls",
45
42
  subtitle: "Nantahala National Forest",
46
- action: :show_forest,
47
- pin_color: :purple]
43
+ left_action: :show_forest,
44
+ left_action_button_type: UIButtonTypeContactAdd,
45
+ pin_color: :red
48
46
  },{
49
47
  longitude: -82.95916,
50
48
  latitude: 35.07496,
51
49
  title: "Windy Falls",
52
- action: :show_forest
50
+ left_action: :show_forest
53
51
  },{
54
52
  longitude: -82.943031505056,
55
53
  latitude: 35.102516828489,
56
54
  title: "Upper Bearwallow Falls",
57
55
  subtitle: "Gorges State Park",
58
- action: :show_forest
56
+ left_action: :show_forest
59
57
  },{
60
58
  longitude: -82.956244328014,
61
59
  latitude: 35.085548421623,
62
60
  title: "Stairway Falls",
63
61
  subtitle: "Gorges State Park",
64
62
  your_param: "CustomWhatever",
65
- action: :show_forest
66
- }, {
67
- coordinate: CLLocationCoordinate2DMake(35.090648651123, -82.965972900391)
63
+ right_action: :show_forest
64
+ },{
65
+ coordinate: CLLocationCoordinate2DMake(35.090648651123, -82.965972900391),
68
66
  title: "Rainbow Falls",
69
67
  subtitle: "Nantahala National Forest",
70
68
  image: UIImage.imageNamed("custom-pin"),
71
- action: :show_forest
69
+ left_action: :show_forest
72
70
  }]
73
71
  end
74
72
 
@@ -83,7 +81,7 @@ Here's a neat way to zoom into a specific marker in an animated fashion and then
83
81
 
84
82
  ```ruby
85
83
  def zoom_to_marker(marker)
86
- set_region region(coordinate: marker.coordinate, radius: 5) # Radius are specified in nautical miles.
84
+ set_region region(coordinate: marker.coordinate, radius: 5) # Radius are specified in nautical miles.
87
85
  select_annotation marker
88
86
  end
89
87
  ```
@@ -110,7 +108,7 @@ All possible properties:
110
108
  title: "Stairway Falls", # REQUIRED
111
109
  subtitle: "Gorges State Park",
112
110
  image: "my_custom_image",
113
- pin_color: :red, # Defaults to :red. Other options are :green or :purple or any UIColor
111
+ pin_color: :red, # Defaults to :red. Other options are :green or :purple. Here as a placeholder only. Modifying a marker color is not yet supported by the Mapbox GL SDK.
114
112
  left_accessory: my_button,
115
113
  right_accessory: my_other_button,
116
114
  action: :my_action, # Overrides :right_accessory
@@ -124,6 +122,8 @@ Use `:image` to specify a custom image. Pass in a string to conserve memory and
124
122
 
125
123
  Use `:left_accessory` and `:right_accessory` to specify a custom accessory, like a button.
126
124
 
125
+ Use `:left_action` and `:right_action` to specify an action for the left or right accessory view. These properties will create a button for you, and should not be used in conjunction with `:left_accessory` or `:right_accessory`. The type of the button can be specified with the optional parameter `:right_action_button_type`, and defaults to UIButtonTypeDetailDisclosure if not specified.
126
+
127
127
  You can access annotation data you've arbitrarily stored in the hash by calling `annotation_instance.params[:your_param]`.
128
128
 
129
129
  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`.
@@ -187,13 +187,13 @@ Selects a single annotation.
187
187
 
188
188
  Selects a single annotation using the annotation at the index of your `annotation_data` array.
189
189
 
190
- #### selected_annotation
190
+ #### selected_annotations
191
191
 
192
- Returns the annotation that is selected. If no annotation is selected, returns `nil`.
192
+ Returns an array of annotations that are selected. If no annotations are selected, returns `nil`.
193
193
 
194
- #### deselect_annotation(animated=false)
194
+ #### deselect_annotations(animated=false)
195
195
 
196
- Deselects any selected annotation.
196
+ Deselects all selected annotations.
197
197
 
198
198
  #### add_annotation(annotation)
199
199
 
@@ -217,7 +217,7 @@ Sets the region of the `MapScreen`. `region` should be an instance of `MKCoordin
217
217
 
218
218
  #### region(center_location,radius=10)
219
219
 
220
- Mapbox API doesn't have the concept of a region. Instead, we can zoom to a virtual bounding box defined by its Sourthwest and Northeast
220
+ Mapbox doesn't use the concept of regions. Instead, we can zoom to a virtual bounding box defined by its Sourthwest and Northeast
221
221
  corners.
222
222
  The ```region``` methods takes a ```center_location``` and a radius. The distance from the center to the corners (and thus the zoom level) will be the ```radius``` times 1820 meters (1 Nautical mile)
223
223
 
@@ -226,7 +226,6 @@ my_region = region({
226
226
  CLLocationCoordinate2D.new(35.0906,-82.965),
227
227
  radius: 11
228
228
  })
229
- ```
230
229
 
231
230
  ---
232
231
 
@@ -293,8 +292,8 @@ class MyMapScreen < PM::MapScreen
293
292
  end
294
293
 
295
294
  def will_appear
296
- NSNotificationCenter.defaultCenter.addObserver(self, selector:"pin_adding:") , name:"ProMotionMapWillAddPin", object:nil)
297
- NSNotificationCenter.defaultCenter.addObserver(self, selector:"pin_added:") , name:"ProMotionMapAddedPin", object:nil)
295
+ NSNotificationCenter.defaultCenter.addObserver(self, selector:"pin_adding:", name:"ProMotionMapWillAddPin", object:nil)
296
+ NSNotificationCenter.defaultCenter.addObserver(self, selector:"pin_added:", name:"ProMotionMapAddedPin", object:nil)
298
297
  end
299
298
 
300
299
  def will_disappear
@@ -364,7 +363,7 @@ rotate_enabled = (bool)enabled
364
363
 
365
364
  #### `map` or `mapview`
366
365
 
367
- Reference to the created RMMapView.
366
+ Reference to the created MLGMapView.
368
367
 
369
368
  ## Contributing
370
369
 
@@ -3,18 +3,14 @@ unless defined?(Motion::Project::Config)
3
3
  raise "ProMotion-mapbox must be required within a RubyMotion project."
4
4
  end
5
5
 
6
- require 'motion-cocoapods'
7
-
8
6
  Motion::Project::App.setup do |app|
9
7
  lib_dir_path = File.dirname(File.expand_path(__FILE__))
10
8
  app.files << File.join(lib_dir_path, "ProMotion/map/map_screen_annotation.rb")
11
9
  app.files << File.join(lib_dir_path, "ProMotion/map/map_screen_module.rb")
12
10
  app.files << File.join(lib_dir_path, "ProMotion/map/map_screen.rb")
13
11
 
14
- app.frameworks += %w(CoreLocation)
15
-
12
+ app.frameworks += %w(CoreLocation QuartzCore)
16
13
  app.pods do
17
- pod "Mapbox-iOS-SDK"
14
+ pod 'Mapbox-iOS-SDK'
18
15
  end
19
-
20
16
  end
@@ -1,47 +1,35 @@
1
1
  module ProMotion
2
- class MapScreenAnnotation < RMAnnotation
2
+ class MapScreenAnnotation
3
3
  attr_reader :params
4
4
 
5
- def initialize(params = {},map_view)
5
+ # Creates the new annotation object
6
+ def initialize(params = {})
6
7
  @params = params
7
- @map_view = map_view
8
8
  set_defaults
9
+
9
10
  if @params[:coordinate]
10
11
  @params[:latitude] = @params[:coordinate].latitude
11
12
  @params[:longitude] = @params[:coordinate].longitude
12
13
  @coordinate = @params[:coordinate]
13
- initWithMapView(map_view, coordinate: @coordinate, andTitle: @params[:title])
14
14
  elsif @params[:latitude] && @params[:longitude]
15
15
  @coordinate = CLLocationCoordinate2D.new(@params[:latitude], @params[:longitude])
16
- initWithMapView(map_view, coordinate: @coordinate, andTitle: @params[:title])
17
16
  else
18
17
  PM.logger.error("You are required to specify :latitude and :longitude or :coordinate for annotations.")
19
18
  nil
20
19
  end
21
- self.userInfo = @params
22
20
  end
23
-
21
+
24
22
  def set_defaults
25
- if @params.class == Hash
26
- @params = {
27
- title: "Title",
28
- pin_color: :red,
29
- identifier: "Annotation-#{@params[:pin_color]}-#{@params[:image]}",
30
- show_callout: true,
31
- animates_drop: false,
32
- maki_icon: nil,
33
- }.merge(@params)
34
- elsif @params.class == RMQuadTreeNode # Clustered pins
35
- @params = {
36
- title: @params.annotations.count,
37
- coordinate: @params.clusterAnnotation.coordinate,
38
- pin_color: :purple,
39
- identifier: "Annotation-cluster",
40
- show_callout: true,
41
- animates_drop: false,
42
- maki_icon: nil,
43
- }
44
- end
23
+ @params = {
24
+ title: "Title",
25
+ pin_color: :red,
26
+ identifier: "Annotation-#{@params[:pin_color]}-#{@params[:image]}",
27
+ show_callout: true,
28
+ animates_drop: false,
29
+ image: nil,
30
+ left_accessory: nil,
31
+ right_accessory: nil,
32
+ }.merge(@params)
45
33
  end
46
34
 
47
35
  def title
@@ -55,34 +43,27 @@ module ProMotion
55
43
  def coordinate
56
44
  @coordinate
57
45
  end
58
-
59
- def pin_color
60
- @params[:pin_color]
46
+
47
+ def left_accessory
48
+ @params[:left_accessory]
49
+ end
50
+
51
+ def right_accessory
52
+ @params[:right_accessory]
61
53
  end
62
54
 
63
55
  def cllocation
64
56
  CLLocation.alloc.initWithLatitude(@params[:latitude], longitude:@params[:longitude])
65
57
  end
66
58
 
67
- def setCoordinate(new_coordinate)
68
- super
59
+ def setCoordinate(new_coordinate);
69
60
  if new_coordinate.is_a? Hash
70
61
  @coordinate = CLLocationCoordinate2D.new(new_coordinate[:latitude], new_coordinate[:longitude])
71
62
  else
72
63
  @coordinate = new_coordinate
73
64
  end
74
65
  end
75
-
76
- def self.new_with_rmannotation(rmannotation,map_view)
77
- annotation = self.new(rmannotation.userInfo, map_view)
78
- %w(coordinate title subtitle userInfo annotationType annotationIcon
79
- position layer clusteringEnabled
80
- isClusterAnnotation isUserLocationAnnotation).each do |meth|
81
- annotation.send("#{meth}=", rmannotation.send(meth))
82
- end
83
- annotation
84
- end
85
-
66
+
86
67
  def method_missing(meth, *args)
87
68
  if @params[meth.to_sym]
88
69
  @params[meth.to_sym]
@@ -92,5 +73,11 @@ module ProMotion
92
73
  end
93
74
  end
94
75
 
76
+ # Deprecated
77
+ def annotation_params
78
+ PM.logger.warn("annotation.annotation_params is deprecated and will be removed soon. Please use annotation.params instead.")
79
+ @params
80
+ end
81
+
95
82
  end
96
83
  end
@@ -6,38 +6,22 @@ module ProMotion
6
6
  green: UIColor.greenColor,
7
7
  purple: UIColor.purpleColor
8
8
  }
9
-
9
+
10
10
  def screen_setup
11
- mapbox_setup
12
11
  self.view = nil
13
- self.view = RMMapView.alloc.initWithFrame(self.view.bounds, andTilesource:@tileSource)
12
+ self.view = MGLMapView.alloc.initWithFrame(self.view.bounds, styleURL: self.class.get_map_style)
14
13
  self.view.delegate = self
14
+
15
15
  check_annotation_data
16
16
  @promotion_annotation_data = []
17
+ set_up_start_position
17
18
  set_up_tap_to_add
18
19
  end
19
-
20
- def mapbox_setup
21
- if self.class.respond_to?(:get_mapbox_setup) && self.class.get_mapbox_setup
22
- setup_params = self.class.get_mapbox_setup_params
23
- else
24
- PM.logger.error "Missing Mapbox setup data."
25
- end
26
- RMConfiguration.sharedInstance.setAccessToken(setup_params[:access_token]) if RMConfiguration.sharedInstance.accessToken.nil?
27
- @tileSource = RMMapboxSource.alloc.initWithMapID(setup_params[:tile_source])
28
- end
29
-
30
- def view_will_appear(animated)
31
- super
20
+
21
+ def on_appear
32
22
  update_annotation_data
33
- set_up_start_center
34
23
  end
35
24
 
36
- def view_did_appear(animated)
37
- super
38
- set_up_start_region
39
- end
40
-
41
25
  def check_annotation_data
42
26
  PM.logger.error "Missing #annotation_data method in MapScreen #{self.class.to_s}." unless self.respond_to?(:annotation_data)
43
27
  end
@@ -46,7 +30,7 @@ module ProMotion
46
30
  clear_annotations
47
31
  add_annotations annotation_data
48
32
  end
49
-
33
+
50
34
  def map
51
35
  self.view
52
36
  end
@@ -80,8 +64,9 @@ module ProMotion
80
64
  set_show_user_location false
81
65
  end
82
66
 
83
- def set_show_user_location(show)
67
+ def set_show_user_location(show,mode=MGLUserTrackingModeFollow)
84
68
  self.view.showsUserLocation = show
69
+ self.view.userTrackingMode = mode
85
70
  end
86
71
 
87
72
  def showing_user_location?
@@ -93,7 +78,7 @@ module ProMotion
93
78
  end
94
79
 
95
80
  def user_annotation
96
- self.view.userLocation.nil? ? nil : self.view.userLocation.location
81
+ self.view.userLocation.location.nil? ? nil : self.view.userLocation.location
97
82
  end
98
83
 
99
84
  def zoom_to_user(radius = 0.05, animated=true)
@@ -113,65 +98,36 @@ module ProMotion
113
98
  select_annotation(annotations[annotation_index], animated:animated)
114
99
  end
115
100
 
116
- def selected_annotation
117
- self.view.selectedAnnotation
101
+ def selected_annotations
102
+ self.view.selectedAnnotations
118
103
  end
119
104
 
120
- def deselect_annotation(animated=false)
121
- unless selected_annotation.nil?
122
- self.view.deselectAnnotation(selected_annotation, animated:animated)
105
+ def deselect_annotations(animated=false)
106
+ unless selected_annotations.nil?
107
+ selected_annotations.each do |annotation|
108
+ self.view.deselectAnnotation(annotation, animated:animated)
109
+ end
123
110
  end
124
111
  end
125
112
 
126
113
  def add_annotation(annotation)
127
- @promotion_annotation_data << MapScreenAnnotation.new(annotation,self.view)
114
+ @promotion_annotation_data << MapScreenAnnotation.new(annotation)
128
115
  self.view.addAnnotation @promotion_annotation_data.last
129
116
  end
130
117
 
131
118
  def add_annotations(annotations)
132
- @promotion_annotation_data = Array(annotations).map{|a| MapScreenAnnotation.new(a,self.view)}
119
+ @promotion_annotation_data = Array(annotations).map{|a| MapScreenAnnotation.new(a)}
133
120
  self.view.addAnnotations @promotion_annotation_data
134
121
  end
135
122
 
136
- def clear_annotations
137
- @promotion_annotation_data.each do |a|
138
- self.view.removeAnnotation(a)
139
- end
140
- @promotion_annotation_data = []
123
+ def clear_annotation(annotation)
124
+ self.view.removeAnnotation(annotation)
125
+ @promotion_annotation_data.delete(annotation)
141
126
  end
142
127
 
143
- def annotation_view(map_view, annotation)
144
- return if annotation.is_a? RMUserLocation
145
-
146
- params = annotation.params
147
-
148
- identifier = params[:identifier]
149
- # Set the pin properties
150
- if params[:image]
151
- view = RMMarker.alloc.initWithUIImage(params[:image])
152
- else
153
- pinColor = (PIN_COLORS[params[:pin_color]] || params[:pin_color])
154
- view = RMMarker.alloc.initWithMapboxMarkerImage(params[:maki_icon], tintColor: pinColor)
155
- end
156
- view.annotation = annotation
157
- view.canShowCallout = params[:show_callout] if view.respond_to?("canShowCallout=")
158
-
159
- if params[:left_accessory]
160
- view.leftCalloutAccessoryView = params[:left_accessory]
161
- end
162
- if params[:right_accessory]
163
- view.rightCalloutAccessoryView = params[:right_accessory]
164
- end
165
-
166
- if params[:action]
167
- button_type = params[:action_button_type] || UIButtonTypeDetailDisclosure
168
-
169
- action_button = UIButton.buttonWithType(button_type)
170
- action_button.addTarget(self, action: params[:action], forControlEvents:UIControlEventTouchUpInside)
171
-
172
- view.rightCalloutAccessoryView = action_button
173
- end
174
- view
128
+ def clear_annotations
129
+ self.view.removeAnnotations(@promotion_annotation_data)
130
+ @promotion_annotation_data = []
175
131
  end
176
132
 
177
133
  def set_start_position(params={})
@@ -180,26 +136,15 @@ module ProMotion
180
136
  longitude: -122.029620,
181
137
  radius: 10
182
138
  }.merge(params)
139
+
183
140
  initialLocation = CLLocationCoordinate2D.new(params[:latitude], params[:longitude])
184
141
  region = create_region(initialLocation,params[:radius])
185
142
  set_region(region, animated:false)
186
143
  end
187
144
 
188
- def set_up_start_region
145
+ def set_up_start_position
189
146
  if self.class.respond_to?(:get_start_position) && self.class.get_start_position
190
- start_params = self.class.get_start_position_params
191
- self.set_start_position start_params unless start_params[:radius].nil?
192
- end
193
- end
194
-
195
- def set_up_start_center
196
- if self.class.respond_to?(:get_start_position) && self.class.get_start_position
197
- start_params = self.class.get_start_position_params
198
- start_params[:zoom] ||= 5
199
- self.view.setZoom(start_params[:zoom], atCoordinate:
200
- CLLocationCoordinate2D.new(start_params[:latitude], start_params[:longitude]),
201
- animated: false
202
- )
147
+ self.set_start_position self.class.get_start_position_params
203
148
  end
204
149
  end
205
150
 
@@ -281,13 +226,13 @@ module ProMotion
281
226
  end
282
227
 
283
228
  def set_region(region, animated=true)
284
- self.view.zoomWithLatitudeLongitudeBoundsSouthWest(
285
- region[:southWest],
286
- northEast: region[:northEast],
229
+ self.view.setVisibleCoordinateBounds(
230
+ [region[:southWest], region[:northEast]],
287
231
  animated: animated
288
232
  )
289
233
  end
290
-
234
+
235
+ ###### REGION SETTINGS #######
291
236
  def deg_to_rad(angle)
292
237
  angle*Math::PI/180
293
238
  end
@@ -308,17 +253,17 @@ module ProMotion
308
253
  Math.cos(input_latitude) * Math.sin(distance) *
309
254
  Math.cos(bearing)
310
255
  )
311
-
256
+
312
257
  dlon = input_longitude + Math.atan2(
313
258
  Math.sin(bearing) * Math.sin(distance) *
314
259
  Math.cos(input_longitude), Math.cos(distance) -
315
260
  Math.sin(input_longitude) * Math.sin(output_latitude)
316
261
  )
317
-
262
+
318
263
  output_longitude = (dlon + 3*Math::PI) % (2*Math::PI) - Math::PI
319
264
  CLLocationCoordinate2DMake(rad_to_deg(output_latitude), rad_to_deg(output_longitude))
320
265
  end
321
-
266
+
322
267
  def create_region(initialLocation,radius=10)
323
268
  return nil unless initialLocation.is_a? CLLocationCoordinate2D
324
269
  radius = radius * 1.820 # Meters equivalent to 1 Nautical Mile
@@ -327,7 +272,17 @@ module ProMotion
327
272
  {:southWest => southWest, :northEast => northEast}
328
273
  end
329
274
  alias_method :region, :create_region
330
-
275
+
276
+ ##### END REGION SETTINGS ######
277
+ ##### MAP STYLE SETTINGS ######
278
+ def set_map_style
279
+ if self.class.respond_to?(:get_map_style)
280
+ self.view.styleURL = self.class.get_map_style
281
+ end
282
+ end
283
+ ##### END MAP STYLE SETTINGS ######
284
+
285
+
331
286
  def look_up_address(args={}, &callback)
332
287
  args[:address] = args if args.is_a? String # Assume if a string is passed that they want an address
333
288
 
@@ -349,16 +304,52 @@ module ProMotion
349
304
  end
350
305
  end
351
306
 
352
- def empty_cache
353
- map.removeAllCachedImages
307
+ ########## Mapbox GL methods #################
308
+ def mapView(mapView, annotationCanShowCallout: annotation)
309
+ return nil if annotation.is_a? MGLUserLocation
310
+ annotation.params[:show_callout]
354
311
  end
355
312
 
356
- ########## Mapbox methods #################
357
- def mapView(map_view, layerForAnnotation: annotation)
358
- if annotation.is_a?(RMAnnotation)
359
- annotation = MapScreenAnnotation.new_with_rmannotation(annotation,self.view)
313
+ def mapView(mapView, imageForAnnotation: annotation)
314
+ return nil unless annotation.params[:image]
315
+ annotationImage = mapView.dequeueReusableAnnotationImageWithIdentifier(annotation.params[:image])
316
+ if !annotationImage
317
+ image = UIImage.imageNamed(annotation.params[:image])
318
+ annotationImage = MGLAnnotationImage.annotationImageWithImage(image, reuseIdentifier: annotation.params[:image])
319
+ return annotationImage
320
+ end
321
+ end
322
+
323
+ def mapView(mapview, leftCalloutAccessoryViewForAnnotation: annotation)
324
+ if annotation.params[:left_action]
325
+ button_type = annotation.params[:left_action_button_type] || UIButtonTypeDetailDisclosure
326
+ action_button = UIButton.buttonWithType(button_type)
327
+
328
+ action_button
329
+ else
330
+ annotation.left_accessory
331
+ end
332
+ end
333
+
334
+ def mapView(mapview, rightCalloutAccessoryViewForAnnotation: annotation)
335
+ if annotation.params[:right_action]
336
+ button_type = annotation.params[:right_action_button_type] || UIButtonTypeDetailDisclosure
337
+ action_button = UIButton.buttonWithType(button_type)
338
+ action_button.tag = 1
339
+
340
+ action_button
341
+ else
342
+ annotation.right_accessory
343
+ end
344
+ end
345
+
346
+ def mapView(mapView, annotation: annotation, calloutAccessoryControlTapped: accessory)
347
+ return nil unless annotation.params[:left_action] || annotation.params[:right_action]
348
+ if accessory.tag == 1
349
+ self.send(annotation.params[:right_action])
350
+ else
351
+ self.send(annotation.params[:left_action])
360
352
  end
361
- annotation_view(map_view, annotation)
362
353
  end
363
354
 
364
355
  ########## Cocoa touch methods #################
@@ -386,22 +377,19 @@ module ProMotion
386
377
  end
387
378
  end
388
379
 
389
- def tapOnCalloutAccessoryControl(control, forAnnotation: annotation, onMap: map)
390
- control.sendActionsForControlEvents(UIControlEventTouchUpInside)
391
- end
392
380
  ########## Cocoa touch Ruby counterparts #################
393
381
 
394
- def deceleration_mode
395
- map.decelerationMode
382
+ def type
383
+ map.mapType
396
384
  end
397
385
 
398
- def deceleration_mode=(mode)
399
- map.decelerationMode = mode
386
+ def type=(type)
387
+ map.mapType = type
400
388
  end
401
389
 
402
- %w(dragging bouncing clustering).each do |meth|
390
+ %w(zoom scroll pitch rotate).each do |meth|
403
391
  define_method("#{meth}_enabled?") do
404
- map.send("#{meth}Enabled")
392
+ map.send("is#{meth.capitalize}Enabled")
405
393
  end
406
394
 
407
395
  define_method("#{meth}_enabled=") do |argument|
@@ -437,21 +425,15 @@ module ProMotion
437
425
  def get_tap_to_add
438
426
  @tap_to_add ||= false
439
427
  end
440
-
441
- # Mapbox setup
442
- def mapbox_setup(params={})
443
- @mapbox_setup_params = params
444
- @mapbox_setup = true
445
- end
446
-
447
- def get_mapbox_setup_params
448
- @mapbox_setup_params ||= nil
428
+
429
+ def map_style(style)
430
+ @map_style_url = NSURL.URLWithString("asset://styles/#{style}.json")
449
431
  end
450
-
451
- def get_mapbox_setup
452
- @mapbox_setup ||= false
432
+
433
+ def get_map_style
434
+ @map_style_url ||= map_style(:light)
453
435
  end
454
-
436
+
455
437
 
456
438
  end
457
439
  def self.included(base)
metadata CHANGED
@@ -1,83 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ProMotion-mapbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Diogo Andre
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-24 00:00:00.000000000 Z
11
+ date: 2015-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ProMotion
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '2.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: motion-cocoapods
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: motion-stump
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0.3'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.3'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: motion-redgreen
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0.1'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0.1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: motion_print
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rake
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - '>='
87
+ - - ">="
74
88
  - !ruby/object:Gem::Version
75
89
  version: '0'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - '>='
94
+ - - ">="
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
97
  description: Adds PM::MapScreen support to ProMotion, using Mapbox as map provider.
@@ -88,10 +102,10 @@ extensions: []
88
102
  extra_rdoc_files: []
89
103
  files:
90
104
  - README.md
105
+ - lib/ProMotion-mapbox.rb
91
106
  - lib/ProMotion/map/map_screen.rb
92
107
  - lib/ProMotion/map/map_screen_annotation.rb
93
108
  - lib/ProMotion/map/map_screen_module.rb
94
- - lib/ProMotion-mapbox.rb
95
109
  homepage: https://github.com/diogoandre/ProMotion-mapbox
96
110
  licenses:
97
111
  - MIT
@@ -102,17 +116,17 @@ require_paths:
102
116
  - lib
103
117
  required_ruby_version: !ruby/object:Gem::Requirement
104
118
  requirements:
105
- - - '>='
119
+ - - ">="
106
120
  - !ruby/object:Gem::Version
107
121
  version: '0'
108
122
  required_rubygems_version: !ruby/object:Gem::Requirement
109
123
  requirements:
110
- - - '>='
124
+ - - ">="
111
125
  - !ruby/object:Gem::Version
112
126
  version: '0'
113
127
  requirements: []
114
128
  rubyforge_project:
115
- rubygems_version: 2.0.6
129
+ rubygems_version: 2.4.8
116
130
  signing_key:
117
131
  specification_version: 4
118
132
  summary: Adds PM::MapScreen support to ProMotion, using Mapbox as map provider. Forked