解除项目中的错误

时间:2017-07-31 17:57:45

标签: ios swift

我有一个问题,我实现了一个配置文件屏幕,您可以在其中转到设置屏幕并编辑您的图片。当我单击配置文件设置按钮时,它也会显示我可以编辑配置文件的屏幕。以下代码包含推送该视图控制器的操作

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)
}
///////////////////////////////////////////////////////////////////////////////////



  }

1 个答案:

答案 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)

}