MKMapSnapshotterでsnapshotが取れなくなる件 [楽しいプログラミング]
唐突にプログラムネタで申し訳ない。
iOSのmapviewの画像を取り込みたい場合、通常はすなっぷしょったー(MKMapSnapshotter)というのを用いて、適当にオプションにパラメータ詰め込んで、こ〜んな感じにすれば良い。(雑な説明だなw)
class ViewController: UIViewController { @IBOutlet weak var mapView: MKMapView! @IBAction func snapshot(_ sender: Any) { let options = MKMapSnapshotter.Options() options.region = self.mapView.region //地図の範囲 options.size = CGSize(width: 640, height: 480) //出力画像のサイズ let snapshotter = MKMapSnapshotter(options: options) snapshotter.start { (snapshot, error) in // Snapshot!!! guard let snapshot = snapshot else {print("snapshotが出ーへん"); return} // ファイルを書き込む場所 let documentsPath = NSHomeDirectory() + "/Documents" let filename = "snapshot" var url = URL(fileURLWithPath: documentsPath) url.appendPathComponent(filename) url.appendPathExtension("png") // png dataを書き込む let data = snapshot.image.pngData() do {try data?.write(to: url)} catch {print(error)} } } }
ボタンを押したときのアクションに、上のsnapshot(_ sender: Any)を接続しておけば、Documentsディレクトリにpngファイルが書き込まれるという寸法だ。(何が寸法だよ)
ところが、このソースコードにおいて、snapshotter.startから戻ってきたブロック内で、まさに"snapshotが出ーへん"な現象が生じたのである。実に困る。その先が進まない。画像が出せない。
ってか何でブロックの1番目の引数(snapshotのことです)がOptionalなんだよ!(怒!) (nilで渡されることがある、つまりsnapshotオブジェクトが取得できない可能性があるという意味ですw)
いや笑い事じゃないぞ。私はこれで3日も悩んだのだ!(www)
ってか何でブロックの1番目の引数(snapshotのことです)がOptionalなんだよ!(怒!) (nilで渡されることがある、つまりsnapshotオブジェクトが取得できない可能性があるという意味ですw)
いや笑い事じゃないぞ。私はこれで3日も悩んだのだ!(www)
そうこうしているうちに、ふとiPhoneを見ると「設定」アイコンに赤丸がついている。急上昇中である。「容量いっぱいだからストレージ(有料)を増やしなさい」という、商売っ気まんまんのAppleさんのお告げである。
いつものことだ。藪だの山道だの藪だの風景だの藪だの鉄塔だのの画像で満タンになっている私のiPhoneのことである。(半分藪かよ!)
だがこれはこれで、まずいことはまずい。ひとまず藪だの山道だの(以下略)をPCに移動させ消去する。
よし、だいぶ空きができたぞ。赤丸も消えた。Appleも金をとりっぱぐれたことになる。ざまーみろ。(笑)
いつものことだ。藪だの山道だの藪だの風景だの藪だの鉄塔だのの画像で満タンになっている私のiPhoneのことである。(半分藪かよ!)
だがこれはこれで、まずいことはまずい。ひとまず藪だの山道だの(以下略)をPCに移動させ消去する。
よし、だいぶ空きができたぞ。赤丸も消えた。Appleも金をとりっぱぐれたことになる。ざまーみろ。(笑)
そんなわけで再起動とかかけて一晩置いておいたら、上のsnapshotがちゃんと出るようになった。(はい?)
どうやら、iPhoneの空き容量が少ないと、MKSnapshotterでsnapshotが取れなくなることがあるらしい。
以上のことに何の確たる証拠もないのだが(たまたまかもしれないし)、この現象について検索をかけても何も出てこなかったので、一応ここに書いておく。もし仮に同現象が出ている方がいらっしゃって、これで解決すれば良いのだが、違ってたらごめんなさい。
つづく(?)
コメント 0