Изменение UIImageView зависит от его состояния - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь создать UIImageView, который, когда я нажимаю на него, меняет его изображение, но не знаю, как сделать его кликабельным.

У меня есть это:

lazy var myImage: UIImageView = {
      let image = UIImageView(frame: .zero)
      image.translatesAutoresizingMaskIntoConstraints = false
      image.heightAnchor.constraint(equalToConstant: 50).isActive = true
      image.widthAnchor.constraint(equalToConstant: 50).isActive = true
      image.contentMode = .scaleAspectFit
      //Here shall I specify the first state? if it's enabled or not? Enabled or not means enabled = Image1, not enabled = Image2
      return image
    }()

Я использую это изображение из другого класса, поэтому, возможно, здесь мне не нужно ничего указывать, и только из метода моего докладчика установите изображение, как я описал:

Включено = Image1

Отключено = Изображение2

Ответы [ 3 ]

2 голосов
/ 28 февраля 2020

Прежде всего, вместо создания imageView программно, создайте его в storyboard и используйте для него @IBOutlet.

@IBOutlet weak var imageView: UIImageView!

Создайте 2 UIImage свойств enabledImage и disabledImage

let enabledImage = UIImage(named: "enabled")
let disabledImage = UIImage(named: "disabled")

В viewDidLoad(),

  1. Установите imageView's начальный image как enabledImage (измените согласно вашему требованию)
  2. Создайте UITapGestureRecognizer и добавьте его к imageView
  3. Установите imageView's isUserInteractionEnabled в true
  4. В методе imageViewTapped(_:), измените imageView.image согласно на текущий image набор.

Итак, составив все вышеперечисленные пункты

class VC: UIViewController {
    @IBOutlet weak var imageView: UIImageView!
    let enabledImage = UIImage(named: "enabled")
    let disabledImage = UIImage(named: "disabled")

    override func viewDidLoad() {
        super.viewDidLoad()
        imageView.image = enabledImage
        let gesture = UITapGestureRecognizer(target: self, action: #selector(imageViewTapped(_:)))
        imageView.isUserInteractionEnabled = true
        imageView.addGestureRecognizer(gesture)
    }

    @objc func imageViewTapped(_ recognizer: UIGestureRecognizer) {
        imageView.image = (imageView.image == enabledImage) ? disabledImage : enabledImage
    }
}
0 голосов
/ 28 февраля 2020

Вот пример использования распознавателя UITapGesture:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var imageView: UIImageView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        let gestureRecogniser = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))
        imageView.isUserInteractionEnabled = true
        imageView.addGestureRecognizer(gestureRecogniser)
    }

    @objc func handleTap(_ sender: UIImageView) {
        debugPrint(sender)
    }
}
0 голосов
/ 28 февраля 2020

Я использую кнопки вместо imageView в ситуациях, подобных вашей. Это моя кнопка:

enter image description here

И это default(enabled) state config изображение с флагом Engli sh. Измените State Config на Disable и установите изображение как хотите.

enter image description here

Наконец, на вашей кнопке @IBAction func:

yourButton.isEnbaled = !yourButton.isEnbaled //Change enable state every tap.

Для состояния отключения:

enter image description here

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...