2013-10-04 7 views
7

を非推奨region.centerは、私は私のiOSアプリのために、このコードを持っている:私はiOSの7に私のアプリをアップグレードしたときにiOSの7から

NSString *location = [[NSString alloc] initWithFormat:@"%@, %@", [self.campus campusStreetAddress], [self.campus campusCityStateZip]]; 
CLGeocoder *geocoder = [[CLGeocoder alloc] init]; 
[geocoder geocodeAddressString:location 
      completionHandler:^(NSArray* placemarks, NSError* error){ 
       if (placemarks && placemarks.count > 0) { 
        CLPlacemark *topResult = [placemarks objectAtIndex:0]; 
        MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult]; 
        MKCoordinateRegion region = self.campusMap.region; 
        region.center = placemark.region.center; //DEPRECATED iOS 7 
        region.span.longitudeDelta /= 1500; 
        region.span.latitudeDelta /= 1500; 
        [self.campusMap setRegion:region animated:NO]; 
        [self.campusMap addAnnotation:placemark]; 
       } 
      } 
]; 

しかし、placemark.region.centerが推奨されていません。私は使用すべき置換えがありますか?これはビュー内にマップを作成するための適切な方法ですか?

ありがとうございます!

答えて

21

これを試してください:あなただけの領域の中心にしたい場合

region.center = [(CLCircularRegion *)placemark.region center]; 
+0

これは完璧に機能しました。ありがとうございました! – jordangrogan

+4

この解決策について悩んでいる唯一のことは、CLPlacemarkの領域プロパティが常に必ずCLCircularRegionになるという保証はないということです。これはおそらく今のところうまくいくかもしれませんが、...私はその地域がCLCircularRegionでcenterプロパティを使用する前に確認し、そうでなければ受け入れ可能な代替値を見つけることを望みます。 –

+0

@DougKnowlesと合意しましたが、より洗練されたソリューションはありませんか? –

8

はあなたが使用することができます。

region.center = placemark.location.coordinateの

+0

実際には、目印センターを使用しているときと、位置座標を使用しているときに、緯度/経度の回答が異なる場合があります。 LETセンター=(目印?!CLCircularRegionとして[0] .region) プリント.center(目印?[0] .location?.coordinate ?? "???") diffは異なる生成するのに十分な大きさですアドレス。 – mark

0

コンビネーションHeesienさんとother answersと少しの実験。

- (void)centerMapAroundPlacemark:(MKPlacemark *)placemark 
{ 
    CLRegion *region = placemark.region; 

    if ([region isKindOfClass:[CLCircularRegion class]]) 
    { 
     [self centerMapAroundCircularRegion:(CLCircularRegion *)region 
          centerCoodinate:placemark.location.coordinate]; 
    } 
    else 
    { 
     [self centerMapAroundCoorinate:placemark.location.coordinate]; 
    } 
} 

- (void)centerMapAroundCircularRegion:(CLCircularRegion *)circularRegion 
{ 
    MKCoordinateRegion coordinateRegion = 
    MKCoordinateRegionMakeWithDistance(circularRegion.center, 
             circularRegion.radius, 
             circularRegion.radius); 

    [self.mapView setRegion:coordinateRegion animated:YES]; 
} 

- (void)centerMapAroundCircularRegion:(CLCircularRegion *)circularRegion 
         centerCoodinate:(CLLocationCoordinate2D)centerCoodinate 
{ 
    // Only user the radius of region for an appropriate zoom level. 
    // The center of the region is not accurate. 
    // To see this search for 'Bath, UK' 

    MKCoordinateRegion coordinateRegion = 
    MKCoordinateRegionMakeWithDistance(centerCoodinate, 
             circularRegion.radius, 
             circularRegion.radius); 

    [self.mapView setRegion:coordinateRegion animated:YES]; 
} 
関連する問題