如何在 Swift 中为 UIImageView 对象分配操作?


在 iOS 应用程序中,UIImageView 类没有提供内置支持使其像其他组件(例如 UIButton)一样可点击。为了使 UIImageView 可点击,您可以向图像视图添加一个 UITapGestureRecognizer。请记住,默认情况下,UIImageView 不会接收用户的任何交互。要使其可交互,请将 isUserInteractionEnabled 属性设置为 true。

在本文中,您将学习如何在 Swift 中向图像视图添加点击手势。

要添加点击手势,我们将遵循以下步骤:

步骤 1 - 创建一个图像视图

let profileImageView = UIImageView()

步骤 2 - 允许交互

profileImageView.isUserInteractionEnabled = true

请记住,您还需要将 profileImageView 对象的 isUserInteractionEnabled 属性设置为 true 以启用用户交互。此属性决定 imageView 是否可以接收触摸事件。因此,您需要将其设置为 true 以允许用户点击图像视图。

步骤 3 - 创建点击手势的实例

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleProfileImageTapped))

UITapGestureRecognizer 是 UIGestureRecognizer 类的子类,可用于对视图进行单次或多次点击。要创建此点击手势的对象,您必须使用 init(target: Any?, action: Selector?) 初始化器。在上面的示例中,我们将目标设置为 self,它表示当前视图控制器。我们还将操作设置为 #selector(handleProfileImageTapped),它是稍后我们将实现的名为 handleProfileImageTapped() 的方法的引用。

步骤 4 - 设置触发手势识别器所需的点击次数

tapGesture.numberOfTapsRequired = 1

默认情况下,UITapGestureRecognizer 需要一次点击才能使手势可操作。但是,您可以通过设置 numberOfTapsRequired 属性的值来更改此行为。在这里,您将其设置为 1,以便在用户在 profileImageView 上点击一次时触发手势识别器。

步骤 5 - 将手势识别器添加到您的 UIImageView 对象

profileImageView.addGestureRecognizer(tapGesture)

要将手势对象添加到 profileImageView 对象,您可以使用 addGestureRecognizer(_:) 方法。您将之前创建的 UITapGestureRecognizer 实例作为参数传入。

步骤 6 - 实现 ImageTapped 方法来处理操作

@objc private func handleProfileImageTapped(_ gesture: UITapGestureRecognizer) {
   if let imageView = gesture.view as? UIImageView {
      print("Image view has tapped !!")
   }
}

在最后一步中,您实现了 handleProfileImageTapped() 方法来处理用户点击 profileImageView 时的点击操作。请注意,您必须使用 @objc 属性才能使该方法可从 Objective-C 代码访问。这是必需的,因为手势识别器是在 Objective-C 中实现的。在此方法中,您可以添加我们希望在用户点击 profileImageView 时运行的代码。

示例

以下是如何使用这些步骤为 UIImageView 对象分配操作的示例

import UIKit
class TestController: UIViewController {
       
   override func viewDidLoad() {
      super.viewDidLoad()
      initialSetup()
   }
       
   private func initialSetup() {

      // create profileImageView object
      let profileImageView = UIImageView()

      // basic setup
      view.backgroundColor = .white
      navigationItem.title = "UIImageView"
      profileImageView.isUserInteractionEnabled = true
      profileImageView.backgroundColor = UIColor(white: 0, alpha: 0.1)
      profileImageView.layer.cornerRadius = 8
      profileImageView.clipsToBounds = true

      // adding required constraints to the profileImageView
      profileImageView.translatesAutoresizingMaskIntoConstraints = false
      profileImageView.heightAnchor.constraint(equalToConstant: 200).isActive = true
      profileImageView.widthAnchor.constraint(equalToConstant: 200).isActive = true
      profileImageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
      profileImageView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

      let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleProfileImageTapped))
      tapGesture.numberOfTapsRequired = 1
      profileImageView.addGestureRecognizer(tapGesture)
   }
       
   @objc private func handleProfileImageTapped(_ gesture: UITapGestureRecognizer) {
      if let imageView = gesture.view as? UIImageView {
         print("Image view has tapped !!")
      }
   }
}

输出

结论

您可以通过向 UIImageView 对象添加 UITapGestureRecognizer 对象来为其分配操作。首先,您创建 UITapGestureRecognizer 类的实例,并设置触发点击手势识别器所需的点击次数。然后,将手势识别器添加到 profileImageView 对象,最后,您需要实现一个方法来处理用户点击图像时的操作。不要忘记将 UIImageView 对象的 isUserInteractionEnabled 属性也设置为 true。

更新于: 2023年4月11日

1K+ 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告