2013-12-16 4 views
-2

В моем приложении у меня есть mapView и кнопка на нем, кнопка используется для переключения mapView между стандартным mapView и спутниковым видом.iOS- Как изменить изображение и свойство кнопки, щелкнув по нему?

enter image description here
Вот оснастка выстрел, если нажать кнопку спутника, MAPview должен переодеться в сателлитном виде и изображение кнопки должно переодеться к следующему изображению,
enter image description here
А теперь вэнь кнопка , он должен быть изменен на обычный mapView.

//mapView 
camera=[GMSCameraPosition cameraWithLatitude:13.45 longitude:80.93 zoom:6]; 
mapView=[GMSMapView mapWithFrame:CGRectMake(0, 0, width, height) camera:camera]; 
mapView.myLocationEnabled=YES; 
//button 
satellite=[UIButton buttonWithType:UIButtonTypeCustom]; 
satellite.Frame=CGRectMake(250, 300, 65 , 65); 
[satellite setBackgroundImage:[UIImage imageNamed:@"Satellite.png"] forState:UIControlStateNormal]; 
[satellite addTarget:self action:@selector(satelliteView:) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:mapView]; 
[self.view addSubview:satellite]; 
+0

Вы не можете показывать свои коды? – Raptor

+0

Вы попробовали метод setBackgroundImage? – johnMa

+0

@johnMa, Ithink U не мог понять мой вопрос. – chandru

ответ

2

Simple:

Попробуйте использовать тег для UIButton. По умолчанию назначьте тег как для стандартного mapView For Ex mapButton.tag = 100;

- (IBAction)mapSatelliteSegmentControlTapped:(UIButton *)sender 
    { 
     if(sender.tag == 100) 
     { 
       self.mapView.mapType = MKMapTypeStandard; 
       // Change the MapButton image as well as tag 
       self.mapButton.tag = 101; // 
       [self.mapButton setImage:[UIImage imageNamed:@"mapSateliite.png"] forState:UIControlStateNormal]; 
     } 
     else 
     { 
       self.mapView.mapType = MKMapTypeSatellite; 
       // Change the MapButton image as well as tag 
       self.mapButton.tag = 100; // 
       [self.mapButton setImage:[UIImage imageNamed:@"mapStandard.png"] 
     } 

} 
+0

Я использую google map api, а не mapkit – chandru

1

вы можете поместить ниже код в контакт внутри метода для изменения изображения кнопки

-(void)settalite:(id)sender{ 

    UIbutton *btn=(UIButton *)sender; 
    [btn setBackgroundImage:[UIImage imageNamed:@"map.png"] forState:UIControlStateNormal]; 

} 
+0

. Я сделал это, проверьте эту ссылку, https://maps.google.co.в/нажмите кнопку спутника на карте, карта и кнопка будут меняться, то же самое, что я должен сделать, – chandru

+0

вы можете установить тег UIButton спутника на другой тег для привязки к тегу –

1

Я просто дать вам предложение, Добавить MKMapView в кнопке метод щелчка, а также дать тег кнопки, такие как. (В вашем случае Изменение GoolgeMap)

myButton.tag = 101; 

И Ниже метод кнопки.

-(void)buttonPressed:(UIButton *) sender 
{ 
    if(self.mapView) 
    { 
     [self.mapView removeFromSuperView]; 
    } 

    self.mapView = [[MKMapView alloc] init]; 
    self.mapView.frame = self.view.bounds;  
    [self.mapView setZoomEnabled:YES]; 
    [self.mapView setScrollEnabled:YES]; 
    [self.mapView setDelegate:self]; 
    [self.view addSubview:self.mapView]; 

    if(sender.tag ==101) 
    { 
     [self.mapView setMapType:MKMapTypeSatellite]; 
     [btnGoHome setImage:[UIImage imageNamed:@"changedImage.png"] forState:UIControlStateNormal]; 
     sender.tag = 100; 
    } 
    else 
    { 
     [btnGoHome setImage:[UIImage imageNamed:@"previouseImage.png"] forState:UIControlStateNormal]; 
     [self.mapView setMapType:MKMapTypeStandard]; 
     sender.tag = 101; 
    } 
} 

И добавить кнопку на self.view и не забудьте написать

[self.view bringSubviewToFront:buttonName]; 
+0

Я использую google map api, а не mapkit – chandru

+0

Тогда измените его с помощью карты google .. карта не важна, логика вам полезна .. :) спасибо :) – iPatel

+0

вместо sender.tag, я использовал [sender tag], он сведен к минимуму мои ошибки, но при этом возникают два ошибки при присваивании значений тега, [тег отправителя] = 101; Присвоение «readonly» результата возврата сообщения Objective-C не допускается – chandru

1
-(IBAction)satelliteView:(UIButton*)sender 
{ 
    switch (sender.tag) { 
     case 0: 
      sender.tag=1; 
      [sender setImage:[UIImage imageNamed:@"standardImage.png"] forState:UIControlStateNormal]; 

      break; 
     case 1: 

      sender.tag=0; 
      [sender setImage:[UIImage imageNamed:@"mapSateliite.png"] forState:UIControlStateNormal]; 
      break; 
     default: 
      break; 
    } 

} 
+0

Я использую карту google api, а не набор карт – chandru

2

Поскольку вы используете одну кнопку для переключения между двумя типами карт, вы должны следить за состояние кнопки. Допустим, ваша кнопка по умолчанию показывает обычный вид карты.

@property(nonatomic, assign) BOOL isSatelliteMap;

Сделать это ЛОЖЬ, когда вид нагрузки в первый раз, как isSatelliteMap = NO;, это означает, что вы будете нагружать MKMapTypeStandard для первой кнопки время & покажет SatelliteImage.

Теперь при нажатии кнопки:

-(void)ButtonPressed:(UIButton*)sender 
{ 
    if(!isSatelliteMap) 
    { 
     //set MKMapTypeSatellite 
     self.mapView.mapType = MKMapTypeSatellite; 
     [sender setImage:[UIImage imageNamed:@"ButtonMapNormal.png"] forState:UIControlStateNormal]; 
     isSatelliteMap = YES; 
    } 
    else 
    { 
     self.mapView.mapType = MKMapTypeStandard; 
     [sender setImage:[UIImage imageNamed:@"ButtonMapSatellite.png"] forState:UIControlStateNormal]; 
     isSatelliteMap = NO; 
    } 
}  

Это вещь, которую вы можете применить к любому типу карты. Я имею в виду, что вы можете сделать то же самое для Google Maps. Надеюсь, это поможет.

+0

нет, это не работает – chandru

Смежные вопросы