LoginSignup
2
2

More than 5 years have passed since last update.

MKPolylineViewのdeprecatedで警告が出た時の対処法

Posted at

Objective-Cを使用しているプロジェクトでXcodeのバージョンを上げたら下記のような警告がでませんでしたか?

'initWithOverlay:' is deprecated: first deprecated in iOS 7.0

このdeprecatedはMKOverlayViewを継承いているMKPolygonViewMKCircleViewのイニシャライザが対象になっていると思います。

おそらくMKMapViewDelegateプロトコルのmapView:viewForOverlay:またはmapView:didAddOverlayViews:メソッドで出ていると思います。では前者を例にしてみましょう。

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay
{
    if ([overlay isKindOfClass:[MKPolyline class]]) {
        MKPolylineView *view = [[MKPolylineView alloc] initWithOverlay:overlay]; // Warning!
        view.strokeColor = [UIColor redColor];
        return view;
    } else if ([overlay isKindOfClass:[MKPolygon class]]) {
        MKPolygonView *view = [[MKPolygonView alloc] initWithOverlay:overlay]; // Warning!
        view.fillColor = [UIColor blueColor];
        return view;
    }

    return nil;
}

MKMapViewDelegate Protocol Reference

Deprecation Statement
Implement the mapView:rendererForOverlay: method instead.

上記のApple公式リファレンスの通りmapView:rendererForOverlay:またはmapView:didAddOverlayRenderers:メソッドに置き換えましょう。こっちはSwiftで書きましょう。

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {
    if overlay is MKPolyline {
        let render = MKPolylineRenderer(overlay: overlay)
        render.strokeColor = UIColor.redColor()
        return render
    } else if overlay is MKPolygon {
        let render = MKPolygonRenderer(overlay: overlay)
        render.fillColor = UIColor.blueColor()
        return render
    }

    return nil
}

mapView:viewForOverlay:ではView(UIView)そのものを返しているのに対し、mapView:rendererForOverlay:は描画するためのレンダラー(NSObject)を返しています。

パッと見何が変わったのかもわからないくらいの変化ですね。なぜこのような変更があったのか、おそらくMKOverlayを継承させたCustomOverlayを使えるようにするためだと思います。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2