2015-04-02 59 views
1

我已經創建了4種註解組。在地圖界面中,我還在底部添加了一個標籤欄作爲我的按鈕。關於MapKit中帶有NSMutableArray註解的Tab鍵按鈕

我的標籤欄用於過濾MapKit中的註釋。

例如...我有4組註釋和4個標籤欄項目。

當我點擊標籤欄項目1時,它在MapKit中只顯示1組註釋,其他註解組將在MapKit中隱藏/刪除,但是我未能完成這種工作。

我的代碼:

在MapViewController.h

#import <UIKit/UIKit.h> 
#import <MapKit/MapKit.h> 
#import <CoreLocation/CoreLocation.h> 

@interface MapViewController : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate , UITabBarDelegate>{ 

    IBOutlet UITabBar *tabBar; 

} 

@property (weak, nonatomic) IBOutlet UIBarButtonItem *sidebarButton; 

@property (weak, nonatomic) IBOutlet MKMapView *mapView; 
@property (strong, nonatomic) CLLocationManager *locationManager; 


@end 

我mapViewController.m:

#import "MapViewController.h" 
#import "SWRevealViewController.h" 
#import "Annotation.h" 



@interface MapViewController()<CLLocationManagerDelegate> 


@end 

//set desitination of map 
#define PENANG_LATI 5.419501; 
#define PENANG_LONG 100.323264; 


//shop 
#define SHOP_LATI 5.419501; 
#define SHOP_LONG 100.323264; 

//cafe 
#define CAFE_LATI 5.419917; 
#define CAFE_LONG 100.322969; 

//food 
#define FOOD_LATI 5.419746; 
#define FOOD_LONG 100.322610; 

//mural 
#define MURAL_LATI 5.419786; 
#define MURAL_LONG 100.322510; 




#define THE_SPAN 0.005f; 

@implementation MapViewController 
@synthesize mapView; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 



- (void)viewDidLoad 
{ 

    [super viewDidLoad]; 

    //tabBar 
    tabBar.delegate = self; 

    MKCoordinateRegion myRegion; 

    //Center 
    CLLocationCoordinate2D center; 
    center.latitude = PENANG_LATI; 
    center.longitude = PENANG_LONG; 

    //SPAN 
    MKCoordinateSpan span; 
    span.latitudeDelta = THE_SPAN; 
    span.longitudeDelta = THE_SPAN; 

    myRegion.center = center; 
    myRegion.span = span; 

    //set map 
    [mapView setRegion:myRegion animated:YES]; 

    SWRevealViewController *revealViewController = self.revealViewController; 
    if (revealViewController) 
    { 
     [self.sidebarButton setTarget: self.revealViewController]; 
     [self.sidebarButton setAction: @selector(revealToggle:)]; 
     [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer]; 
    } 


    /* 
    //create coordinate 
    CLLocationCoordinate2D penangLocation; 
    penangLocation.latitude = PENANG_LATI; 
    penangLocation.longitude = PENANG_LONG; 

    Annotation * myAnnotation = [Annotation alloc]; 
    myAnnotation.coordinate = penangLocation; 
    myAnnotation.title = @"THE ONE ACADEMY PENANG"; 
    myAnnotation.subtitle = @"HELLO!! I STUDY HERE"; 
    [self.mapView addAnnotation:myAnnotation]; 
    */ 






} 


- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 
{ 
    //my group of annotation location 
    NSMutableArray * myShop = [[NSMutableArray alloc] init]; 

    NSMutableArray * myCafe = [[NSMutableArray alloc] init]; 

    NSMutableArray * myFood = [[NSMutableArray alloc] init]; 

    NSMutableArray * myMural = [[NSMutableArray alloc] init]; 

    CLLocationCoordinate2D penangLocation; 
    Annotation * myShopAnnotation; 
    Annotation * myCafeAnnotation; 
    Annotation * myFoodAnnotation; 
    Annotation * myMuralAnnotation; 


    //shop location 

    myShopAnnotation = [[Annotation alloc] init]; 
    penangLocation.latitude = SHOP_LATI; 
    penangLocation.longitude = SHOP_LONG; 
    myShopAnnotation.coordinate = penangLocation; 
    myShopAnnotation.title = @"Shop"; 
    myShopAnnotation.subtitle = @"I study here"; 
    [myShop addObject:myShopAnnotation]; 

    //cafe location 

    myCafeAnnotation = [[Annotation alloc] init]; 
    penangLocation.latitude = CAFE_LATI; 
    penangLocation.longitude = CAFE_LONG; 
    myCafeAnnotation.coordinate = penangLocation; 
    myCafeAnnotation.title = @"Cafe"; 
    myCafeAnnotation.subtitle = @"I paid here"; 
    [myCafe addObject:myCafeAnnotation]; 

    //food location 

    myFoodAnnotation = [[Annotation alloc] init]; 
    penangLocation.latitude = FOOD_LATI; 
    penangLocation.longitude = FOOD_LONG; 
    myFoodAnnotation.coordinate = penangLocation; 
    myFoodAnnotation.title = @"Food"; 
    myFoodAnnotation.subtitle = @"I walk here"; 
    [myFood addObject:myFoodAnnotation]; 


    //Mural location 

    myMuralAnnotation = [[Annotation alloc] init]; 
    penangLocation.latitude = MURAL_LATI; 
    penangLocation.longitude = MURAL_LONG; 
    myMuralAnnotation.coordinate = penangLocation; 
    myMuralAnnotation.title = @"Mural"; 
    myMuralAnnotation.subtitle = @"I walk here"; 
    [myMural addObject:myMuralAnnotation]; 

    if(item.tag == 1) 
    { 
     //show and hide annotation 
     NSLog(@"shop"); 
     [mapView addAnnotations:myShop]; 
     [mapView removeAnnotations:myCafe]; 
     [mapView removeAnnotations:myFood]; 
     [mapView removeAnnotations:myMural]; 
    } 
    if(item.tag == 2) 
    { 
     //show and hide annotation 
     NSLog(@"cafe"); 
     [mapView removeAnnotations:myShop]; 
     [mapView addAnnotations:myCafe]; 
     [mapView removeAnnotations:myFood]; 
     [mapView removeAnnotations:myMural]; 


    } 


    if(item.tag == 3) 
    { 
     //show and hide annotation 
     NSLog(@"food"); 

     [mapView removeAnnotations:myShop]; 
     [mapView removeAnnotations:myCafe]; 
     [mapView removeAnnotations:myFood]; 
     [mapView addAnnotations:myMural]; 


    } 

    if(item.tag == 4) 
    { 
     //show and hide annotation 
     NSLog(@"mural"); 
     [mapView removeAnnotations:myShop]; 
     [mapView removeAnnotations:myCafe]; 
     [mapView removeAnnotations:myFood]; 
     [mapView addAnnotations:myMural]; 

    } 
} 





- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 




@end 

回答

0

removeAnnotations:被稱爲像這樣:

[mapView removeAnnotations:myCafe]; 

日e地圖視圖會查找地圖上已有的確切對象(,使用指針比較myCafe

這裏的地圖視圖不使用他們的座標,標題等

由於代碼創建每次做出選擇時新實例每個註釋的匹配的註釋,新的實例未發現地圖等removeAnnotations:什麼都不做。

取而代之,對於您的情況,您只需告知地圖視圖即可刪除所有現有註釋,然後根據當前選擇添加新註釋。

取而代之的是:

[mapView addAnnotations:myShop]; 
    [mapView removeAnnotations:myCafe]; 
    [mapView removeAnnotations:myFood]; 
    [mapView removeAnnotations:myMural]; 

做到這一點:

[mapView removeAnnotations:mapView.annotations]; //remove all 
    [mapView addAnnotations:myShop]; //then add new 


的代碼可以通過使用switch聲明,在每種情況下可以簡化爲好,只有創造必要的註釋選擇(您不需要每次創建所有註釋)。

+0

YOU ROCK !!!保存我的生活..謝謝..我應該多練習! – 2015-04-02 15:54:40