2017-02-24 13 views
4

ジオロケーションメタデータを使用してフォトライブラリに写真を保存するにはどうすればよいですか?ジオロケーションデータを含む写真をフォトライブラリに保存Swift 3

私が要求された(および許可)しているユーザーの場所にアクセスするためのアプリ:

private func allowAccessToUserLocation() { 

     locationManager = CLLocationManager() 
     locationManager.delegate = self 
     locationManager.requestWhenInUseAuthorization() 
    } 

私はカメラアプリのための具体的なpremissionsを依頼する必要がありますか?

編集:私はアプリの中から写真を撮るためにUIImagePickerControllerを使用し

。 アプリ内から撮影したすべての写真は、ジオロケーションなしでフォトライブラリに保存されます。

写真ライブラリに画像を保存する方法は何ですか? コアの場所のアクセス権ではなく、私の問題はここにありますか?

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
     if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage{ 
      UIImageWriteToSavedPhotosAlbum(pickedImage, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil) 

      dismiss(animated: true, completion: { 

       self.showPhoto()}) 
     } 
    } 
+0

のために働く私は、フォトライブラリ内の場所と写真の間の関係が何であるかを理解していませんか?あなたの質問を修正して、もっと明確にするように修正してください。 – hasan83

+0

ジオロケーションデータを読み取るコードを追加してください。 – hasan83

+0

GeoCodeLocationを元に戻す前に場所を印刷しましたか?価値は何ですか? – hasan83

答えて

1

は、まあ私はあなたが私が呼び出していますfunc imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {....}

にそうどこかfunc addAsset(image: UIImage, location: CLLocation? = nil) {...}

を呼び出す前に、最初にユーザーの位置にアクセスする必要があると思います:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {...} 

私は場所の更新を停止:

locationManager.stopUpdatingLocation() 

これは私

3

AppleはPhoto Libraryを導入しました。ここで

は、位置がPHAssetを作成し、更新する例です。

func addAsset(image: UIImage, location: CLLocation? = nil) { 
    PHPhotoLibrary.shared().performChanges({ 
     // Request creating an asset from the image. 
     let creationRequest = PHAssetChangeRequest.creationRequestForAsset(from: image) 
     // Set metadata location 
     if let location = location { 
      creationRequest.location = location 
     } 
    }, completionHandler: { success, error in 
     if !success { NSLog("error creating asset: \(error)") } 
    }) 
} 

あなたは

PHPhotoLibrary.requestAuthorization(_:) 

メタデータを読み取ることができて保存する前に、写真にアクセスする権限を確認してください:

info[UIImagePickerControllerMediaMetadata] 

メタデータが場所を格納することを確認できません。私のテストは、ロケーションサービスでさえ許されません。その場合は、CoreLocationを使用して自分で実際の場所を取得できます。

let locationManager = CLLocationManager() 

     if CLLocationManager.locationServicesEnabled() { 
      locationManager.delegate = self 
      locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters 
      locationManager.startUpdatingLocation() 

     } 
     else{ 
      //Location service disabled" 
     } 
     //and then call.... 

     addAsset(image: pickedImage, location: locationManager.location) 

私はで終了したら:

+0

この行にはエラーがあります... asset.location = location '(PHObjectPlaceholderタイプの値にメンバーの場所がありません)' –

+0

申し訳ありませんが、編集を確認します。アルバムコレクションを削除して回答を簡略化しました – XeNoN

関連する問題