StuartDTO
StuartDTO

Reputation: 1061

UIImageView change depends on its state

I'm trying to create an UIImageView that when I tap on it, changes it's image, but don't know how to make it clickable.

I have this :

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

I'm using this image from other class, so perhaps here I do not have to specify anything and only from the method of my presenter set the image as I described :

Enabled = Image1

Disabled = Image2

Upvotes: 0

Views: 333

Answers (2)

PGDev
PGDev

Reputation: 24341

First of all, instead of creating the imageView programatically, create it in the storyboard and use an @IBOutlet for it.

@IBOutlet weak var imageView: UIImageView!

Create 2 UIImage properties enabledImage and disabledImage

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

In viewDidLoad(),

  1. Set the imageView's initial image as enabledImage (change as per your requirement)
  2. Create a UITapGestureRecognizer and add it to the imageView
  3. Set imageView's isUserInteractionEnabled to true
  4. In imageViewTapped(_:) method, modify imageView.image according to the current image set.

So, compiling all the above points

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

Upvotes: 2

Ku6ep
Ku6ep

Reputation: 326

Here sample how to use UITapGesture recognizer:

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

Upvotes: 0

Related Questions