Reputation: 1061
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
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()
,
imageView's
initial image
as enabledImage
(change as per your requirement)UITapGestureRecognizer
and add it to the imageView
imageView's
isUserInteractionEnabled
to true
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
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