1

MapView のスクリーンショットを撮り、写真に保存したい

これは使用されたソースです:

- (IBAction)screenshot:(id)sender {



if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
    UIGraphicsBeginImageContextWithOptions(mapView.frame.size, NO, [UIScreen mainScreen].scale);

else


UIGraphicsBeginImageContext(mapView.frame.size);
[mapView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);

}

アクションは成功しましたが、写真は次のようになります MapView スクリーンショット

何が悪いのかわかりません。私はすでにいくつかのコードを試しました。すべて同じ結果です。ビュー全体のスクリーンショットを作成すると、マップも上の写真のようになります。

誰かが何か考えがあるか、私を助けることができますか?

4

1 に答える 1

0

編集:

 - (UIImage*) ImageFromMapView
{
  UIGraphicsBeginImageContext(self.frame.size);
  [self.layer renderInContext:UIGraphicsGetCurrentContext()];
  //[[[yourmapView.layer sublayers] objectAtIndex:1] renderInContext:UIGraphicsGetCurrentContext()];  try this upper fails
  UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();  
  return image;
}

UIGraphicsBeginImageContext の代わりに UIGraphicsBeginImageContextWithOptions を使用してみてください。

 UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0);

注: iOS 4 以降では、UIGraphicsBeginImageContextWithOptions を使用して倍率を指定できます。ゼロの倍率は、デバイスのメイン画面の倍率に設定します。これにより、Retina ディスプレイを含むディスプレイの最もシャープで最高解像度のスナップショットを取得できます。

于 2012-07-01T02:33:41.727 に答える