如何在 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+ 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.