Видео урок. Курс 3 урок 37. Размер img


#1

ОГРОМНОЕ благодарю! За возможность изучать Swift.

А теперь вопрос:
В уроке добавляется фото горизонтальное.
У меня в приложении пользователю нужно установить собственный background и он вертикальный на весь экран.

Работает все прекрасно, только вот с размерами у меня не получается:


Это экран съемки фона - далее жмем “сфотографировать” получаем:

Верх и низ “обрезало”. Увеличить можно - уменьшить, чтоб все вошло нет. Жмем Use Photo

В итоге получается что фото “обрезано” два раза: сначала верх и низ - потом слева и справа.

Как реализовать чтоб на итоговый background попал весь снятый кадр?
Вот такой

пробовал менять параметры

imageView.contentMode = .scaleAspectFill
на
imageView.contentMode = .scaleAspectFit
или
imageView.contentMode = .scaleToFill

Код:

    import UIKit

class TakePhotoViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate  {

    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var nameImageText: UITextField!
    @IBOutlet weak var saveButtonLabel: UIButton!
    @IBOutlet weak var addPhotoLabel: UIButton!
    
    
    
    override func viewWillAppear(_ animated: Bool) {
        navigationController?.setNavigationBarHidden(false, animated: true)
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        addPhotoLabel.layer.cornerRadius = 10
        addPhotoLabel.clipsToBounds = true
        addPhotoLabel.layer.borderWidth = 1
        addPhotoLabel.layer.borderColor = (#colorLiteral(red: 0.1946180165, green: 0.5991917849, blue: 0.9130000472, alpha: 1)).cgColor
        
        saveButtonLabel.layer.cornerRadius = 10
        saveButtonLabel.clipsToBounds = true
        saveButtonLabel.layer.borderWidth = 1
        saveButtonLabel.layer.borderColor = (#colorLiteral(red: 0.1946180165, green: 0.5991917849, blue: 0.9130000472, alpha: 1)).cgColor
        
        nameImageText.layer.cornerRadius = 10
        nameImageText.clipsToBounds = true
        nameImageText.layer.borderWidth = 1
        nameImageText.layer.borderColor = (#colorLiteral(red: 0.1946180165, green: 0.5991917849, blue: 0.9130000472, alpha: 1)).cgColor
    }
    
    //реализация метода для chooseImagePickerAction
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        imageView.image = info[UIImagePickerControllerEditedImage] as? UIImage
        imageView.contentMode = .scaleAspectFill
        imageView.clipsToBounds = true
        dismiss(animated: true, completion: nil)
    }
    
    
    @IBAction func saveButtonPressed(_ sender: UIButton) {
        if nameImageText.text == "Enter name for background" {

            let ac = UIAlertController(title: "Add name!", message: "Please entet name for new background", preferredStyle: .actionSheet)
            let cancel = UIAlertAction(title: "Ok", style: .cancel, handler: nil)
            ac.addAction(cancel)
            present(ac, animated: true, completion: nil)
        } else {
            
            if let context = (UIApplication.shared.delegate as? AppDelegate)?.coreDataStack.persistentContainer.viewContext {
                
                let background = Background(context: context) // имя
                background.name = nameImageText.text
                if let image = imageView.image {
                    background.image = UIImagePNGRepresentation(image) as NSData? // картинка
                } 
                
                do {
                    try context.save()
                    print("Экземпляр BackGround сохранён в coreData")
                    
                } catch let error as NSError {
                    print("Не удалось сохранить данные \(error), \(error.userInfo) ")
                }
            }
            saveButtonLabel.isHidden = true
            nameImageText.isHidden = true
            addPhotoLabel.isHidden = true
        }
    }

    
    @IBAction func pressedTakePhoto(_ sender: UIButton) {
        let ac = UIAlertController(title: "Add photo", message: "You can take or choose the photo", preferredStyle: .actionSheet)
        
        let cameraAction = UIAlertAction(title: "Camera", style: .default, handler: { (action) in
            self.chooseImagePickerAction(source: .camera)
        })
        let photoAction = UIAlertAction(title: "Photo", style: .default, handler: { (action) in
            self.chooseImagePickerAction(source: .photoLibrary)
        })
        let cancel = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
        
        
        ac.addAction(cameraAction)
        ac.addAction(photoAction)
        ac.addAction(cancel)
        present(ac, animated: true, completion: nil)
    }
    func chooseImagePickerAction(source: UIImagePickerControllerSourceType) {
        if UIImagePickerController.isSourceTypeAvailable(source) {
            let imagePicker = UIImagePickerController()
            imagePicker.delegate = self
            imagePicker.allowsEditing = true //масштабирование и обрезание
            imagePicker.sourceType = source
            self.present(imagePicker, animated: true, completion: nil)
        }
    }
}

#2

Если кто-то знает как решить описанную задачу — подскажите пожалуйста! Очень важно.
Или хоть в каком направлении искать ответ.