Я разрабатываю приложение для ios, используя swift4.
При нажатии на вид изображения профиля, чтобы установить изображение профиля в режиме просмотра изображений, у меня есть функция вызова жестом касания.
Ниже приведен мой код.
Я реализовал делегат выбора, используя расширение, следующее за быстрым руководством.
Видя несколько документов об одной и той же проблеме, я думаю, что сделал то, что должен был сделать. Но я не могу понять ошибку и установить изображение на просмотр изображений.
Пожалуйста, проверьте мой код.
import UIKit
import Kingfisher
import Alamofire
import Photos
class MyProfileVC: BaseNavigationVC {
@IBOutlet weak var stateMessageLabel: UILabel!
@IBOutlet weak var profileImageView: UIImageView!
@IBOutlet weak var nicknameLabel: UILabel!
@IBOutlet weak var sexImageView: UIImageView!
@IBOutlet weak var hash1Button: UIButton!
@IBOutlet weak var hash2Button: UIButton!
@IBOutlet weak var hash3Button: UIButton!
let picker = UIImagePickerController()
override func viewDidLoad() {
super.viewDidLoad()
picker.delegate = self
picker.allowsEditing = true
picker.sourceType = .photoLibrary
picker.mediaTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary)!
let tap = UITapGestureRecognizer(target: self, action: #selector(self.tappedProfileImageView))
profileImageView.addGestureRecognizer(tap)
profileImageView.isUserInteractionEnabled = true
}
@objc func tappedProfileImageView(){
openGallery()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(false)
self.checkPermission()
//I updated this part. this code works correctly
if let imageUrl = UserInfo.shared().photoUri{
let url = URL(string: imageUrl)
profileImageView.layer.masksToBounds = false
profileImageView.clipsToBounds = true
profileImageView.layer.cornerRadius = profileImageView.frame.size.width / 2
profileImageView.contentMode = .scaleAspectFill
profileImageView.kf.setImage(with: url)
}
}
func openGallery(){
picker.sourceType = .photoLibrary
present(picker, animated: true, completion: nil)
}
func checkPermission() {
let photoAuthorizationStatus = PHPhotoLibrary.authorizationStatus()
switch photoAuthorizationStatus {
case .authorized: print("Access is granted by user")
case .notDetermined: PHPhotoLibrary.requestAuthorization({
(newStatus) in
print("status is \(newStatus)")
if newStatus == PHAuthorizationStatus.authorized {
print("success") }
})
case .restricted:
print("User do not have access to photo album.")
case .denied:
print("User has denied the permission.")
}
}
}
extension MyProfileVC : UIImagePickerControllerDelegate,
UINavigationControllerDelegate{
@objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage{
self.profileImageView.image = image
print(info)
}
dismiss(animated: true, completion: nil)
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
dismiss(animated: true, completion: nil)
}
}
Что может быть причиной проблемы.
Когда я печатаю информацию, область отладки отображается следующим образом.
[__ C.UIImagePickerControllerInfoKey (_rawValue: UIImagePickerControllerReferenceURL): assets-library: //asset/asset.JPG? Id = 54FE2CEF-59E7-4BCC-AF84-D64C1F32E58BBRID: IICGTRTC_Rec_Rec_Rec_Rec_Rec_Rec_Rec_Rec_Rec_Rec_Rec_Rec_Rec_Rec_Rec_PC {{0, 0}, {+2732,0000581881218, 2047,1787102689659}}, __C.UIImagePickerControllerInfoKey (_rawValue: UIImagePickerControllerEditedImage): размер {748, 560} ориентации 0 шкалы 1,000000, __C.UIImagePickerControllerInfoKey (_rawValue: UIImagePickerControllerMediaType): public.image, __C.UIImagePickerControllerInfoKey (_rawValue: UIImagePickerControllerOriginalImage): размер {2732, 2048}, ориентация 0, масштаб 1.000000, __C.UIImagePickerControllerInfoKey (_rawValue: UIImagePickerControllerPHAsset): 54FE2CEF-59E7-4By / 1/0/0-type-1: 032-AFE-84F-LF-084-AF-84: 2732x2048), creationDate = 2018-09-17 02:01:23 +0000, location = 0, hidden = 0, favour = 0, __C.UIImagePickerControllerInfoKey (_rawValue: UIImagePickerControllerImageURL): file: // /private/var/mobile/Containers/Data/Application/CD64C336-B5F1-48F6-9D54-504006ADD6E2/tmp/DD94F454-F3BE-4EF9-9F6F-0C90F61BEE19.jpeg]