UIImageView 的变化取决于它的状态

Posted

技术标签:

【中文标题】UIImageView 的变化取决于它的状态【英文标题】:UIImageView change depends on its state 【发布时间】:2020-02-28 08:06:23 【问题描述】:

我正在尝试创建一个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

禁用 = Image2

【问题讨论】:

将 UITapGestureRecognizer 添加到 imageView。 这是检测点击?您能否提供一个添加此 UITapGestureRecognizer 并根据其状态更改视图的示例? 这能回答你的问题吗? How to assign an action for UIImageView object in Swift 【参考方案1】:

首先,不要以编程方式创建imageView,而是在storyboard 中创建它并为其使用@IBOutlet

@IBOutlet weak var imageView: UIImageView!

创建2个UIImage属性enabledImagedisabledImage

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

viewDidLoad()

    imageView's 初始image 设置为enabledImage(根据您的要求更改) 创建UITapGestureRecognizer 并将其添加到imageViewimageView's isUserInteractionEnabled 设置为trueimageViewTapped(_:)方法中,根据当前image设置修改imageView.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
    

【讨论】:

我没有故事板【参考方案2】:

这里是如何使用 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)
    

【讨论】:

那么我该如何更改图像呢? 在handleTap func处更改图像 将 debugPrint 更改为更改图片的方法。

以上是关于UIImageView 的变化取决于它的状态的主要内容,如果未能解决你的问题,请参考以下文章

具有 contentMode UIViewContentModeScaleAspectFit 的 UIImageView 的 UILabel

状态模式

UIImageView 没有动画

在 UIImageview 上覆盖 UIImageview 保存

设计模式学习总结(二十三)--状态模式

将 UIimageView 放在前面