torbenk / tk.custommap Goto Github PK
View Code? Open in Web Editor NEWExtended Map Control
License: MIT License
Extended Map Control
License: MIT License
Hi,
also I am getting an error after displaying another Master-Detail page and than switching back to the Map page (like the MapPins-Clear() exception.
After switching back to the Map page and clicking on a Pin I am getting this error (again clicking on the Pin the first time, before using the Master/Detail page) there is NO problem clicking the Pin):
at TK.CustomMap.iOSUnified.TKCustomMapRenderer.SetSelectedPin () [0x0004c] in :0
at TK.CustomMap.iOSUnified.TKCustomMapRenderer.OnMapPropertyChanged (System.Object sender, System.ComponentModel.PropertyChangedEventArgs e) [0x00036] in :0
at (wrapper delegate-invoke) :invoke_void_object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs)
at Xamarin.Forms.BindableObject.OnPropertyChanged (System.String propertyName) [0x00012] in :0
at TK.CustomMap.TKCustomMap.OnPropertyChanged (System.String propertyName) [0x00000] in :0
at Xamarin.Forms.BindableObject.SetValueActual (Xamarin.Forms.BindableProperty property, Xamarin.Forms.BindablePropertyContext context, System.Object value, Boolean currentlyApplying, SetValueFlags attributes, Boolean silent) [0x000fb] in :0
at Xamarin.Forms.BindableObject.SetValueCore (Xamarin.Forms.BindableProperty property, System.Object value, SetValueFlags attributes, SetValuePrivateFlags privateAttributes) [0x0014b] in :0
at Xamarin.Forms.BindableObject.SetValue (Xamarin.Forms.BindableProperty property, System.Object value, Boolean fromStyle, Boolean checkAccess) [0x0005f] in :0
at Xamarin.Forms.BindableObject.SetValue (Xamarin.Forms.BindableProperty property, System.Object value) [0x00000] in :0
at TK.CustomMap.TKCustomMap.set_SelectedPin (TK.CustomMap.TKCustomMapPin value) [0x00000] in :0
at TK.CustomMap.iOSUnified.TKCustomMapRenderer.OnDidSelectAnnotationView (System.Object sender, MapKit.MKAnnotationViewEventArgs e) [0x00032] in :0
at MapKit.MKMapView+_MKMapViewDelegate.DidSelectAnnotationView (MapKit.MKMapView mapView, MapKit.MKAnnotationView view) [0x00014] in /Users/builder/data/lanes/2689/962a0506/source/maccore/src/build/ios/native/MapKit/MKMapView.g.cs:1797
at (wrapper managed-to-native) UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)
at UIKit.UIApplication.Main (System.String[] args, IntPtr principal, IntPtr delegate) [0x00005] in /Users/builder/data/lanes/2689/962a0506/source/maccore/src/UIKit/UIApplication.cs:77
at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x00038] in /Users/builder/data/lanes/2689/962a0506/source/maccore/src/UIKit/UIApplication.cs:61
at VagaBoo.iOS.Application.Main (System.String[] args) [0x00008] in /Users/marcoseraphin/Xamarin/Xamarin/Projekte/VagaBooMobileApp/VagaBooMobileApp (trunk)/iOS/Main.cs:17
Add commands for:
UserLocationChanged
After upgrading the version of the package (to last), the methods add and clear the CustomPins Collection were removed, what happened?
TKCustomMap map;
var CustomPin = new TKCustomMapPin ();
CustomPin.ShowCallout = true;
CustomPin.DefaultPinColor = Color.Red;
CustomPin.Position = new Xamarin.Forms.Maps.Position (item.Y,item.X);
CustomPin.Title = item.Value.ToString ();
CustomPin.Subtitle = item.Endereco;
map.CustomPins.Add(CustomPin);
Dragging a pin via user is very useful, but what if I want to animate the pin via code?
For example, live tracking a car, the car presenting the pin would be moving by updating its location, is this possible?
When installing the nuget, it requires some dependencies, on which Microsoft.Net.Http, which depends on Microsoft.Bcl.Build. This is not available for iOS projects.
Is there a way to solve that? (I have just added the nuget manually to the iOS project, don't know yet if it works...)
I just came across this, but it looks like when using TKCustomMapPin on Android, your pin is anchored at the bottom of the image, but on iOS it's anchored in the center of the image.
Is this expected?
It would be great if it were the same for both platforms and potentially customizable
Hi all,
I really like your work but i have a problem
I included your package to my xamarin forms project and i've created a page where:
all of this work on Android and iPhone but on iPad the mapspan is always equal to default and nothing appear(pin and circle)
One thing to notice:
sometimes my app work on iPad if i build it in debug or ad-hoc mode
if I build in AppStore mode it doesn't work on iPad
Ty for your work
After updated the TKCustomMap, I needed to update other components of my project, including Xamarin.Forms. Thus, the compilation started giving the following errors:
Error CS0117 'Resource.Styleable' does not contain a definition for 'Theme_windowNoTitle' ProjectName.Droid C:....\Droid\Resources\Resource.designer.cs 1574
Error CS0117 'Resource.Styleable' does not contain a definition for 'Theme_windowMinWidthMinor' ProjectName.Droid C:....\Droid\Resources\Resource.designer.cs 1573
Error CS0117 'Resource.Styleable' does not contain a definition for 'Theme_windowMinWidthMajor' ProjectName.Droid C:....\Droid\Resources\Resource.designer.cs 1572
Error CS0117 'Resource.Styleable' does not contain a definition for 'Theme_windowFixedWidthMinor' ProjectName.Droid C:....\Droid\Resources\Resource
It has over 148 resource errors.
using SampleProject - Tested on iOS9.2 simulator and 8.3 device.
As far as I can see, the method
GetViewForAnnotation
get's called, and depending on if FormsMap.CalloutClickedCommand != null, it adds the button.
On previous XamarinForms, it was working as expected; but with last version, CalloutClickedCommand remains null; also PinSelectedCommand is null
Took a while to debug this issue; the problem was (in SampleProject and my project):
instead of
public Command CalloutClickedCommand
it needs to be
public Command<TKCustomMapPin> CalloutClickedCommand
same with PinSelectedCommand; if Command<T> is not specified, it ends up as NULL in renderer. I guess this is action binding changed by Forms.
Hi Torben,
I got an unhandled exception when I tried to add a pin with a custom image on Android device.
After searching a bit, it seems that a java.lang.NullPointerException is thrown in TKCustomMapRenderer.cs at line 459 :
this._markers.Add(pin, this._googleMap.AddMarker(markerWithIcon));
Here's the exception :
01-22 15:13:10.818 I/mono-stdout( 6446): Exception : Java.Lang.NullPointerException: Exception of type 'Java.Lang.NullPointerException' was thrown.
01-22 15:13:10.818 I/mono-stdout( 6446): at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <filename unknown>:0
01-22 15:13:10.818 I/mono-stdout( 6446): at Android.Runtime.JNIEnv.CallObjectMethod (IntPtr jobject, IntPtr jmethod, Android.Runtime.JValue* parms) [0x00064] in /Users/builder/data/lanes/2512/d3008455/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:195
01-22 15:13:10.818 I/mono-stdout( 6446): at Android.Gms.Maps.GoogleMap.AddMarker (Android.Gms.Maps.Model.MarkerOptions options) [0x0004a] in <filename unknown>:0
01-22 15:13:10.818 I/mono-stdout( 6446): at TK.CustomMap.Droid.TKCustomMapRenderer+<AddPin>d__29.MoveNext () [0x0015c] in C:\Users\Patrick\Documents\Projects\TK.CustomMap-master\TK.CustomMap\TK.CustomMap.Android\TKCustomMapRenderer.cs:459
01-22 15:13:10.818 I/mono-stdout( 6446): --- End of managed exception stack trace ---
This is my code (I used your sample for the test) :
var pin = new TKCustomMapPin
{
Position = position,
Title = string.Format("Pin {0}, {1}", position.Latitude, position.Longitude),
ShowCallout = true,
IsDraggable = true,
Image = ImageSource.FromFile("pinImage.png")
};
this._pins.Add(pin);
When I try to run tit on iOS simulator, there's no Exception but the pin won't be displayed on the map.
Thanks for your work,
po-connor
Changing pin Position
at android target works fine, however changing the pin Position
will not effect the pin location at map in iOS, it seems that the pin Position
binding is not working for iOS ?! ๐ข
Hi,
I'm getting this error when I show a page with a map, then pop that page and push another page with a map; it sems a silent error(no crash)
StackTrace
at Java.Interop.TypeManager.CreateInstance (IntPtr handle, JniHandleOwnership transfer, System.Type targetType) [0x001a4] in :0
at Java.Lang.Object.GetObject (IntPtr handle, JniHandleOwnership transfer, System.Type type) [0x000e5] in :0
at Java.Lang.Object.GetObject[T](IntPtr handle, JniHandleOwnership transfer) [0x0001a] in :0
at Java.Lang.Object.GetObject[T](IntPtr handle, JniHandleOwnership transfer) [0x00000] in :0
at Java.Lang.Object.GetObject[T](IntPtr jnienv, IntPtr handle, JniHandleOwnership transfer) [0x00006] in :0
at Android.Gms.Maps.GoogleMap+IOnCameraChangeListenerInvoker.n_OnCameraChange_Lcom_google_android_gms_maps_model_CameraPosition (IntPtr jnienv, IntPtr native__this, IntPtr native_position) [0x00000] in :0
at (wrapper dynamic-method) System.Object:bac3a343-82f3-41c1-a6fd-bbc2b9e5c348 (intptr,intptr,intptr)
System.MissingMethodExceptionNo constructor found for Xamarin.Forms.Maps.Android.MapRenderer::.ctor(System.IntPtr, Android.Runtime.JniHandleOwnership)
at Java.Interop.TypeManager.CreateProxy (System.Type type, IntPtr handle, JniHandleOwnership transfer) [0x00058] in :0
at Java.Interop.TypeManager.CreateInstance (IntPtr handle, JniHandleOwnership transfer, System.Type targetType) [0x0012c] in :0
Java.Lang.ErrorException of type 'Java.Interop.JavaLocationException' was thrown.
Java.Lang.Error: Exception of type 'Java.Lang.Error' was thrown.
--- End of managed exception stack trace ---
java.lang.Error: Java callstack:
at md5d956392b2b421ac2c9ccfc063253dcd9.MapRenderer.n_onCameraChange(Native Method)
at md5d956392b2b421ac2c9ccfc063253dcd9.MapRenderer.onCameraChange(MapRenderer.java:54)
at com.google.android.gms.maps.GoogleMap$7.onCameraChange(Unknown Source)
at com.google.android.gms.maps.internal.zze$zza.onTransact(Unknown Source)
at android.os.Binder.transact(Binder.java:386)
at com.google.android.gms.maps.internal.aa.a(SourceFile:93)
at com.google.maps.api.android.lib6.gmm6.c.a.a(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.c.b.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5539)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
It's intermittent so perhaps a race condition.
Callstack is:
TK.CustomMap.iOSUnified.TKCustomMapRenderer.UpdateRoutes( Parameters) in TK.CustomMap.iOSUnified.TKCustomMapRenderer.OnMapPropertyChanged( Parameters) in Xamarin.Forms.BindableObject.OnPropertyChanged( Parameters) in TK.CustomMap.TKCustomMap.OnPropertyChanged( Parameters) in Xamarin.Forms.BindableObject.SetValueActual( Parameters) in Xamarin.Forms.BindableObject.SetValueCore( Parameters) in Xamarin.Forms.BindableObject.SetValue( Parameters) in Xamarin.Forms.BindableObject.SetValue( Parameters) in TK.CustomMap.TKCustomMap.set_Routes( Parameters) in ViewTimelineAndNavigationModel.AnonymousMethod__6() in ViewTimelineAndNavigationModel.cs:200
Occurred when I was assigning a new list to the Routes property (the new Route list was empty):
_mapView.Routes = Route;
Again, I can't reproduce it every time, it just happens randomly which is why I suspect a threading issue.
Hello,
I sorry for my bad English.
I need to make the TK Custom Map in a Bindable Object to create the Location property, Title, etc. Bindable. To do this I need the TKCustomMapPin inherit from bindableobject class.
You could make this change?
Thank you Regards
Manni Tiziano
I was unable to add a route on the map because the latitude and longitude were added to the URI with a comma instead of point (eg.: origin=40,7830603,-73,9712488&destination=40,7127837,-74,0059413). The problem occurs in TK.CustomMap.Extensios.AsString(Position).
How do I change the zoom level by the code?
I'm testing the latest version and tried to add a button through the event "MapLongPress" recently available, however on the callout not appear the button with the "i".
map.MapLongPress += async (sender, args) =>
{
var newPin = args.Value;
var pin = new TKCustomMapPin
{
Position = new Xamarin.Forms.Maps.Position(newPin.Latitude, newPin.Longitude),
DefaultPinColor = Color.Blue,
Title = "(New Point)",
Subtitle = "Test SubTitle",
ShowCallout = true,
IsDraggable = true,
};
ObservableCollection<TKCustomMapPin> obPin =new ObservableCollection<TKCustomMapPin>();
obPin.Add(pin);
IEnumerable<TKCustomMapPin> pinList = map.CustomPins;
map.CustomPins= map.CustomPins.Concat(obPin);
}
Previously used by a ViewModel for this event following his Sample.
IOS 9.3
Hi,
thanx for the fix concerning SetMapCenter()....no problems here any more.
BUT: I have a new problem in OnCollectionChanged(). I am clearing my MapPins collection and adding a new pin with updated GPS data.
While calling this.MapPins.Clear () a second time I am getting this error:
at TK.CustomMap.iOSUnified.TKCustomMapRenderer.OnCollectionChanged (System.Object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) [0x0014e] in :0
at (wrapper delegate-invoke) :invoke_void_object_NotifyCollectionChangedEventArgs (object,System.Collections.Specialized.NotifyCollectionChangedEventArgs)
at System.Collections.ObjectModel.ObservableCollection1[T].OnCollectionChanged (System.Collections.Specialized.NotifyCollectionChangedEventArgs e) [0x00012] in /Users/builder/data/lanes/2689/962a0506/source/mono/external/referencesource/System/compmod/system/collections/objectmodel/observablecollection.cs:286 at System.Collections.ObjectModel.ObservableCollection
1[T].OnCollectionReset () [0x00000] in /Users/builder/data/lanes/2689/962a0506/source/mono/external/referencesource/System/compmod/system/collections/objectmodel/observablecollection.cs:373
at System.Collections.ObjectModel.ObservableCollection1[T].ClearItems () [0x00022] in /Users/builder/data/lanes/2689/962a0506/source/mono/external/referencesource/System/compmod/system/collections/objectmodel/observablecollection.cs:187 at System.Collections.ObjectModel.Collection
1[T].Clear () [0x00017] in /Users/builder/data/lanes/2689/962a0506/source/mono/external/referencesource/mscorlib/system/collections/objectmodel/collection.cs:87
at VagaBoo.MapViewModel.OnViewAppearing () [0x0002b] in /Users/marcoseraphin/Xamarin/Xamarin/Projekte/VagaBooMobileApp/VagaBooMobileApp (trunk)/VagaBoo/ViewModel/TabPageSetTwo/MapViewModel.cs:87
at XLabs.Forms.Mvvm.BaseView.OnAppearing () [0x00027] in :0
at VagaBoo.Waiting.WaitingPage.OnAppearing () [0x00002] in /Users/marcoseraphin/Xamarin/Xamarin/Projekte/VagaBooMobileApp/VagaBooMobileApp (trunk)/VagaBoo/WaitingPage/WaitingPage.cs:141
at VagaBoo.MapPage.OnAppearing () [0x00002] in /Users/marcoseraphin/Xamarin/Xamarin/Projekte/VagaBooMobileApp/VagaBooMobileApp (trunk)/VagaBoo/Pages/TabPageSetTwo/MapPage.xaml.cs:28
at Xamarin.Forms.Page.SendAppearing () [0x00024] in :0
at Xamarin.Forms.Platform.iOS.PageRenderer.ViewDidAppear (Boolean animated) [0x00025] in :0
at (wrapper managed-to-native) UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)
at UIKit.UIApplication.Main (System.String[] args, IntPtr principal, IntPtr delegate) [0x00005] in /Users/builder/data/lanes/2689/962a0506/source/maccore/src/UIKit/UIApplication.cs:77
at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x00038] in /Users/builder/data/lanes/2689/962a0506/source/maccore/src/UIKit/UIApplication.cs:61
at VagaBoo.iOS.Application.Main (System.String[] args) [0x00008] in /Users/marcoseraphin/Xamarin/Xamarin/Projekte/VagaBooMobileApp/VagaBooMobileApp (trunk)/iOS/Main.cs:17
Hi Torben,
Just upgraded to 1.1.0 - FANTASTIC work :) ๐ One bug I've found so far is this crash when I try to clean a collection:
2015-12-10 09:50:32.706 MyApp.iOS[18325:1185660] Warning: Unhandled exception: System.InvalidCastException: Specified cast is not valid.
at TK.CustomMap.iOSUnified.TKCustomMapRenderer.OnCollectionChanged (System.Object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) [0x00130] in <filename unknown>:0
at System.Collections.ObjectModel.ObservableCollection`1[T].OnCollectionChanged (System.Collections.Specialized.NotifyCollectionChangedEventArgs e) [0x00012] in /Users/builder/data/lanes/2377/73229919/source/mono/external/referencesource/System/compmod/system/collections/objectmodel/observablecollection.cs:286
at System.Collections.ObjectModel.ObservableCollection`1[T].OnCollectionReset () [0x00000] in /Users/builder/data/lanes/2377/73229919/source/mono/external/referencesource/System/compmod/system/collections/objectmodel/observablecollection.cs:373
at System.Collections.ObjectModel.ObservableCollection`1[T].ClearItems () [0x00022] in /Users/builder/data/lanes/2377/73229919/source/mono/external/referencesource/System/compmod/system/collections/objectmodel/observablecollection.cs:187
at System.Collections.ObjectModel.Collection`1[T].Clear () [0x00017] in /Users/builder/data/lanes/2377/73229919/source/mono/external/referencesource/mscorlib/system/collections/objectmodel/collection.cs:87
at MyApp.RootViewModel.UpdateVenueAndPins (System.Collections.Generic.List`1 venues) [0x0001d] in /Users/kolchy/Projects/MyApp/MyApp/ViewModels/RootViewModel.cs:76
at MyApp.RootViewModel.FindVenuesInBounds (Xamarin.Forms.Maps.MapSpan region) [0x001cd] in /Users/kolchy/Projects/MyApp/MyApp/ViewModels/RootViewModel.cs:251
at MyApp.MapView.CalculateBoundingCoordinates (Xamarin.Forms.Maps.MapSpan region) [0x00008] in /Users/kolchy/Projects/MyApp/MyApp/Views/MapView.cs:55
at MyApp.MapView+<Init>c__async0+<Init>c__AnonStorey7+<Init>c__async8.MoveNext () [0x00033] in /Users/kolchy/Projects/MyApp/MyApp/Views/MapView.cs:133
The code from my viewmodel is:
if (Pins != null)
Pins.Clear ();
Cheers,
Kolchy
Sometimes if I switch back to the page with the Map Control I am getting a NullReferenceException calling SetMapCenter() directly or by calling MoveToRegion().
Here is the call stack:
at TK.CustomMap.iOSUnified.TKCustomMapRenderer.SetMapCenter () [0x00006] in :0
at TK.CustomMap.iOSUnified.TKCustomMapRenderer.OnMapPropertyChanged (System.Object sender, System.ComponentModel.PropertyChangedEventArgs e) [0x00054] in :0
at (wrapper delegate-invoke) :invoke_void_object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs)
at Xamarin.Forms.BindableObject.OnPropertyChanged (System.String propertyName) [0x00012] in :0
at TK.CustomMap.TKCustomMap.OnPropertyChanged (System.String propertyName) [0x00000] in :0
at Xamarin.Forms.BindableObject.SetValueActual (Xamarin.Forms.BindableProperty property, Xamarin.Forms.BindablePropertyContext context, System.Object value, Boolean currentlyApplying, SetValueFlags attributes, Boolean silent) [0x000fb] in :0
at Xamarin.Forms.BindableObject.SetValueCore (Xamarin.Forms.BindableProperty property, System.Object value, SetValueFlags attributes, SetValuePrivateFlags privateAttributes) [0x0014b] in :0
at Xamarin.Forms.BindableObject.SetValue (Xamarin.Forms.BindableProperty property, System.Object value, Boolean fromStyle, Boolean checkAccess) [0x0005f] in :0
at Xamarin.Forms.BindableObject.SetValue (Xamarin.Forms.BindableProperty property, System.Object value) [0x00000] in :0
at TK.CustomMap.TKCustomMap.set_MapCenter (Position value) [0x00000] in :0
at TK.CustomMap.iOSUnified.TKCustomMapRenderer.OnMapRegionChanged (System.Object sender, MapKit.MKMapViewChangeEventArgs e) [0x00016] in :0
at (wrapper delegate-invoke) System.EventHandler1[MapKit.MKMapViewChangeEventArgs]:invoke_void_object_TEventArgs (object,MapKit.MKMapViewChangeEventArgs) at MapKit.MKMapView+_MKMapViewDelegate.RegionChanged (MapKit.MKMapView mapView, Boolean animated) [0x00014] in /Users/builder/data/lanes/2689/962a0506/source/maccore/src/build/ios/native/MapKit/MKMapView.g.cs:1888 at (wrapper managed-to-native) ObjCRuntime.Messaging:void_objc_msgSend_CGRect (intptr,intptr,CoreGraphics.CGRect) at UIKit.UIView.set_Frame (CGRect value) [0x00010] in /Users/builder/data/lanes/2689/962a0506/source/maccore/src/build/ios/native/UIKit/UIView.g.cs:3075 at Xamarin.Forms.Platform.iOS.ViewRenderer
2[TView,TNativeView].LayoutSubviews () [0x00059] in :0
at (wrapper managed-to-native) UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)
at UIKit.UIApplication.Main (System.String[] args, IntPtr principal, IntPtr delegate) [0x00005] in /Users/builder/data/lanes/2689/962a0506/source/maccore/src/UIKit/UIApplication.cs:77
at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x00038] in /Users/builder/data/lanes/2689/962a0506/source/maccore/src/UIKit/UIApplication.cs:61
at VagaBoo.iOS.Application.Main (System.String[] args) [0x00008] in /Users/marcoseraphin/Xamarin/Xamarin/Projekte/VagaBooMobileApp/VagaBooMobileApp (trunk)/iOS/Main.cs:17
I have tried to embbed the map into a TabbedPage.
It works fine on Android, however it fails on iPhone (the map is white/not displaying). An idea why?
(Setting the BindingContext before displaying also causes a lot of troubles!)
It would be really great to have a way to zoom and move (animated would be a bonus) the map to either a specified region or to simply focus on the calculated route so that it fills the view rectangle.
i.e. iOS native you can do something like:
var zoomRect = MKMapRectNull
for overlay in overlays {
zoomRect = MKMapRectUnion(overlay.boundingMapRect, zoomRect)
}
let updatedMapRect = self.mapView.mapRectThatFits(zoomRect)
self.mapView.setVisibleMapRect(updatedMapRect, edgePadding: UIEdgeInsetsMake(mapPadding, mapPadding, mapPadding, mapPadding), animated: true)
Allowing either the helper function to zoom/focus on the route or providing helper functions to help with the calculations would be great. Right now I can only choose a center position and zoom level.
So if you're offline or in flight mode you get this crash and it'll take down your app.
To reproduce, go offline, then start an app that uses TK.CustomMap on Android
java.net.UnknownHostException: Unable to resolve host "maps.googleapis.com": No address associated with hostname
at java.net.InetAddress.lookupHostByName(InetAddress.java:427)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
at java.net.InetAddress.getAllByName(InetAddress.java:215)
at com.squareup.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
at com.squareup.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:224)
at com.squareup.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:193)
at com.squareup.okhttp.internal.http.RouteSelector.next(RouteSelector.java:113)
at com.squareup.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:344)
at com.squareup.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:329)
at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:319)
at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:241)
at com.squareup.okhttp.Call.getResponse(Call.java:271)
at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:228)
at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:199)
at com.squareup.okhttp.Call.access$100(Call.java:34)
at com.squareup.okhttp.Call$AsyncCall.execute(Call.java:162)
at com.squareup.okhttp.internal.NamedRunnable.run(NamedRunnable.java:33)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker
Can we change the dependency on google location services from "exactly 26" to "at least 26"?
If I install v26 in my project I get an "already added" exception from java when building, because two different google play services are installed (26 and 29).
Strange thing on iOS only. My MapClick command is not triggering when I build the iOS app in Release mode. Debug mode works fine.
I tried turning off the Linker in Release mode just to see if it was a linking issue and that made no difference. I have my Debug and Release builds identical in settings and only the Release mode build does not trigger the MapClick.
Any ideas?
This only happens on iOS as on Android you're doing the FormsMap.PropertyChanged event registration call in OnElementChanged.
On iOS however it seems the MapLoaded can be called multiple times. For me it can get called 2-3 times without any calls to OnElementChanged. Once when the map is first initialized and again when it's finished animating to it's destination MapCenter
this.FormsMap.PropertyChanged += OnMapPropertyChanged;
As a test I unregistered right before
this.FormsMap.PropertyChanged -= OnMapPropertyChanged;
this.FormsMap.PropertyChanged += OnMapPropertyChanged;
and I no longer get multiple PropertyChanged notifications
Hi - been working away nicely on iOS, and the package has been awesome! Moved over to upgrade my Droid app, and get the following on Xamarin Studio running on OSX:
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.targets: Error: Exception while loading assemblies: System.IO.FileNotFoundException: Could not load assembly 'Xamarin.GooglePlayServices.Location, Version=1.0.0.0, Culture=neutral, PublicKeyToken='. Perhaps it doesn't exist in the Mono for Android profile?
File name: 'Xamarin.GooglePlayServices.Location.dll'
at Xamarin.Android.Tuner.DirectoryAssemblyResolver.Resolve (Mono.Cecil.AssemblyNameReference reference, Mono.Cecil.ReaderParameters parameters) <0x44ec990 + 0x00423> in <filename unknown>:0
at Xamarin.Android.Tuner.DirectoryAssemblyResolver.Resolve (Mono.Cecil.AssemblyNameReference reference) <0x4cc4af8 + 0x0001f> in <filename unknown>:0
at Xamarin.Android.Tasks.ResolveAssemblies.AddAssemblyReferences (ICollection`1 assemblies, Mono.Cecil.AssemblyDefinition assembly, Boolean topLevel) <0x4cc41a8 + 0x0046b> in <filename unknown>:0
at Xamarin.Android.Tasks.ResolveAssemblies.Execute () <0x4cc35d0 + 0x00577> in <filename unknown>:0 (DroidTest.Droid)
If I remove TK.CustomMap, I can compile the application no problem? Any thoughts/ideas???
Cheers,
Karl
Hi there - great v1 of a nice custom map/pin implementation, I've branched a project I'm working on and implemented your lib. Here is some feedback:
I really like what you've got as a start, and happy to help test on a real world app if you would like :) Keep up the good work ๐
Cheers,
Kolchy
I realise this is probably something I'm doing wrong but I've been banging my head against this wall for many hours and I'm not sure how else I can open a discussion with you @TorbenK
I've Enabled the Places API, I've enabled Android Maps support, I've generated an Android Key and locked it to my package, verified the SHA-1 is correct and verified that the apk I'm using was signed correctly.
For the init calls in your sample you use:
GmsPlace.Init("YOUR API KEY");
GmsDirection.Init("YOUR API KEY");
Am I supposed to have 2 seperate API keys there or are they the same key? Right now I just seem to have the 1 key which I use for both (Credentials ->CreateCredentials->ApiKey->Android Key). I've also tried leaving off the GmsPlace call since I only really need the Direction Api.
I've also updated my Android.manifest with:
<meta-data android:name="com.google.android.geo.API_KEY" android:value="YOUR API KEY" />
Again, is this the same API KEY I'm using in the above 2 calls?
If doesn't matter if I switch this to com.google.android.maps.v2.API_KEY instead of com.google.android.geo.API_KEY, I still get RequestDenied.
If I look in the Developer console at my Google Maps API usage, I can see that the calls are coming through and they all have 'Success' next to them. The Google Maps Directions API usage though has Client Errors (4xx) next to all of them though.
I was following the checklist from here: http://stackoverflow.com/a/25374435/10957 (Even though it's for the web service)
Any other ideas? Is there a better error log I can look at to see what the real problem is?
I just had this occur on a device that a tester was using. Not sure yet on reproduction steps but thought I'd report anyway:
Message:
Error using newLatLngBounds(LatLngBounds, int): Map size can't be 0. Most likely, layout has not yet occured for the map view. Either wait until layout has occurred or use newLatLngBounds(LatLngBounds, int, int, int) which allows you to specify the map's dimensions.
Stack Trace:
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <0x9444ef70 + 0x00024> in <filename unknown>:0
at Android.Runtime.JNIEnv.CallVoidMethod (IntPtr jobject, IntPtr jmethod, Android.Runtime.JValue* parms) <0x9d7d9578 + 0x000bf> in <filename unknown>:0
at Android.Gms.Maps.GoogleMap.AnimateCamera (Android.Gms.Maps.CameraUpdate update) <0x9444e080 + 0x00137> in <filename unknown>:0
at TK.CustomMap.Droid.TKCustomMapRenderer.FitMapRegionToPositions (IEnumerable`1 positions, Boolean animate) <0x9444c4a8 + 0x00123> in <filename unknown>:0
at TK.CustomMap.TKCustomMap.FitMapRegionToPositions (IEnumerable`1 positions, Boolean animate) <0x9444c2c0 + 0x0003b> in <filename unknown>:0
at SkeduloMobile.ViewTimelineAndNavigationModel.<HackMapRecenter>m__5 () <0x93acb9d8 + 0x000db> in <filename unknown>:0
at Java.Lang.Thread+RunnableImplementor.Run () <0xae975748 + 0x0003f> in <filename unknown>:0
at Java.Lang.IRunnableInvoker.n_Run (IntPtr jnienv, IntPtr native__this) <0xae9756a0 + 0x0003f> in <filename unknown>:0
at (wrapper dynamic-method) System.Object:ad80dd52-4761-44bc-bbc3-51ba0b2d2fde (intptr,intptr)
--- End of managed exception stack trace ---
java.lang.IllegalStateException: Error using newLatLngBounds(LatLngBounds, int): Map size can't be 0. Most likely, layout has not yet occured for the map view. Either wait until layout has occurred or use newLatLngBounds(LatLngBounds, int, int, int) which allows you to specify the map's dimensions.
at com.google.a.a.ae.b(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.c.a.a(Unknown Source)
at com.google.maps.api.android.lib6.e.dy.a(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.c.a.a(Unknown Source)
at com.google.maps.api.android.lib6.e.ev.b(Unknown Source)
at com.google.android.gms.maps.internal.j.onTransact(SourceFile:92)
at android.os.Binder.transact(Binder.java:395)
at com.google.android.gms.maps.internal.IGoogleMapDelegate$zza$zza.animateCamera(Unknown Source)
at com.google.android.gms.maps.GoogleMap.animateCamera(Unknown Source)
at mono.java.lang.RunnableImplementor.n_run(Native Method)
at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:29)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6862)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Sorry @TorbenK I think it's a stupid question...but I don't find a solution.
I have created a Google API KEY for Debug and for Release. I have inserted my Key on AndroidManifest (tried with DEBUG and RELEASE), but the app is not show.
Which could be the problem?
Do I write the key also in
GmsPlace.Init("YOUR API KEY");
GmsDirection.Init("YOUR API KEY");
Perfrect solution would be to have a Xamarin.Forms View as template for the callout.
Secondary solution would be to override a function in the renderer to return a native view for the callout.
Hi,
I'm trying to add some lines on a TKCustomMap.
Below code works great on Android (so I think it's right) but cause a "System.Collections.Generic.KeyNotFoundException" on iPhone.
("Polylines" is a bindable property : ObservableCollection Polylines)
var coords = new List<Position>();
coords.Add (new Position (48.8583, 2.2944));
coords.Add (new Position(48.8683, 2.2924));
coords.Add (new Position(48.9683, 2.2924));
TKPolyline polyline = new TKPolyline(){
Color = Color.Green,
LineWidth = 10,
LineCoordinates = coords,
};
Polylines.Add (polyline);
These are exception details :
System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
at System.ThrowHelper.ThrowKeyNotFoundException () [0x00000] in /Users/builder/data/lanes/2689/962a0506/source/maccore/_build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/external/referencesource/mscorlib/system/throwhelper.cs:70
at System.Collections.Generic.Dictionary`2[TKey,TValue].get_Item (System.Collections.Generic.TKey key) <0x1f4774 + 0x0005b> in <filename unknown>:0
at TK.CustomMap.iOSUnified.TKCustomMapRenderer.GetOverlayRenderer (MapKit.MKMapView mapView, IMKOverlay overlay) [0x0000d] in <filename unknown>:0
at MapKit.MKMapView+_MKMapViewDelegate.OverlayRenderer (MapKit.MKMapView mapView, IMKOverlay overlay) [0x0000d] in /Users/builder/data/lanes/2689/962a0506/source/maccore/src/build/ios/native/MapKit/MKMapView.g.cs:1876
at at (wrapper managed-to-native) ObjCRuntime.Messaging:void_objc_msgSend_CGRect (intptr,intptr,CoreGraphics.CGRect)
at UIKit.UIView.set_Frame (CGRect value) [0x00010] in /Users/builder/data/lanes/2689/962a0506/source/maccore/src/build/ios/native/UIKit/UIView.g.cs:3075
at Xamarin.Forms.Platform.iOS.ViewRenderer`2[TView,TNativeView].LayoutSubviews () [0x00059] in <filename unknown>:0
at at (wrapper managed-to-native) UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)
at UIKit.UIApplication.Main (System.String[] args, IntPtr principal, IntPtr delegate) [0x00005] in /Users/builder/data/lanes/2689/962a0506/source/maccore/src/UIKit/UIApplication.cs:77
at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0001c] in /Users/builder/data/lanes/2689/962a0506/source/maccore/src/UIKit/UIApplication.cs:60
at MyApp.iOS.Application.Main (System.String[] args) [0x00008] in /Users/steeve/Code/Xamarin/MyApp/iOS/Main.cs:17
Could you give me some help ?
Regards
Hi TK, Thanks for your great job.
I got following exception when setting up a customMap in my project.
'''
12-10 16:58:52.143 I/MonoDroid(27188): UNHANDLED EXCEPTION:
12-10 16:58:52.163 I/MonoDroid(27188): System.NullReferenceException: Object reference not set to an instance of an object
12-10 16:58:52.164 I/MonoDroid(27188): at TK.CustomMap.Droid.TKCustomMapRenderer.MoveToCenter () [0x0000c] in :0
12-10 16:58:52.164 I/MonoDroid(27188): at TK.CustomMap.Droid.TKCustomMapRenderer.OnLayout (Boolean changed, Int32 l, Int32 t, Int32 r, Int32 b) [0x00015] in :0
12-10 16:58:52.165 I/MonoDroid(27188): at Xamarin.Forms.Platform.Android.FormsViewGroup.n_OnLayout_ZIIII (IntPtr jnienv, IntPtr native__this, Boolean p0, Int32 p1, Int32 p2, Int32 p3, Int32 p4) [0x00008] in :0
12-10 16:58:52.165 I/MonoDroid(27188): at (wrapper dynamic-method) System.Object:b029f907-c661-475e-b1ec-ddf53eca71ac (intptr,intptr,bool,int,int,int,int)
12-10 16:58:52.177 W/art (27188): JNI RegisterNativeMethods: attempt to register 0 native methods for md52ce486a14f4bcd95899665e9d932190b.JavaProxyThrowable
An unhandled exception occured.
Thread finished: #3
The thread '' (0x3) has exited with code 0 (0x0).
12-10 17:00:08.875 I/MonoDroid(27188): UNHANDLED EXCEPTION:
Thread started: #9
12-10 17:00:08.928 I/MonoDroid(27188): System.NullReferenceException: Object reference not set to an instance of an object
12-10 17:00:08.928 I/MonoDroid(27188): at (wrapper dynamic-method) System.Object:b029f907-c661-475e-b1ec-ddf53eca71ac (intptr,intptr,bool,int,int,int,int)
12-10 17:00:08.929 I/MonoDroid(27188): at (wrapper native-to-managed) System.Object:b029f907-c661-475e-b1ec-ddf53eca71ac (intptr,intptr,int,int,int,int,int)
12-10 17:00:08.929 I/MonoDroid(27188): at (wrapper managed-to-native) System.Object:wrapper_native_0xb47b0db1 (intptr,intptr,intptr,intptr,Android.Runtime.JValue_)
12-10 17:00:08.929 I/MonoDroid(27188): at (wrapper delegate-invoke) :invoke_void_intptr_intptr_intptr_intptr_JValue_ (intptr,intptr,intptr,intptr,Android.Runtime.JValue_)
12-10 17:00:08.930 I/MonoDroid(27188): at Android.Runtime.JNIEnv.CallNonvirtualVoidMethod (IntPtr jobject, IntPtr jclass, IntPtr jmethod, Android.Runtime.JValue_ parms) [0x00060] in /Users/builder/data/lanes/2512/d3008455/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:1025
12-10 17:00:08.930 I/MonoDroid(27188): at Xamarin.Forms.Platform.Android.FormsViewGroup.MeasureAndLayout (Int32 p0, Int32 p1, Int32 p2, Int32 p3, Int32 p4, Int32 p5) [0x000f8] in :0
12-10 17:00:08.930 I/MonoDroid(27188): at Xamarin.Forms.Platform.Android.VisualElementTracker.UpdateLayout () [0x000bc] in :0
12-10 17:00:08.930 I/MonoDroid(27188): at Xamarin.Forms.Platform.Android.VisualElementRenderer1[TElement].UpdateLayout () [0x00008] in <filename unknown>:0 12-10 17:00:08.931 I/MonoDroid(27188): at Xamarin.Forms.Platform.Android.VisualElementRenderer
1[TElement].OnLayout (Boolean changed, Int32 l, Int32 t, Int32 r, Int32 b) [0x0003d] in :0
12-10 17:00:08.931 I/MonoDroid(27188): at Xamarin.Forms.Platform.Android.FormsViewGroup.n_OnLayout_ZIIII (IntPtr jnienv, IntPtr native__this, Boolean p0, Int32 p1, Int32 p2, Int32 p3, Int32 p4) [0x00008] in :0
12-10 17:00:08.932 I/MonoDroid(27188): at (wrapper dynamic-method) System.Object:b029f907-c661-475e-b1ec-ddf53eca71ac (intptr,intptr,bool,int,int,int,int)
12-10 17:00:08.932 E/art (27188): JNI NewString called with pending exception 'md52ce486a14f4bcd95899665e9d932190b.JavaProxyThrowable' thrown in void md55b85883da287a270e8ac6f2218732aaf.TKCustomMapRenderer.n_onLayout(boolean, int, int, int, int):-2
An unhandled exception occured.
'''
XAML code:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:customMap="clr-namespace:TK.CustomMap;assembly=TK.CustomMap"
xmlns:controls="clr-namespace:Test.Controls;assembly=Test"
x:Class="Test.Views.MapPage">
<StackLayout>
<customMap:TKCustomMap/>
</StackLayout>
</ContentPage>
I tested this code on your sample project and it works well.
Am i missing something?
at TK.CustomMap.iOSUnified.TKCustomMapRenderer+<>c__DisplayClass2e.<AddRoute>b__2d (MapKit.MKDirectionsResponse r, Foundation.NSError e) [0x00071] in <filename unknown>:0
at ObjCRuntime.Trampolines+SDMKDirectionsHandler.Invoke (IntPtr block, IntPtr response, IntPtr error) [0x00019] in /Users/builder/data/lanes/2689/962a0506/source/maccore/src/build/ios/native/ObjCRuntime/Trampolines.g.cs:3594
at (wrapper native-to-managed) ObjCRuntime.Trampolines+SDMKDirectionsHandler:Invoke (intptr,intptr,intptr)
at (wrapper managed-to-native) UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)
at UIKit.UIApplication.Main (System.String[] args, IntPtr principal, IntPtr delegate) [0x00005] in /Users/builder/data/lanes/2689/962a0506/source/maccore/src/UIKit/UIApplication.cs:77
at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x00038] in /Users/builder/data/lanes/2689/962a0506/source/maccore/src/UIKit/UIApplication.cs:61
at TestTkCustomMap.iOS.Application.Main (System.String[] args) [0x00008] in /Users/cliff/Documents/TestTkCustomMap/iOS/Main.cs:17
Attached is a test project that reproduces it. Simply wait for it to load once, then 'double tap' the reload button.
A user should be able to double tap the map to zoom in without triggering the MapClickedCommand. Therefore, the tap listener needs to wait to make sure it isn't a double tap event before firing the MapClickedCommand.
I merged your development changes into my fork because I needed the fix for the unrecognised selector and saw that you also had done the anchor points work! Thanks!
However I noticed that on iOS I see the markers flicker on the view for a moment as the map calculates the route, then when the route is rendered, the markers disappear. If I don't use a custom image for the markers, the standard pins animate in and show just fine.
On Android it seems to be working just fine.
I use the following in the RouteCalculationFinishedCommand:
if (Route.All(i => i.IsCalculated))
{
MapView.FitToMapRegions(Route.Select(i => i.Bounds), false);
}
Just to add to this, if the map is scrolled to a location not within the pins/route, I'll see a couple of flickers of the custom pin graphics and the route and then the pins disappear.
If I refresh the pins/route collection (and the rectangle is still the same), the pins appear and stay on the screen this time.
If the view rectangle is already over the pins/route when the collection changes, the pins update correctly (including adding new pins)
The items returned from INativePlacesApi are too simple. As best as possible, each property of the underlying native API should be kept separate in IPlaceResult and not all combined together in the Description. Also, the important Name property is not being put inside the Description return value. So if I search for "Donuts" in the sample app, I expect to get back things like "Dunkin Donuts", but I just get back the addresses since the Name is not put inside the Description property.
So I'm not 100% sure if this is a bug or if it's something you might need to document as a gotcha, but thought I'd make you aware as it seems to have caused some issues in my project:
I would calculate the route and receive my RouteCalculationFinishedCommand events, and I'd wait for the route calculation to be done:
if (Route.All(i => i.IsCalculated))
{
MapView.FitToMapRegions(Route.Select(i => i.Bounds), true);
CalculatingRoute = false;
}
CalculatingRoute is a property I was using to show a progress spinner to show the calculation was busy.
Then when the FitToMapRegions has run, the iOS map animates over to the region and when it's there another MapLoaded event comes through.
This in turn runs:
this.UpdateRoutes();
Which then again goes out and sends out all the RouteCalculationFinishedCommand.
In my code then for every RouteCalculationFinishedCommand, as the Route was already previously calculated, I was then calling FitToMapRegions every single time I got that RouteCalculationFinishedCommand. This then resulted in more calls to MapLoaded depending on race conditions.
I've now fixed this in my code by checking first to ensure I'm expecting that the route hasn't been calculated by using my CalculatingRoute property.
if (CalculatingRoute && Route.All(i => i.IsCalculated))
{
MapView.FitToMapRegions(Route.Select(i => i.Bounds), true);
CalculatingRoute = false;
}
@TorbenK I'll leave it up to you for the fix as I'm not sure which way you want to go about it :)
Hi, i want to contribute improving how you handle the UpdateImage call (at least on Android platform, don't know if IOS already handle ImageSource by stream flawless
anyway, you have on TKCustomMapRenderer.cs in Android platform, two methods
private async Task UpdateImage(TKCustomMapPin pin, MarkerOptions markerOptions)
private async Task UpdateImage(TKCustomMapPin pin, Marker marker)
there you check to see if the user wants a custom image and load it, this way
if (pin.Image != null)
{
Android.Graphics.Bitmap icon = null;
if (pin.Image is FileImageSource)
{
icon = await new FileImageSourceHandler().LoadImageAsync(pin.Image, this.Context);
}
else
{
icon = await new ImageLoaderSourceHandler().LoadImageAsync(pin.Image, this.Context);
}
bitmap = BitmapDescriptorFactory.FromBitmap(icon);
}
the problem is that i need to use a StreamImageSource because i generate runtime a bitmap (with rotation and tilt) and if i just set the Image property of the TKCustomMapPin (you allow it), then i fall into your "else" that try to use an ImageLoaderSourceHandler, that rise an exception
so my solution is easy and works, just add to your TKCustomMapRenderer class this method
private static IImageSourceHandler GetHandler(ImageSource source) {
IImageSourceHandler returnValue = null;
if (source is UriImageSource) {
returnValue = new ImageLoaderSourceHandler();
}
else if (source is FileImageSource) {
returnValue = new FileImageSourceHandler();
}
else if (source is StreamImageSource) {
returnValue = new StreamImagesourceHandler();
}
return returnValue;
}
and then replace
if (pin.Image != null)
{
Android.Graphics.Bitmap icon = null;
if (pin.Image is FileImageSource)
{
icon = await new FileImageSourceHandler().LoadImageAsync(pin.Image, this.Context);
}
else
{
icon = await new ImageLoaderSourceHandler().LoadImageAsync(pin.Image, this.Context);
}
bitmap = BitmapDescriptorFactory.FromBitmap(icon);
}
on both UpdateImage methods, to this
if (pin.Image != null) {
var handler = GetHandler(pin.Image);
Android.Graphics.Bitmap icon = await handler.LoadImageAsync(pin.Image, this.Context).ConfigureAwait(false);
bitmap = BitmapDescriptorFactory.FromBitmap(icon);
}
that's more elegant (don't duplicate code) and works even for StreamImageSource
bye
In OnRoutePropertyChanged you do
var item = this._routes.SingleOrDefault(i => i.Value.Overlay.Equals(route));
Sometimes because of a race condition, this _routes list will have multiple of the same route and therefore this will assert.
As far as I can tell, this happens from the AddRoute function where it's added in the completion handler of the CalculateDirections call.
I'm still trying to reproduce it 100% so I can create a test project or fix it myself and send a pull request.
I think it might be if you change the route data while it's still calculating a previous route, but that's a guess.
Hi,
I am working with Tk.CustomMap on Xamarin Forms XAML. and I am getting this error:
System.MissingMethodException: Default constructor not found for type TK.CustomMap.TKCustomMap
When I open the page which contains the map, that error shows up and my app closes.
I have uninstall the nugget, and reinstalled, I have done all the settings correctly, still I cant get it to work .
Please help!
My XAML looks like this:
<ContentPage.Content>
<Grid RowSpacing="0" ColumnSpacing="0" BackgroundColor="{DynamicResource bgColor}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<!--header-->
<RowDefinition Height="7*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<!--Header-->
<Grid RowSpacing="0" ColumnSpacing="0" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="4" BackgroundColor="{DynamicResource bgColor}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="6*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<BoxView Style="{DynamicResource boxViewHeader}" Grid.ColumnSpan="2" />
<Image x:Name="imgLogoName" Grid.Row="0" Grid.ColumnSpan="2" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"></Image>
<Image x:Name="imgLogo" Grid.Column="1" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"></Image>
<Image x:Name="imageBack" Grid.Row="0" Grid.Column="0" VerticalOptions="EndAndExpand" HorizontalOptions="StartAndExpand">
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="imageBack_Tapped"
NumberOfTapsRequired="1" />
</Image.GestureRecognizers>
</Image>
</Grid>
<!--Header-->
<Grid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<customMap:TKCustomMap x:Name="MyMap" MapType="Street" Grid.Row="0" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" />
</Grid>
<Label x:Name="lblStart" Text="Schorlejagd starten" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="3" VerticalOptions="FillAndExpand" HorizontalOptions="Center"></Label>
<Image x:Name="btnStart" Grid.Row="2" Grid.Column="0" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="btnStart_Tapped"
NumberOfTapsRequired="1" />
</Image.GestureRecognizers>
</Image>
</Grid>
</ContentPage.Content>
and my code:
Geocoder geo = new Geocoder();
List<TKCustomMapPin> pins = new List<TKCustomMapPin>();
foreach (LocationObject location in Globals.Places)
{
var position = new Position(double.Parse(location.Latitude.ToString()), double.Parse(location.Longitude.ToString()));
var pin = new TKCustomMapPin();
pin.Position = position;
pin.Title = location.Name;
pin.Image = Device.OnPlatform("wine.png", "wine.png", "Assets/wine.png");
pins.Add(pin);
}
MyMap.CustomPins = pins;
Hey Torben,
Another small issue I found. On iOS, you need to click the pin twice to get the callout to show. I added a PinSelectedCommand that just shows Debug.WriteLine("Pin clicked"), and if I tap the pin once, I see the message, then tap again and the call out shows?
Cheers,
Kolchy
I'm having this problem and I am using your CustomMap and CustomPin.
Can you have something to do?
https://forums.xamarin.com/discussion/63003/pins-do-not-appear-in-release-mode?new=1
I've tried using the default image pins and a picture and none of the two cases worked.
I have an iPhone 6.
If I connect the iPhone to my MAC and debug your demo app, it works (I can search an address, do long tapping...) but if I create an IPA and install the IPA, it does not work (no search, no long tap), only the map is visualized...
Where is the problem?
Thanks
Foundation.MonoTouchException: Objective-C exception thrown. Name: NSInvalidArgumentException Reason: -[MKMapView setShowsTraffic:]: unrecognized selector sent to instance 0x16752770
Native stack trace:
0 CoreFoundation 0x29df114f + 150
1 libobjc.A.dylib 0x3827bc77 objc_exception_throw + 38
2 CoreFoundation 0x29df65fd + 0
3 CoreFoundation 0x29df44d9 + 712
4 CoreFoundation 0x29d239d8 CF_forwarding_prep_0 + 24
5 ODISMemberiOS 0x00cb72a8 wrapper_managed_to_native_ObjCRuntime_Messaging_void_objc_msgSend_bool_intptr_intptr_bool + 128
6 ODISMemberiOS 0x00c1f364 MapKit_MKMapView_set_ShowsTraffic_bool + 88
7 ODISMemberiOS 0x017e23ec TK_CustomMap_iOSUnified_TKCustomMapRenderer_UpdateShowTraffic + 408
8 ODISMemberiOS 0x017cd078 TK_CustomMap_iOSUnified_TKCustomMapRenderer_OnElementChanged_Xamarin_Forms_Platform_iOS_ElementChangedEventArgs_1_Xamarin_Forms_View + 5720
9 ODISMemberiOS 0x00ac5a58 Xamarin_Forms_Platform_iOS_VisualElementRenderer_1_TElement_REF_SetElement_TElement_REF + 2276
10 ODISMemberiOS 0x00ac512c Xamarin_Forms_Platform_iOS_VisualElementRenderer_1_TElement_REF_Xamarin_Forms_Platform_iOS_IVisualElementRenderer_SetElement_Xamarin_Forms_VisualElement + 160
11 ODISMemberiOS 0x00ab46f0 Xamarin_Forms_Platform_iOS_Platform_CreateRenderer_Xamarin_Forms_VisualElement + 416
12 ODISMemberiOS 0x00ac38f0 Xamarin_Forms_Platform_iOS_VisualElementPackager_OnChildAdded_Xamarin_Forms_VisualElement + 116
13 ODISMemberiOS 0x00ac2388 Xamarin_Forms_Platform_iOS_VisualElementPackager_Load + 484
14 ODISMemberiOS 0x00ac5860 Xamarin_Forms_Platform_iOS_VisualElementRenderer_1_TElement_REF_SetElement_TElement_REF + 1772
15 ODISMemberiOS 0x00ac512c Xamarin_Forms_Platform_iOS_VisualElementRenderer_1_TElement_REF_Xamarin_Forms_Platform_iOS_IVisualElementRenderer_SetElement_Xamarin_Forms_VisualElement + 160
16 ODISMemberiOS 0x00ab46f0 Xamarin_Forms_Platform_iOS_Platform_CreateRenderer_Xamarin_Forms_VisualElement + 416
17 ODISMemberiOS 0x00ac38f0 Xamarin_Forms_Platform_iOS_VisualElementPackager_OnChildAdded_Xamarin_Forms_VisualElement + 116
18 ODISMemberiOS 0x00ac2388 Xamarin_Forms_Platform_iOS_VisualElementPackager_Load + 484
19 ODISMemberiOS 0x00ac5860 Xamarin_Forms_Platform_iOS_VisualElementRenderer_1_TElement_REF_SetElement_TElement_REF + 1772
20 ODISMemberiOS 0x00ac512c Xamarin_Forms_Platform_iOS_VisualElementRenderer_1_TElement_REF_Xamarin_Forms_Platform_iOS_IVisualElementRenderer_SetElement_Xamarin_Forms_VisualElement + 160
21 ODISMemberiOS 0x00ab46f0 Xamarin_Forms_Platform_iOS_Platform_CreateRenderer_Xamarin_Forms_VisualElement + 416
22 ODISMemberiOS 0x00ac38f0 Xamarin_Forms_Platform_iOS_VisualElementPackager_OnChildAdded_Xamarin_Forms_VisualElement + 116
23 ODISMemberiOS 0x00ac382c Xamarin_Forms_Platform_iOS_VisualElementPackager_OnChildAdded_object_Xamarin_Forms_ElementEventArgs + 292
24 ODISMemberiOS 0x004c6dd4 Xamarin_Forms_Element_OnChildAdded_Xamarin_Forms_Element + 572
25 ODISMemberiOS 0x004eaa64 Xamarin_Forms_VisualElement_OnChildAdded_Xamarin_Forms_Element + 120
26 ODISMemberiOS 0x004d0b58 Xamarin_Forms_Layout_1_T_REF_OnChildAdded_Xamarin_Forms_Element + 120
27 ODISMemberiOS 0x004d2e28 Xamarin_Forms_Layout_OnInternalAdded_Xamarin_Forms_View + 132
28 ODISMemberiOS 0x004d25f4 Xamarin_Forms_Layout_InternalChildrenOnCollectionChanged_object_System_Collections_Specialized_NotifyCollectionChangedEventArgs + 1888
29 ODISMemberiOS 0x008007cc wrapper_delegate_invoke__Module_invoke_void_object_NotifyCollectionChangedEventArgs_object_System_Collections_Specialized_NotifyCollectionChangedEventArgs + 216
30 ODISMemberiOS 0x006f7f80 System_Collections_ObjectModel_ObservableCollection_1_T_REF_OnCollectionChanged_System_Collections_Specialized_NotifyCollectionChangedEventArgs + 96
31 ODISMemberiOS 0x006f8180 System_Collections_ObjectModel_ObservableCollection_1_T_REF_OnCollectionChanged_System_Collections_Specialized_NotifyCollectionChangedAction_object_int + 104
32 ODISMemberiOS 0x006f7bb4 System_Collections_ObjectModel_ObservableCollection_1_T_REF_InsertItem_int_T_REF + 120
33 ODISMemberiOS 0x000b1174 System_Collections_ObjectModel_Collection_1_T_REF_Add_T_REF + 180
34 ODISMemberiOS 0x004ce378 Xamarin_Forms_ObservableWrapper_2_TKey_REF_TValue_REF_Add_TValue_REF + 600
35 ODISMemberiOS 0x00f46eb4 ODISMember_Pages_Index_RefreshWorkspace_int + 2728
36 ODISMemberiOS 0x00f48f54 ODISMember_Pages_Index__EventDispatcher_OnRefreshd__3_MoveNext + 4968
37 ODISMemberiOS 0x00140480 System_Runtime_CompilerServices_AsyncMethodBuilderCore_Start_T_REF_T_REF + 252
38 ODISMemberiOS 0x0013f560 System_Runtime_CompilerServices_AsyncVoidMethodBuilder_Start_T_REF_T_REF_ + 64
39 ODISMemberiOS 0x00f463d8 ODISMember_Pages_Index_EventDispatcher_OnRefresh_object_ODISMember_Helpers_UIHelpers_RefreshEventArgs + 564
40 ODISMemberiOS 0x00fb4a14 wrapper_delegate_invoke_System_EventHandler_1_ODISMember_Helpers_UIHelpers_RefreshEventArgs_invoke_void_object_TEventArgs_object_ODISMember_Helpers_UIHelpers_RefreshEventArgs + 712
41 ODISMemberiOS 0x00f15014 ODISMember_Helpers_UIHelpers_EventDispatcher_RaiseEvent_object_ODISMember_Helpers_UIHelpers_RefreshEventArgs + 288
42 ODISMemberiOS 0x00f49c34 ODISMember_Pages_RootPage_NavigateTo_ODISMember_Model_CustomMenuItem + 2060
43 ODISMemberiOS 0x00f49eac ODISMember_Pages_RootPage___ctorb__0_0_object_Xamarin_Forms_SelectedItemChangedEventArgs + 224
44 ODISMemberiOS 0x005ac6fc wrapper_delegate_invoke_System_EventHandler_1_Xamarin_Forms_SelectedItemChangedEventArgs_invoke_void_object_TEventArgs_object_Xamarin_Forms_SelectedItemChangedEventArgs + 712
45 ODISMemberiOS 0x00422be0 Xamarin_Forms_ListView_OnSelectedItemChanged_Xamarin_Forms_BindableObject_object_object + 340
46 ODISMemberiOS 0x0038c9a8 Xamarin_Forms_BindableObject_SetValueActual_Xamarin_Forms_BindableProperty_Xamarin_Forms_BindableObject_BindablePropertyContext_object_bool_Xamarin_Forms_BindableObject_SetValueFlags_bool + 2124
47 ODISMemberiOS 0x0038bf3c Xamarin_Forms_BindableObject_SetValueCore_Xamarin_Forms_BindableProperty_object_Xamarin_Forms_BindableObject_SetValueFlags_Xamarin_Forms_BindableObject_SetValuePrivateFlags + 2456
48 ODISMemberiOS 0x00388810 Xamarin_Forms_BindableObject_SetValue_Xamarin_Forms_BindableProperty_object_bool_bool + 1108
49 ODISMemberiOS 0x00388120 Xamarin_Forms_BindableObject_SetValue_Xamarin_Forms_BindableProperty_object + 148
50 ODISMemberiOS 0x0041f60c Xamarin_Forms_ListView_set_SelectedItem_object + 136
51 ODISMemberiOS 0x00f4b7f8 ODISMember_Pages_MenuPage_selectMenuItem_int + 1024
52 ODISMemberiOS 0x00f4b394 ODISMember_Pages_MenuPage_EventDispatcher_OnRefresh_object_ODISMember_Helpers_UIHelpers_RefreshEventArgs + 364
53 ODISMemberiOS 0x00fb4a14 wrapper_delegate_invoke_System_EventHandler_1_ODISMember_Helpers_UIHelpers_RefreshEventArgs_invoke_void_object_TEventArgs_object_ODISMember_Helpers_UIHelpers_RefreshEventArgs + 712
54 ODISMemberiOS 0x00f15014 ODISMember_Helpers_UIHelpers_EventDispatcher_RaiseEvent_object_ODISMember_Helpers_UIHelpers_RefreshEventArgs + 288
55 ODISMemberiOS 0x00f478dc ODISMember_Pages_Index___ctorb__1_2 + 220
56 ODISMemberiOS 0x004479e8 Xamarin_Forms_Command__c__DisplayClass4_0___ctorb__0_object + 128
57 ODISMemberiOS 0x00447608 Xamarin_Forms_Command_Execute_object + 132
58 ODISMemberiOS 0x003b45dc Xamarin_Forms_TapGestureRecognizer_SendTapped_Xamarin_Forms_View + 432
59 ODISMemberiOS 0x00b42004 Xamarin_Forms_Platform_iOS_EventTracker__c__DisplayClass3_0__GetNativeRecognizerb__0_UIKit_UITapGestureRecognizer + 752
60 ODISMemberiOS 0x00c23c58 UIKit_UITapGestureRecognizer_Callback_Activated_UIKit_UITapGestureRecognizer + 52
61 ODISMemberiOS 0x002f79cc wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr + 256
62 ODISMemberiOS 0x018f7fcf mono_jit_runtime_invoke + 1130
63 ODISMemberiOS 0x0193a495 mono_runtime_invoke + 88
64 ODISMemberiOS 0x01887859 ZL30native_to_managed_trampoline_1P11objc_objectP13objc_selectorPP11_MonoMethodS0_PKcS7_S7 + 268
65 ODISMemberiOS 0x01895781 -[UITapGestureRecognizer target:] + 80
66 UIKit 0x2d5cebbf + 294
67 UIKit 0x2d47dd0d + 668
68 UIKit 0x2d897991 + 48
69 UIKit 0x2d446cc5 + 216
70 UIKit 0x2d444c3f + 2950
71 UIKit 0x2d47c0dd + 784
72 UIKit 0x2d47b9cd + 520
73 UIKit 0x2d451ba5 + 196
74 UIKit 0x2d6c82bf + 14538
75 UIKit 0x2d4505a7 + 1350
76 CoreFoundation 0x29db722f + 14
77 CoreFoundation 0x29db6643 + 222
78 CoreFoundation 0x29db4cc1 + 768
79 CoreFoundation 0x29d009a1 CFRunLoopRunSpecific + 476
80 CoreFoundation 0x29d007b3 CFRunLoopRunInMode + 106
81 GraphicsServices 0x316c21a9 GSEventRunModal + 136
82 UIKit 0x2d4b1635 UIApplicationMain + 1440
83 ODISMemberiOS 0x00cc392c wrapper_managed_to_native_UIKit_UIApplication_UIApplicationMain_int_string___intptr_intptr + 272
84 ODISMemberiOS 0x00c16c50 UIKit_UIApplication_Main_string___intptr_intptr + 52
85 ODISMemberiOS 0x00c16c10 UIKit_UIApplication_Main_string___string_string + 204
86 ODISMemberiOS 0x0007d4a0 ODISMember_iOS_Application_Main_string + 192
87 ODISMemberiOS 0x002f79cc wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr + 256
88 ODISMemberiOS 0x018f7fcf mono_jit_runtime_invoke + 1130
89 ODISMemberiOS 0x0193a495 mono_runtime_invoke + 88
90 ODISMemberiOS 0x0193d7c1 mono_runtime_exec_main + 284
91 ODISMemberiOS 0x019a9ff0 xamarin_main + 2072
92 ODISMemberiOS 0x0189fe51 main + 112
93 libdyld.dylib 0x38849aaf + 2
at ObjCRuntime.Runtime.ThrowNSException (IntPtr ns_exception) [0x00000] in /Users/builder/data/lanes/3051/5f11db87/source/maccore/src/ObjCRuntime/Runtime.cs:234
at ObjCRuntime.Runtime.throw_ns_exception (IntPtr exc) <0xc3ad24 + 0x0001b> in :0
at (wrapper native-to-managed) ObjCRuntime.Runtime:throw_ns_exception (intptr)
at (wrapper managed-to-native) UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)
at UIKit.UIApplication.Main (System.String[] args, IntPtr principal, IntPtr delegate) [0x00005] in /Users/builder/data/lanes/3051/5f11db87/source/maccore/src/UIKit/UIApplication.cs:77
at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0001c] in /Users/builder/data/lanes/3051/5f11db87/source/maccore/src/UIKit/UIApplication.cs:60
at ODISMember.iOS.Application.Main (System.String[] args) [0x00002] in D:\TFS\pinnacleps.visualstudio.com\ODIS\ODIS-Enhancements-EF6-dev-PinnacleVP\Mobile\ODISMember\ODISMember.iOS\Main.cs:20 0 CoreFoundation 0x29df114f + 150
1 libobjc.A.dylib 0x3827bc77 objc_exception_throw + 38
2 CoreFoundation 0x29df65fd + 0
3 CoreFoundation 0x29df44d9 + 712
4 CoreFoundation 0x29d239d8 CF_forwarding_prep_0 + 24
5 ODISMemberiOS 0x00cb72a8 wrapper_managed_to_native_ObjCRuntime_Messaging_void_objc_msgSend_bool_intptr_intptr_bool + 128
6 ODISMemberiOS 0x00c1f364 MapKit_MKMapView_set_ShowsTraffic_bool + 88
7 ODISMemberiOS 0x017e23ec TK_CustomMap_iOSUnified_TKCustomMapRenderer_UpdateShowTraffic + 408
8 ODISMemberiOS 0x017cd078 TK_CustomMap_iOSUnified_TKCustomMapRenderer_OnElementChanged_Xamarin_Forms_Platform_iOS_ElementChangedEventArgs_1_Xamarin_Forms_View + 5720
9 ODISMemberiOS 0x00ac5a58 Xamarin_Forms_Platform_iOS_VisualElementRenderer_1_TElement_REF_SetElement_TElement_REF + 2276
10 ODISMemberiOS 0x00ac512c Xamarin_Forms_Platform_iOS_VisualElementRenderer_1_TElement_REF_Xamarin_Forms_Platform_iOS_IVisualElementRenderer_SetElement_Xamarin_Forms_VisualElement + 160
11 ODISMemberiOS 0x00ab46f0 Xamarin_Forms_Platform_iOS_Platform_CreateRenderer_Xamarin_Forms_VisualElement + 416
12 ODISMemberiOS 0x00ac38f0 Xamarin_Forms_Platform_iOS_VisualElementPackager_OnChildAdded_Xamarin_Forms_VisualElement + 116
13 ODISMemberiOS 0x00ac2388 Xamarin_Forms_Platform_iOS_VisualElementPackager_Load + 484
14 ODISMemberiOS 0x00ac5860 Xamarin_Forms_Platform_iOS_VisualElementRenderer_1_TElement_REF_SetElement_TElement_REF + 1772
15 ODISMemberiOS 0x00ac512c Xamarin_Forms_Platform_iOS_VisualElementRenderer_1_TElement_REF_Xamarin_Forms_Platform_iOS_IVisualElementRenderer_SetElement_Xamarin_Forms_VisualElement + 160
16 ODISMemberiOS 0x00ab46f0 Xamarin_Forms_Platform_iOS_Platform_CreateRenderer_Xamarin_Forms_VisualElement + 416
17 ODISMemberiOS 0x00ac38f0 Xamarin_Forms_Platform_iOS_VisualElementPackager_OnChildAdded_Xamarin_Forms_VisualElement + 116
18 ODISMemberiOS 0x00ac2388 Xamarin_Forms_Platform_iOS_VisualElementPackager_Load + 484
19 ODISMemberiOS 0x00ac5860 Xamarin_Forms_Platform_iOS_VisualElementRenderer_1_TElement_REF_SetElement_TElement_REF + 1772
20 ODISMemberiOS 0x00ac512c Xamarin_Forms_Platform_iOS_VisualElementRenderer_1_TElement_REF_Xamarin_Forms_Platform_iOS_IVisualElementRenderer_SetElement_Xamarin_Forms_VisualElement + 160
21 ODISMemberiOS 0x00ab46f0 Xamarin_Forms_Platform_iOS_Platform_CreateRenderer_Xamarin_Forms_VisualElement + 416
22 ODISMemberiOS 0x00ac38f0 Xamarin_Forms_Platform_iOS_VisualElementPackager_OnChildAdded_Xamarin_Forms_VisualElement + 116
23 ODISMemberiOS 0x00ac382c Xamarin_Forms_Platform_iOS_VisualElementPackager_OnChildAdded_object_Xamarin_Forms_ElementEventArgs + 292
24 ODISMemberiOS 0x004c6dd4 Xamarin_Forms_Element_OnChildAdded_Xamarin_Forms_Element + 572
25 ODISMemberiOS 0x004eaa64 Xamarin_Forms_VisualElement_OnChildAdded_Xamarin_Forms_Element + 120
26 ODISMemberiOS 0x004d0b58 Xamarin_Forms_Layout_1_T_REF_OnChildAdded_Xamarin_Forms_Element + 120
27 ODISMemberiOS 0x004d2e28 Xamarin_Forms_Layout_OnInternalAdded_Xamarin_Forms_View + 132
28 ODISMemberiOS 0x004d25f4 Xamarin_Forms_Layout_InternalChildrenOnCollectionChanged_object_System_Collections_Specialized_NotifyCollectionChangedEventArgs + 1888
29 ODISMemberiOS 0x008007cc wrapper_delegate_invoke__Module_invoke_void_object_NotifyCollectionChangedEventArgs_object_System_Collections_Specialized_NotifyCollectionChangedEventArgs + 216
30 ODISMemberiOS 0x006f7f80 System_Collections_ObjectModel_ObservableCollection_1_T_REF_OnCollectionChanged_System_Collections_Specialized_NotifyCollectionChangedEventArgs + 96
31 ODISMemberiOS 0x006f8180 System_Collections_ObjectModel_ObservableCollection_1_T_REF_OnCollectionChanged_System_Collections_Specialized_NotifyCollectionChangedAction_object_int + 104
32 ODISMemberiOS 0x006f7bb4 System_Collections_ObjectModel_ObservableCollection_1_T_REF_InsertItem_int_T_REF + 120
33 ODISMemberiOS 0x000b1174 System_Collections_ObjectModel_Collection_1_T_REF_Add_T_REF + 180
34 ODISMemberiOS 0x004ce378 Xamarin_Forms_ObservableWrapper_2_TKey_REF_TValue_REF_Add_TValue_REF + 600
35 ODISMemberiOS 0x00f46eb4 ODISMember_Pages_Index_RefreshWorkspace_int + 2728
36 ODISMemberiOS 0x00f48f54 ODISMember_Pages_Index__EventDispatcher_OnRefreshd__3_MoveNext + 4968
37 ODISMemberiOS 0x00140480 System_Runtime_CompilerServices_AsyncMethodBuilderCore_Start_T_REF_T_REF + 252
38 ODISMemberiOS 0x0013f560 System_Runtime_CompilerServices_AsyncVoidMethodBuilder_Start_T_REF_T_REF_ + 64
39 ODISMemberiOS 0x00f463d8 ODISMember_Pages_Index_EventDispatcher_OnRefresh_object_ODISMember_Helpers_UIHelpers_RefreshEventArgs + 564
40 ODISMemberiOS 0x00fb4a14 wrapper_delegate_invoke_System_EventHandler_1_ODISMember_Helpers_UIHelpers_RefreshEventArgs_invoke_void_object_TEventArgs_object_ODISMember_Helpers_UIHelpers_RefreshEventArgs + 712
41 ODISMemberiOS 0x00f15014 ODISMember_Helpers_UIHelpers_EventDispatcher_RaiseEvent_object_ODISMember_Helpers_UIHelpers_RefreshEventArgs + 288
42 ODISMemberiOS 0x00f49c34 ODISMember_Pages_RootPage_NavigateTo_ODISMember_Model_CustomMenuItem + 2060
43 ODISMemberiOS 0x00f49eac ODISMember_Pages_RootPage___ctorb__0_0_object_Xamarin_Forms_SelectedItemChangedEventArgs + 224
44 ODISMemberiOS 0x005ac6fc wrapper_delegate_invoke_System_EventHandler_1_Xamarin_Forms_SelectedItemChangedEventArgs_invoke_void_object_TEventArgs_object_Xamarin_Forms_SelectedItemChangedEventArgs + 712
45 ODISMemberiOS 0x00422be0 Xamarin_Forms_ListView_OnSelectedItemChanged_Xamarin_Forms_BindableObject_object_object + 340
46 ODISMemberiOS 0x0038c9a8 Xamarin_Forms_BindableObject_SetValueActual_Xamarin_Forms_BindableProperty_Xamarin_Forms_BindableObject_BindablePropertyContext_object_bool_Xamarin_Forms_BindableObject_SetValueFlags_bool + 2124
47 ODISMemberiOS 0x0038bf3c Xamarin_Forms_BindableObject_SetValueCore_Xamarin_Forms_BindableProperty_object_Xamarin_Forms_BindableObject_SetValueFlags_Xamarin_Forms_BindableObject_SetValuePrivateFlags + 2456
48 ODISMemberiOS 0x00388810 Xamarin_Forms_BindableObject_SetValue_Xamarin_Forms_BindableProperty_object_bool_bool + 1108
49 ODISMemberiOS 0x00388120 Xamarin_Forms_BindableObject_SetValue_Xamarin_Forms_BindableProperty_object + 148
50 ODISMemberiOS 0x0041f60c Xamarin_Forms_ListView_set_SelectedItem_object + 136
51 ODISMemberiOS 0x00f4b7f8 ODISMember_Pages_MenuPage_selectMenuItem_int + 1024
52 ODISMemberiOS 0x00f4b394 ODISMember_Pages_MenuPage_EventDispatcher_OnRefresh_object_ODISMember_Helpers_UIHelpers_RefreshEventArgs + 364
53 ODISMemberiOS 0x00fb4a14 wrapper_delegate_invoke_System_EventHandler_1_ODISMember_Helpers_UIHelpers_RefreshEventArgs_invoke_void_object_TEventArgs_object_ODISMember_Helpers_UIHelpers_RefreshEventArgs + 712
54 ODISMemberiOS 0x00f15014 ODISMember_Helpers_UIHelpers_EventDispatcher_RaiseEvent_object_ODISMember_Helpers_UIHelpers_RefreshEventArgs + 288
55 ODISMemberiOS 0x00f478dc ODISMember_Pages_Index___ctorb__1_2 + 220
56 ODISMemberiOS 0x004479e8 Xamarin_Forms_Command__c__DisplayClass4_0___ctorb__0_object + 128
57 ODISMemberiOS 0x00447608 Xamarin_Forms_Command_Execute_object + 132
58 ODISMemberiOS 0x003b45dc Xamarin_Forms_TapGestureRecognizer_SendTapped_Xamarin_Forms_View + 432
59 ODISMemberiOS 0x00b42004 Xamarin_Forms_Platform_iOS_EventTracker__c__DisplayClass3_0__GetNativeRecognizerb__0_UIKit_UITapGestureRecognizer + 752
60 ODISMemberiOS 0x00c23c58 UIKit_UITapGestureRecognizer_Callback_Activated_UIKit_UITapGestureRecognizer + 52
61 ODISMemberiOS 0x002f79cc wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr + 256
62 ODISMemberiOS 0x018f7fcf mono_jit_runtime_invoke + 1130
63 ODISMemberiOS 0x0193a495 mono_runtime_invoke + 88
64 ODISMemberiOS 0x01887859 ZL30native_to_managed_trampoline_1P11objc_objectP13objc_selectorPP11_MonoMethodS0_PKcS7_S7 + 268
65 ODISMemberiOS 0x01895781 -[UITapGestureRecognizer target:] + 80
66 UIKit 0x2d5cebbf + 294
67 UIKit 0x2d47dd0d + 668
68 UIKit 0x2d897991 + 48
69 UIKit 0x2d446cc5 + 216
70 UIKit 0x2d444c3f + 2950
71 UIKit 0x2d47c0dd + 784
72 UIKit 0x2d47b9cd + 520
73 UIKit 0x2d451ba5 + 196
74 UIKit 0x2d6c82bf + 14538
75 UIKit 0x2d4505a7 + 1350
76 CoreFoundation 0x29db722f + 14
77 CoreFoundation 0x29db6643 + 222
78 CoreFoundation 0x29db4cc1 + 768
79 CoreFoundation 0x29d009a1 CFRunLoopRunSpecific + 476
80 CoreFoundation 0x29d007b3 CFRunLoopRunInMode + 106
81 GraphicsServices 0x316c21a9 GSEventRunModal + 136
82 UIKit 0x2d4b1635 UIApplicationMain + 1440
83 ODISMemberiOS 0x00cc392c wrapper_managed_to_native_UIKit_UIApplication_UIApplicationMain_int_string___intptr_intptr + 272
84 ODISMemberiOS 0x00c16c50 UIKit_UIApplication_Main_string___intptr_intptr + 52
85 ODISMemberiOS 0x00c16c10 UIKit_UIApplication_Main_string___string_string + 204
86 ODISMemberiOS 0x0007d4a0 ODISMember_iOS_Application_Main_string + 192
87 ODISMemberiOS 0x002f79cc wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr + 256
88 ODISMemberiOS 0x018f7fcf mono_jit_runtime_invoke + 1130
89 ODISMemberiOS 0x0193a495 mono_runtime_invoke + 88
90 ODISMemberiOS 0x0193d7c1 mono_runtime_exec_main + 284
91 ODISMemberiOS 0x019a9ff0 xamarin_main + 2072
92 ODISMemberiOS 0x0189fe51 main + 112
93 libdyld.dylib 0x38849aaf + 2
please do the need full
Is there anyway to show Google Maps in TK.CustomMap on iOS?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.