ОГРОМНОЕ благодарю! За возможность изучать 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)
}
}
}