如何在 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。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP