如何在 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。