我有一个问题,我实现了一个配置文件屏幕,您可以在其中转到设置屏幕并编辑您的图片。当我单击配置文件设置按钮时,它也会显示我可以编辑配置文件的屏幕。以下代码包含推送该视图控制器的操作
import UIKit
class ProfileeViewController: UIViewController {
let profileSetupTransition = AlterProfileViewController()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.white
view.addSubview(profileFilledImage)
view.addSubview(profileeSettings)
navigationItem.title = "Profile"
///////////////////////////////////////////////////////////
//where all constraints f// constraints for the sign up label/title
_ = profileFilledImage.anchor(view.centerYAnchor, left: view.leftAnchor, bottom: nil, right: nil, topConstant: 30, leftConstant: 25, bottomConstant: 0, rightConstant: 0, widthConstant: 15, heightConstant: 15)
//constraints for the sign up button
_ = profileeSettings.anchor(view.centerYAnchor, left: profileFilledImage.rightAnchor, bottom: nil, right: nil, topConstant: 30, leftConstant: 0, bottomConstant: 0, rightConstant: 0, widthConstant: 140, heightConstant: 15)
///////////////////////////////////////////////////////////
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//will just be a nice looking image view to be next to the profile settings button
let profileFilledImage: UIImageView = {
let profileFilledImage = UIImageView()
profileFilledImage.image = UIImage(named: "icons8-User Filled-50")
profileFilledImage.clipsToBounds = true
profileFilledImage.translatesAutoresizingMaskIntoConstraints = false
profileFilledImage.contentMode = .scaleAspectFill
profileFilledImage.layer.masksToBounds = true
return profileFilledImage
}()
// will be the button that the user clicks to edit there profile settings
let profileeSettings: UIButton = {
let profileSetup = UIButton(type: .system)
profileSetup.setTitle("Profile Settings", for: .normal)
profileSetup.setTitleColor(.black, for: .normal)
profileSetup.addTarget(self, action: #selector(handleProfileSetuo), for: .touchUpInside)
return profileSetup
}()
func handleProfileSetuo(){
print("Profile Settings button tapped")
self.navigationController?.pushViewController(profileSetupTransition, animated: true)
//present(profileSetupTransition, animated: true, completion: nil)
}
}
好的以下方法可以处理为用户的个人资料图像选择图像。我使用UI Picker来选择图像,而不是尝试将其保存到配置文件图像视图。当选择器解散时,它会一直返回到根视图控制器,它应该返回到我可以继续编辑配置文件元素的页面。图片也没有改变。我尝试了一切,没有任何作用。该方法的代码如下
import UIKit
class AlterProfileViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
view?.backgroundColor = UIColor.white
navigationItem.title = "Profile Settings"
view.addSubview(selectProfileImage)
///Constraints for all views will go here
_ = selectProfileImage.anchor(view.centerYAnchor, left: view.leftAnchor, bottom: nil, right: nil, topConstant: -275, leftConstant: 135, bottomConstant: 0, rightConstant: 0, widthConstant: 100, heightConstant: 100)
// selectProfileImage.layer.cornerRadius = selectProfileImage.frame.size.width/2
///////////////////////////////////////////////
// Do any additional setup after loading the view.
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
selectProfileImage.layer.cornerRadius = selectProfileImage.frame.size.width / 2;
selectProfileImage.layer.masksToBounds = true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//Where all buttons and labels will be added
//will just be a nice looking image view to be next to the profile settings button
lazy var selectProfileImage: UIImageView = {
let selectPicture = UIImageView()
// self.selectProfileImage.layer.cornerRadius = self.selectProfileImage.frame.size.width / 2;
selectPicture.image = UIImage(named: "Paris")
// selectPicture.layer.cornerRadius = selectPicture.frame.size.width / 2;
selectPicture.clipsToBounds = true
selectPicture.translatesAutoresizingMaskIntoConstraints = false
//selectPicture.layer.cornerRadius = selectPicture.frame.size.width/2
selectPicture.contentMode = .scaleAspectFill
selectPicture.isUserInteractionEnabled = true
selectPicture.layer.shouldRasterize = true
// will allow you to add a target to an image click
selectPicture.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleSelectProfileImageView)))
selectPicture.layer.masksToBounds = true
return selectPicture
}()
func handleSelectProfileImageView(tapGestureRecognizer: UITapGestureRecognizer) {
print("123")
let picker = UIImagePickerController()
picker.delegate = self
picker.allowsEditing = true
present(picker, animated: true, completion: nil)
}
// will dispaly info of image selected
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
print("info")
var selectedImageFromPicker: UIImage?
if let editedImage = info[UIImagePickerControllerEditedImage] as? UIImage{
print((editedImage as AnyObject).size)
selectedImageFromPicker = editedImage
self.selectProfileImage.image = selectedImageFromPicker
picker.dismiss(animated: true, completion: nil)
}else if let originalImage = info[UIImagePickerControllerOriginalImage] as? UIImage{
print((originalImage as AnyObject).size)
selectedImageFromPicker = originalImage
self.selectProfileImage.image = selectedImageFromPicker
picker.dismiss(animated: true, completion: nil)
}
/*
if let selectedImage = selectedImageFromPicker {
selectProfileImage.image = selectedImage
}
*/
/* dismiss(animated: true, completion: {
self.selectProfileImage.image = selectedImageFromPicker
}) */
}
// will handle the picker being closed/canceled
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
print("picker canceled")
dismiss(animated: true, completion: nil)
}
///////////////////////////////////////////////////////////////////////////////////
}
答案 0 :(得分:0)
无论您将imagePicker分配给UIImagePickerController, 你需要写这个
func handleSelectProfileImageView(tapGestureRecognizer: UITapGestureRecognizer) {
print("123")
let picker = UIImagePickerController()
picker.delegate = self
picker.modalPresentationStyle = .overCurrentcontext //This is what I added
picker.allowsEditing = true
present(picker, animated: true, completion: nil)
}