Swift - как я могу сделать изображение в полноэкранном режиме при нажатии, а затем в оригинальном размере при повторном нажатии?

Для приложения, которое я создаю, я хочу, чтобы пользователь мог щелкнуть изображение, чтобы сделать его полноэкранным в приложении. А затем пользователь сможет щелкнуть изображение в полноэкранном режиме, чтобы сделать его оригинальным.

Возможно ли это?

Любая помощь будет отличной, я просто начинающий ученик на xcode, и мне интересно узнать, как это сделать.

Ответ 1

Вот код, который создает изображение с полным экраном (с черными полосками для сохранения пропорций) при щелчке изображения.

Чтобы использовать это, добавьте этот код в свой ViewController, который содержит изображение.

Затем для вашего образа изображения, который вы хотите развернуть, установите флажок userInteractionEnabled в Инспекторе атрибутов и добавьте к нему TapGestureRecognizer и установите для него вызов imageTapped.

@IBAction func imageTapped(sender: UITapGestureRecognizer) {
    let imageView = sender.view as! UIImageView
    let newImageView = UIImageView(image: imageView.image)
    newImageView.frame = UIScreen.main.bounds
    newImageView.backgroundColor = .blackColor()
    newImageView.contentMode = .ScaleAspectFit
    newImageView.userInteractionEnabled = true
    let tap = UITapGestureRecognizer(target: self, action: "dismissFullscreenImage:")
    newImageView.addGestureRecognizer(tap)
    self.view.addSubview(newImageView)
    self.navigationController?.isNavigationBarHidden = true
    self.tabBarController?.tabBar.isHidden = true
}

func dismissFullscreenImage(sender: UITapGestureRecognizer) {
    self.navigationController?.isNavigationBarHidden = false
    self.tabBarController?.tabBar.isHidden = false
    sender.view?.removeFromSuperview()
}

Этот код работает, создавая новое полноэкранное изображение, которое охватывает все остальное. Он имеет свой собственный TapGestureRecognizer, который удаляет полноэкранное изображение из своего супервизора (и, следовательно, открывает исходный экран).


Обновление для Swift 3 и 4:

@IBAction func imageTapped(_ sender: UITapGestureRecognizer) {
    let imageView = sender.view as! UIImageView
    let newImageView = UIImageView(image: imageView.image)
    newImageView.frame = UIScreen.main.bounds
    newImageView.backgroundColor = .black
    newImageView.contentMode = .scaleAspectFit
    newImageView.isUserInteractionEnabled = true
    let tap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage))
    newImageView.addGestureRecognizer(tap)
    self.view.addSubview(newImageView)
    self.navigationController?.isNavigationBarHidden = true
    self.tabBarController?.tabBar.isHidden = true
}

@objc func dismissFullscreenImage(_ sender: UITapGestureRecognizer) {
    self.navigationController?.isNavigationBarHidden = false
    self.tabBarController?.tabBar.isHidden = false
    sender.view?.removeFromSuperview()
}