2011-12-19 14 views
1

このコードは、通常iOS 4.3で実行します。しかし、プロジェクトをiOS 5.0に変更すると、地図をスクロールしてズームすることはできません。MKMapViewはiOS 5.0でスクロールしたりズームすることができません

誰でもこの問題が発生する理由を教えていただけますか?どうすれば解決できますか?

コードは次のとおり

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    CGRect rect = CGRectMake(0, 0, 320, 460); 
    map = [[MKMapView alloc] initWithFrame:rect]; 
    map.showsUserLocation = YES; 
    MKUserLocation *userLocation = map.userLocation; 
    [userLocation addObserver:self forKeyPath:@"location" 
         options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionInitial 
         context:nil]; 
    map.scrollEnabled = YES; 
    map.zoomEnabled = YES; 
    map.mapType = MKMapTypeStandard; 
    [self.view addSubview:map]; 
} 

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{  
    if ([change objectForKey:NSKeyValueChangeNewKey] != [NSNull null]) { 
     MKCoordinateRegion region; 

     CLLocationCoordinate2D testCoordinate; 
     double lat = 22.195579570451734; 
     double lng = 113.542275265336; 
     testCoordinate.latitude = lat; 
     testCoordinate.longitude = lng; 
     region.center = testCoordinate; 

     MKCoordinateSpan span; 
     span.latitudeDelta = 0.0011; 
     span.longitudeDelta = 0.0011; 
     region.span = span; 
     [map setRegion:region animated:YES]; 
    } 
} 

答えて

0

コードは、ユーザの場所への変化を観察し、それが起こるときに、いくつかの固定領域に地図の領域を更新しています。

iOS 5.0より前のiOS Simulatorでは、ユーザーの場所の変更はシミュレートされていなかったため、場所変更オブザーバの方法は頻繁に起動しないか、起動しませんでした。したがって、地図をスクロールまたはズームした場合、オブザーバーメソッドが起動するまで(おそらく決して)地図はそのままになります。

iOS 5.0用iOSシミュレータでは、ユーザーの位置の変更がシミュレートされます(またはシミュレーションできる)。 iOSシミュレータの[デバッグ]メニューには、[場所]サブメニューがあります。これがNone以外に設定されていると、ユーザーの場所変更イベントが発生し、オブザーバーメソッドが起動します。場所の設定が都市自転車乗り、都市走行、または高速道路のドライブの場合、ユーザーの場所は頻繁に変更されます。

ユーザーの場所が変更されるたびに、オブザーバーの方法で地図の地域が固定された地域に再設定されているため、地図をスクロールまたはズームすることはほとんど直ちに完了しません。

場所の設定を[なし]または[カスタムの場所](1回のみ有効)に変更します。


KVOを使用してユーザーの場所の変更を観察する必要はありません。アプリをiOS 3.0以前で実行する必要がある場合を除き、代わりにMKMapViewDelegateメソッドmapView:didUpdateUserLocation:を使用してください。

+0

あなたは正しいです、私はmapView:didUpdateUserLocationを使用しています。 –