プロが教える店舗&オフィスのセキュリティ対策術

UISliderでMKMapViewの縮尺を変更しようと色々と試しているのですが、なぜかシミュレーションでスライダーを動かすと地図がMAXでドアップになってしまいます。スライダーの値の設定をいじったりしているのですが結果は同じになり困っています。色々調べたのですがかなりお手上げ状態です。ヒントでも構いませんのでアドバイスを頂けたらと思います。よろしくお願い致します。

問題のプログラム文は以下です。


//slider2の設定
UISlider *slider2 = [[UISlider alloc]init];
slider2.frame = CGRectMake(115,195,380,23);
slider2.minimumValue = 0.5;
slider2.maximumValue = 1.5;
slider2.Value = 1.0;
CGAffineTransform trans = CGAffineTransformMakeRotation(M_PI * 90 / 180.0f);
slider2.transform = trans;
[slider2 addTarget:self action:@selector(sliderDidChange2:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:slider2];

//slider2のメソッド設定
-(void)sliderDidChange2:(id)sender{
CLLocationCoordinate2D location = mapView1.centerCoordinate;
MKCoordinateRegion cr =
MKCoordinateRegionMake(location, MKCoordinateSpanMake(slider2.value, slider2.value));
[mapView1 setRegion:cr animated:NO];

A 回答 (1件)

> MKCoordinateRegion cr =


> MKCoordinateRegionMake(location, MKCoordinateSpanMake(slider2.value, slider2.value));

ここが問題のようです。

まず、ViewControllerロード時の、MKMapViewのMKCoordinateSpanを保存しておきます。

ViewControllerのインスタンス変数:

CLLocationDegrees laDelta, loDelta;

ViewDidLoadメソッド:

- (void)viewDidLoad {
[super viewDidLoad];

MKCoordinateRegion rg = mapView.region;
MKCoordinateSpan sp = rg.span;
laDelta = sp.latitudeDelta;
loDelta = sp.longitudeDelta;
}

そのうえで、さきほど指摘した2行を書き換えます。

float scaleValue = slider2.value;
MKCoordinateRegion cr
= MKCoordinateRegionMake(location, MKCoordinateSpanMake(laDelta * scaleValue, loDelta * scaleValue));

縮尺を最大値以上に指定すると、例外が発生して、アプリが落ちます。スライダーの最大値、最小値の設定に注意してください。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございました。

無事スライダーで縮尺の変更を行えるようになりました。

毎回毎回的確なアドバイスを頂きとても感謝致しております。

お礼日時:2011/12/25 12:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!