マーカーの画像を綺麗に表示する。

以前、マーカーの画像を変更する方法を書いたが、その時、Retinaで見ると画像がぼやけて見える。と書いた。 これの解決方法を最近知ったのでメモ。

CLLocationCoordinate2D position = CLLocationCoordinate2DMake(51.5, -0.127);
GMSMarker *london = [GMSMarker markerWithPosition:position];
london.title = @"London";
london.icon = [UIImage imageNamed:@"house"];
london.map = mapView_;

こう書いてたのを以下のように修正する。

CLLocationCoordinate2D position = CLLocationCoordinate2DMake(51.5, -0.127);
GMSMarker *london = [GMSMarker markerWithPosition:position];
london.title = @"London";
UIImage *img = [UIImage imageNamed:@"house"];

CGRect rect = CGRectMake(0,0,40,40* img.size.height / img.size.width);
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0);
[img drawInRect:rect];
img = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

london.icon = img;
london.map = mapView_;

UIGraphicsBeginImageContextWithOptionsを使うところがポイントと思う。 コードは激しく長くなるけど、こんな感じでOK。