カメラアプリを作っています。
撮影した写真を
アプリ内に写真を保存して呼び出そうとしていますが、実機で保存されたか、またファイルが存在するか確認したいです。
プリントアウトした保存場所
file:///var/mobile/Containers/Data/Application/6B28AC39-64FF-4E4E-BE45-19FA15297AB6/Documents/photo2.jpg
試したこと
iexplorerというアプリを落としてみましたがfile:///var/mobile/Containers...が探せませんでした。
code全文
// // MemoViewController.swift // Wood volume // // Created by MBP13 on 2019/05/09. // Copyright © 2019 Tomoyuki Ashikari. All rights reserved. // import UIKit import MapKit class MemoViewController: UIViewController ,UIImagePickerControllerDelegate,UINavigationControllerDelegate { @IBOutlet weak var saveButton: UIBarButtonItem! var memo: String?//saveボタン用 // @IBOutlet weak var map: MKMapView! @IBOutlet weak var memoTextField: UITextField! @IBOutlet weak var imageView: UIImageView! @IBAction func launchCamera(_ sender: UIButton) { let camera = UIImagePickerController.SourceType.camera //入力方法を指定し代入 if UIImagePickerController.isSourceTypeAvailable(camera){ //カメラ機能があるか確認 let picker = UIImagePickerController() //モーダルビューコントローラーの作成 picker.sourceType = camera //入力方法cameraをモーダルビューコントローラーに指定 picker.delegate = self self.present(picker,animated: true)//前に出す } } @IBOutlet weak var map: MKMapView! //写真を撮影した後の処理 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info : [UIImagePickerController.InfoKey : Any]){//写真を辞書infoに格納する let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage // キーを使って辞書infoからオリジナル画像を取り出す self.imageView.image = image // let coordinate = info[UIImagePickerController.InfoKey.mediaMetadata] as! String //メタデータ // print(coordinate) UIImageWriteToSavedPhotosAlbum(image,nil,nil,nil)//アルバムに保存 self.dismiss(animated: true)//モーダルビューを非表示に } //保存から呼び出し〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 // ①パスの生成 //UserDefaults のインスタンス生成 let userDefaults = UserDefaults.standard // ドキュメントディレクトリの「ファイルURL」(URL型)定義 var documentDirectoryFileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] // ドキュメントディレクトリの「パス」(String型)定義 let filePath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] //②保存するためのパスを作成する func createLocalDataFile() { // 作成するテキストファイルの名前 let fileName = "photo(cells).jpg" // DocumentディレクトリのfileURLを取得 if documentDirectoryFileURL != nil { // ディレクトリのパスにファイル名をつなげてファイルのフルパスを作る let path = documentDirectoryFileURL.appendingPathComponent(fileName) documentDirectoryFileURL = path print("pathを作りました。pathは(documentDirectoryFileURL)") } } //画像を保存する関数の部分 func saveImage() { createLocalDataFile() //pngで保存する場合 let jpeImageData = imageView.image!.jpegData(compressionQuality: 0.5 ) do { try jpeImageData!.write(to: documentDirectoryFileURL) //②「Documents下のパス情報をUserDefaultsに保存する」 userDefaults.set(documentDirectoryFileURL, forKey: "userImage") let path = String(describing: UserDefaults.standard.url(forKey: "userImage")) print("写真は(path)に保存されました。") } catch { //エラー処理 print("エラー") } } func loadImage(){ // ③UserDefaultsの情報を参照してpath指定に使う guard let url = UserDefaults.standard.url(forKey: "userImage") else { return } // URL取得なし print("(url.absoluteString)を探しています。") if let image = UIImage(contentsOfFile: url.absoluteString) { let image = UIImageView(image: image) imageView.image = image.image imageView.contentMode = UIView.ContentMode.scaleAspectFill print("指定されたファイルが見つかりました") }else{ print("指定されたファイルが見つかりません") } } //〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜保存から呼び出し override func viewDidLoad() { super.viewDidLoad() //文字が入力されるまでsaveButtonを使わない //self.saveButton.isEnabled = false //タイトルを変える self.navigationItem.title = "Edit Memo" //値を受け取る //Optional Binding を使ってあげて、 if let memo = self.memo で memo に self.memo をセットしつつ、もし値がセットされていたら、 textField に memo を渡してあげれば OK if let memo = self.memo{ self.memoTextField.text = memo } self.updateSaveButtonState() // Do any additional setup after loading the view, typically from a nib. loadImage() } private func updateSaveButtonState(){ let memo = self.memoTextField.text ?? "" //memoがnilだったら空文字 self.saveButton.isEnabled = !memo.isEmpty //saveButtonnが有効なのはsaveButtonが空でないとき } //textField に入力された値を検出 //textField を Control + クリックすると Editing Changed //という項目があるので、これをこのあたりにドラッグしてあげてメソッドを作っていきます。 //extField の中身が変わった時の処理をこちらに書くことができます。 @IBAction func memoTextFieldChanged(_ sender: Any) { updateSaveButtonState() } @IBAction func cancel(_ sender: Any) { // self.dismiss(animated: true, completion: nil) if self.presentingViewController is UINavigationController { self.dismiss(animated: true, completion: nil) } else { self.navigationController?.popViewController(animated: true) } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //saveボタンが押されたときの処理だったらsenderに入ってくるのでguardでチェック //ボタンアイテムでキャストする //saveボタンと同じか比較する //そうじゃなかったらreturnでとめる //これでセグエが巻き戻る時に値がセットされる override func prepare(for segue: UIStoryboardSegue, sender: Any?) { guard let button = sender as? UIBarButtonItem, button === self.saveButton else { return } self.memo = self.memoTextField.text ?? "" saveImage() } }

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/11 12:11
2019/06/12 05:40
2019/06/13 10:12