OK, I guess the solution probably will be to use the built in pins and the various colors they have or use images.
I have been playing around with this solution and have run into a new problem. This is that I have to update the way pins look every 5 seconds or so. Depending on some data I am loading in the background. Making some simple tests I have not found a nice solution to how to update the view of a pin. I could not find any methods allowing you to update the view or push a new view on a pin and nicely redrawing it. So I have been removing the pins updating the colors then adding new pins with the new colors. Which means that the pins will flicker every 5 seconds when they are removed and re-added with a new color. This also means in this timespan the pins are updating, the user cannot interact with the pin, which is a requirement. Do you know of a way to do this nicely? I have been searching the Internet and cannot seem to find any examples on how to doing this other than removing the pins and re-adding them. Also this seems need to be done on the main thread, as I have been trying to do it in a thread of it's own. This results in the old pin still being there until I zoom in on the map or somehow force the map to be re-drawn along with the pins. On Tue, Sep 6, 2011 at 4:19 PM, Mikkel Lønow <[email protected]> wrote: > Good. > Unfortunately, I haven't tried to draw circles that scales when zooming. You > could put a label on top of the annotation instead, which you can update > when you need to? > > On Tue, Sep 6, 2011 at 16:09, Tomasz Cielecki <[email protected]> wrote: >> >> OK, seems to work now. Thank you. >> >> Though I would still prefer if I could just draw a circle with text >> inside as I could imagine having images for every possible number that >> could appear inside the circle could be problematic to generate. >> >> MonoDroid/Android and Windows Phone 7 makes this possible and the >> overlay layer drawn on top of the map scales when you zoom in and out >> even though you have specified a radius. >> >> See these images for an example: >> http://imageshack.us/photo/my-images/18/device20110906153628.png/ >> http://imageshack.us/photo/my-images/801/device20110906160751.png/ >> >> This is the same effect I want. Preferably without using images. As >> both text and the color of the circle has to be updated sometimes. >> >> On Tue, Sep 6, 2011 at 1:11 PM, Mikkel Lønow <[email protected]> wrote: >> > It's working in MonoDevelop 2.6 RC2. Get it from the updater :) Make >> > sure to >> > set Build Action to Content. >> > Otherwise, you would have to copy them yourself. >> > >> > On Tue, Sep 6, 2011 at 13:08, Tomasz Cielecki <[email protected]> >> > wrote: >> >> >> >> So It seems the images are not included in the .app file. My guess >> >> this is not what I want :D Now how do I make them jump in there >> >> willingly? >> >> >> >> On Tue, Sep 6, 2011 at 9:11 AM, Mikkel Lønow <[email protected]> wrote: >> >> > It should be in bin/Debug/iPhoneSimulator. It's copied to the >> >> > simulator after compilation. >> >> > >> >> > On 06/09/2011, at 09.08, Tomasz Cielecki <[email protected]> >> >> > wrote: >> >> > >> >> >> Trouble is that I am currently using the Emulator to test my app. >> >> >> How >> >> >> do I find the .app package? >> >> >> >> >> >> I am using the latest stable version of MonoDevelop. >> >> >> >> >> >> On Mon, Sep 5, 2011 at 3:45 PM, Mikkel Lønow <[email protected]> >> >> >> wrote: >> >> >>> Right click / Ctrl click / two finger tab on the .app package and >> >> >>> select >> >> >>> Show Package Contents. >> >> >>> What version of MonoDevelop are you using? >> >> >>> >> >> >>> On Mon, Sep 5, 2011 at 15:42, Tomasz Cielecki >> >> >>> <[email protected]> >> >> >>> wrote: >> >> >>>> >> >> >>>> How do I make sure that they are actually copied into the .app >> >> >>>> package? >> >> >>>> >> >> >>>> On Mon, Sep 5, 2011 at 3:39 PM, Mikkel Lønow <[email protected]> >> >> >>>> wrote: >> >> >>>>> At first glance it looks correct. >> >> >>>>> Is Build Action for pin.png set to Content? Can you make sure >> >> >>>>> they >> >> >>>>> are >> >> >>>>> actually copied to the .app package? (there's a bug in some >> >> >>>>> versions >> >> >>>>> of >> >> >>>>> MonoDevelop where images would not be copied). >> >> >>>>> Mikkel >> >> >>>>> P.S. Replied to all. >> >> >>>>> On Mon, Sep 5, 2011 at 15:32, Tomasz Cielecki >> >> >>>>> <[email protected]> >> >> >>>>> wrote: >> >> >>>>>> >> >> >>>>>> I think your suggestion is more or less the same way I am >> >> >>>>>> implementing >> >> >>>>>> it. >> >> >>>>>> >> >> >>>>>> Code can be seen here https://gist.github.com/1194994 or: >> >> >>>>>> >> >> >>>>>> Here is my Main.cs file: >> >> >>>>>> using System; >> >> >>>>>> using System.Collections.Generic; >> >> >>>>>> using System.Linq; >> >> >>>>>> using MonoTouch.Foundation; >> >> >>>>>> using MonoTouch.UIKit; >> >> >>>>>> using LoadSiteList; >> >> >>>>>> using MonoTouch.MapKit; >> >> >>>>>> using MonoTouch.CoreLocation; >> >> >>>>>> >> >> >>>>>> namespace MapsStuff >> >> >>>>>> { >> >> >>>>>> >> >> >>>>>> >> >> >>>>>> public class Application >> >> >>>>>> { >> >> >>>>>> static void Main (string[] args) >> >> >>>>>> { >> >> >>>>>> UIApplication.Main (args); >> >> >>>>>> } >> >> >>>>>> } >> >> >>>>>> >> >> >>>>>> >> >> >>>>>> // The name AppDelegate is referenced in the >> >> >>>>>> MainWindow.xib >> >> >>>>>> file. >> >> >>>>>> public partial class AppDelegate : UIApplicationDelegate >> >> >>>>>> { >> >> >>>>>> UITabBarController tabBarController; >> >> >>>>>> os4MapsViewController viewController; >> >> >>>>>> MapsStuff.TableViewController viewController2; >> >> >>>>>> >> >> >>>>>> >> >> >>>>>> // This method is invoked when the application >> >> >>>>>> has >> >> >>>>>> loaded >> >> >>>>>> its UI and >> >> >>>>>> its ready to run >> >> >>>>>> public override bool FinishedLaunching >> >> >>>>>> (UIApplication >> >> >>>>>> app, >> >> >>>>>> NSDictionary options) >> >> >>>>>> { >> >> >>>>>> window = new UIWindow >> >> >>>>>> (UIScreen.MainScreen.Bounds); >> >> >>>>>> tabBarController = new >> >> >>>>>> UITabBarController(); >> >> >>>>>> >> >> >>>>>> viewController = new >> >> >>>>>> os4MapsViewController(); >> >> >>>>>> viewController2 = new >> >> >>>>>> TableViewController(); >> >> >>>>>> >> >> >>>>>> viewController.TabBarItem = new >> >> >>>>>> UITabBarItem >> >> >>>>>> ("Map", >> >> >>>>>> UIImage.FromFile("Images/103-map.png"), 0); >> >> >>>>>> viewController2.TabBarItem = new >> >> >>>>>> UITabBarItem >> >> >>>>>> ("List", >> >> >>>>>> UIImage.FromFile("Images/103-map.png"), 0); >> >> >>>>>> tabBarController.ViewControllers = new >> >> >>>>>> UIViewController[] >> >> >>>>>> {viewController, viewController2}; >> >> >>>>>> >> >> >>>>>> window.AddSubview(tabBarController.View); >> >> >>>>>> // If you have defined a view, add it >> >> >>>>>> here: >> >> >>>>>> // window.AddSubview >> >> >>>>>> (navigationController.View); >> >> >>>>>> >> >> >>>>>> window.MakeKeyAndVisible (); >> >> >>>>>> >> >> >>>>>> return true; >> >> >>>>>> } >> >> >>>>>> >> >> >>>>>> // This method is required in iPhoneOS 3.0 >> >> >>>>>> public override void OnActivated (UIApplication >> >> >>>>>> application) >> >> >>>>>> { >> >> >>>>>> } >> >> >>>>>> } >> >> >>>>>> } >> >> >>>>>> >> >> >>>>>> Next here is the os4MapsViewController.cs: >> >> >>>>>> >> >> >>>>>> using System; >> >> >>>>>> using System.Drawing; >> >> >>>>>> using System.Collections.Generic; >> >> >>>>>> using System.Diagnostics; >> >> >>>>>> using MonoTouch.Foundation; >> >> >>>>>> using MonoTouch.UIKit; >> >> >>>>>> using MonoTouch.MapKit; >> >> >>>>>> using MonoTouch.CoreLocation; >> >> >>>>>> >> >> >>>>>> namespace MapsStuff >> >> >>>>>> { >> >> >>>>>> public class os4MapsViewController: UIViewController >> >> >>>>>> { >> >> >>>>>> private MKMapView _mapView { get; set; } >> >> >>>>>> List<MapsStuff.MapAnnotation> pins; >> >> >>>>>> >> >> >>>>>> public MKMapView MapView >> >> >>>>>> { >> >> >>>>>> get { return _mapView; } >> >> >>>>>> } >> >> >>>>>> >> >> >>>>>> public os4MapsViewController () : base() >> >> >>>>>> {} >> >> >>>>>> >> >> >>>>>> public override void ViewDidLoad () >> >> >>>>>> { >> >> >>>>>> base.ViewDidLoad (); >> >> >>>>>> >> >> >>>>>> // >> >> >>>>>> // Create our map view and add it as as >> >> >>>>>> subview. >> >> >>>>>> // >> >> >>>>>> pins = CreateRandomPins(); >> >> >>>>>> _mapView = new MKMapView(); >> >> >>>>>> _mapView.Frame = new RectangleF (0, 0, >> >> >>>>>> this.View.Frame.Width, >> >> >>>>>> this.View.Frame.Height); >> >> >>>>>> _mapView.ShowsUserLocation = true; >> >> >>>>>> _mapView.MapType = MKMapType.Hybrid; >> >> >>>>>> _mapView.Delegate = new >> >> >>>>>> MapViewDelegate(); >> >> >>>>>> foreach (MapAnnotation m in pins) >> >> >>>>>> { >> >> >>>>>> _mapView.AddAnnotation(m); >> >> >>>>>> } >> >> >>>>>> View.AddSubview(_mapView); >> >> >>>>>> } >> >> >>>>>> >> >> >>>>>> List<MapsStuff.MapAnnotation> CreateRandomPins() >> >> >>>>>> { >> >> >>>>>> Random r = new Random(); >> >> >>>>>> List<MapsStuff.MapAnnotation> locations = >> >> >>>>>> new >> >> >>>>>> List<MapsStuff.MapAnnotation>(); >> >> >>>>>> for (int i = 0; i < 4; i++) >> >> >>>>>> { >> >> >>>>>> locations.Add( >> >> >>>>>> new >> >> >>>>>> MapsStuff.MapAnnotation( >> >> >>>>>> new >> >> >>>>>> CLLocationCoordinate2D(r.NextDouble() * 180, >> >> >>>>>> r.NextDouble() * 180), >> >> >>>>>> "test" + i, >> >> >>>>>> "sub" + i >> >> >>>>>> )); >> >> >>>>>> } >> >> >>>>>> >> >> >>>>>> return locations; >> >> >>>>>> } >> >> >>>>>> } >> >> >>>>>> public class MapViewDelegate : MKMapViewDelegate >> >> >>>>>> { >> >> >>>>>> public MapViewDelegate (): base() >> >> >>>>>> { >> >> >>>>>> } >> >> >>>>>> public override MKAnnotationView >> >> >>>>>> GetViewForAnnotation >> >> >>>>>> (MKMapView >> >> >>>>>> mapView, NSObject annotation) >> >> >>>>>> { >> >> >>>>>> var anv = >> >> >>>>>> mapView.DequeueReusableAnnotation("thislocation"); >> >> >>>>>> if (anv == null) >> >> >>>>>> { >> >> >>>>>> Console.WriteLine("creating new >> >> >>>>>> MKAnnotationView"); >> >> >>>>>> anv = new >> >> >>>>>> MKPinAnnotationView(annotation, >> >> >>>>>> "thislocation"); >> >> >>>>>> } >> >> >>>>>> else >> >> >>>>>> { >> >> >>>>>> anv.Annotation = annotation; >> >> >>>>>> } >> >> >>>>>> anv.Image = new UIImage("pin.png"); >> >> >>>>>> anv.CanShowCallout = true; >> >> >>>>>> return anv; >> >> >>>>>> } >> >> >>>>>> } >> >> >>>>>> } >> >> >>>>>> >> >> >>>>>> So both the referenced images in Main.cs and the ones in >> >> >>>>>> os4MapsViewController.cs are not shown >> >> >>>>>> >> >> >>>>>> >> >> >>>>>> http://imageshack.us/photo/my-images/850/screenshot20110905at323.png/ >> >> >>>>>> <-- this image shows what I get on the emulator. >> >> >>>>>> >> >> >>>>>> pin.png lies in the root folder of my project. The other image >> >> >>>>>> lies >> >> >>>>>> in >> >> >>>>>> the folder Images in the project dir. None of them seems to show >> >> >>>>>> up. >> >> >>>>>> >> >> >>>>>> Any ideas? I know the code provided uses MKPinAnnotationView, >> >> >>>>>> but >> >> >>>>>> changing it to MKAnnotationView simply shows nothing. >> >> >>>>>> >> >> >>>>>> On Mon, Sep 5, 2011 at 2:48 PM, Mikkel Lønow <[email protected]> >> >> >>>>>> wrote: >> >> >>>>>>> Hi Tomasz, >> >> >>>>>>> I believe MKAnnotationView would be your best option. Use a >> >> >>>>>>> custom >> >> >>>>>>> MKMapViewDelegate and override GetViewForAnnotation where you >> >> >>>>>>> call >> >> >>>>>>> mapView.DequeueReusableAnnotation to reuse the annotation view >> >> >>>>>>> (or >> >> >>>>>>> create a >> >> >>>>>>> new if null). Here you can set your image to the annotation >> >> >>>>>>> view. >> >> >>>>>>> Feel free to share your implementation if you need more help. >> >> >>>>>>> Mikkel >> >> >>>>>>> >> >> >>>>>>> On Mon, Sep 5, 2011 at 14:01, Tomasz Cielecki >> >> >>>>>>> <[email protected]> >> >> >>>>>>> wrote: >> >> >>>>>>>> >> >> >>>>>>>> Hello MonoTouch list, >> >> >>>>>>>> >> >> >>>>>>>> I am in the midst of creating a iPhone app where I need a map >> >> >>>>>>>> with >> >> >>>>>>>> some circles, where the circle colors changes depending on the >> >> >>>>>>>> data >> >> >>>>>>>> received asynchronously in the background. >> >> >>>>>>>> >> >> >>>>>>>> So my first approach to this was to get a Map shown on the >> >> >>>>>>>> devices >> >> >>>>>>>> with a circle, which works fine. Only problem is that MKCircle >> >> >>>>>>>> takes >> >> >>>>>>>> a >> >> >>>>>>>> radius for that circle, which means the circle is only visible >> >> >>>>>>>> at >> >> >>>>>>>> some >> >> >>>>>>>> zoom level. So lets say the circle radius is 100 meters, then >> >> >>>>>>>> I >> >> >>>>>>>> have >> >> >>>>>>>> to zoom to almost the biggest zoom level to get to a point >> >> >>>>>>>> where >> >> >>>>>>>> I >> >> >>>>>>>> actually can see the circle, this is not the desirable >> >> >>>>>>>> behavior. >> >> >>>>>>>> I >> >> >>>>>>>> want to have the circle resize along with the zoom level, just >> >> >>>>>>>> like >> >> >>>>>>>> pins do. >> >> >>>>>>>> >> >> >>>>>>>> So I have also tried to use a custom image on >> >> >>>>>>>> MKPinAnnotationView >> >> >>>>>>>> and >> >> >>>>>>>> on MKAnnotationView, neither of them seems to show my custom >> >> >>>>>>>> image. >> >> >>>>>>>> The normal pin image shows when using MKPinAnnotationView. I >> >> >>>>>>>> have >> >> >>>>>>>> put >> >> >>>>>>>> the pin image in the root of my project and referencing it >> >> >>>>>>>> with >> >> >>>>>>>> the >> >> >>>>>>>> path "pin.png" (the name of the image is actually pin.png). >> >> >>>>>>>> >> >> >>>>>>>> So maybe someone here can help me find out what is wrong, or >> >> >>>>>>>> provide >> >> >>>>>>>> me with some examples on how to do this? I would prefer if I >> >> >>>>>>>> could >> >> >>>>>>>> use >> >> >>>>>>>> MKCircle and just choose the color. But using images could be >> >> >>>>>>>> a >> >> >>>>>>>> solution. >> >> >>>>>>>> >> >> >>>>>>>> -- >> >> >>>>>>>> Med Venlig Hilsen / With Best Regards >> >> >>>>>>>> Tomasz Cielecki >> >> >>>>>>>> http://ostebaronen.dk >> >> >>>>>>>> _______________________________________________ >> >> >>>>>>>> MonoTouch mailing list >> >> >>>>>>>> [email protected] >> >> >>>>>>>> http://lists.ximian.com/mailman/listinfo/monotouch >> >> >>>>>>> >> >> >>>>>>> >> >> >>>>>> >> >> >>>>>> >> >> >>>>>> >> >> >>>>>> -- >> >> >>>>>> Med Venlig Hilsen / With Best Regards >> >> >>>>>> Tomasz Cielecki >> >> >>>>>> http://ostebaronen.dk >> >> >>>>> >> >> >>>>> >> >> >>>> >> >> >>>> >> >> >>>> >> >> >>>> -- >> >> >>>> Med Venlig Hilsen / With Best Regards >> >> >>>> Tomasz Cielecki >> >> >>>> http://ostebaronen.dk >> >> >>> >> >> >>> >> >> >> >> >> >> >> >> >> >> >> >> -- >> >> >> Med Venlig Hilsen / With Best Regards >> >> >> Tomasz Cielecki >> >> >> http://ostebaronen.dk >> >> > >> >> >> >> >> >> >> >> -- >> >> Med Venlig Hilsen / With Best Regards >> >> Tomasz Cielecki >> >> http://ostebaronen.dk >> > >> > >> >> >> >> -- >> Med Venlig Hilsen / With Best Regards >> Tomasz Cielecki >> http://ostebaronen.dk > > -- Med Venlig Hilsen / With Best Regards Tomasz Cielecki http://ostebaronen.dk _______________________________________________ MonoTouch mailing list [email protected] http://lists.ximian.com/mailman/listinfo/monotouch
