ios - 在多个 UILabel swift 上使用我的 Swipe 手势功能
问题描述
我是一个新手,我设法找到并调整代码,以便当我滑动标签时,该标签的值会发生变化。现在我的 func 只涉及一个特定的标签,但我想让多个标签具有完全相同的功能,它是一个统计标签,我如何修改/应用 func 到许多不同的标签?
这是我的代码:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var counterLabel: UILabel!
@IBOutlet weak var kickLabel: UILabel!
var counter = 0
var swipeGesture = UISwipeGestureRecognizer()
override func viewDidLoad() {
super.viewDidLoad()
let direction: [UISwipeGestureRecognizerDirection] = [.up, .down, .left, .right]
for dir in direction{
swipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(self.counterLabel(_:)))
counterLabel.addGestureRecognizer(swipeGesture)
swipeGesture.direction = dir
counterLabel.isUserInteractionEnabled = true
counterLabel.isMultipleTouchEnabled = true
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@objc func counterLabel(_ sender:UISwipeGestureRecognizer){
UIView.animate(withDuration: 1.0) {
if sender.direction == .right{
print("Swiped Right")
self.counter += 1
print(self.counter)
self.counterLabel.text = String(self.counter)
}else if sender.direction == .left{
print("Swiped Left")
print(self.counter)
self.counter -= 1
self.counterLabel.text = String(self.counter)
}else if sender.direction == .up{
print("Swiped Up")
self.counter += 5
self.counterLabel.text = String(self.counter)
}else if sender.direction == .down{
print("Swiped Down")
self.counter = 0
self.counterLabel.text = String(self.counter)
}
}
}
}
解决方案
UISwipeGestureRecognizer
具有应用手势的视图。将此转换为 UILabel。
(您可能还想检查手势状态以获得更好的性能。)
class ViewController: UIViewController {
@IBOutlet weak var label1: UILabel!
@IBOutlet weak var label2: UILabel!
var counters: [UILabel: Int] = [:]
override func viewDidLoad() {
super.viewDidLoad()
for label: UILabel in [label1, label2] {
counters[label] = 0
for direction: UISwipeGestureRecognizerDirection in [.up, .down, .left, .right] {
let swipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(didSwipe(_:)))
swipeGesture.direction = direction
label.addGestureRecognizer(swipeGesture)
}
}
}
@objc func didSwipe(_ gestureRecognizer: UISwipeGestureRecognizer) {
guard gestureRecognizer.state == .recognized else { return }
guard let label = gestureRecognizer.view as? UILabel else { return }
debugPrint("\(gestureRecognizer.direction)")
switch gestureRecognizer.direction {
case .up:
counters[label] = counters[label] + 1
label.text = "Up"
case .down:
label.text = "Down"
case .left:
label.text = "Left"
case .right:
label.text = "Right"
default:
label.text = "???"
}
}
}
推荐阅读
- sql-server - 使用公共 IP 的多台服务器的 SQL 复制?
- locust - 用 URL 以外的东西命名任务
- python - 超参数调整 (Hyperas) 和流水线预处理的交叉验证
- angular - Rxjs catchError 导致 TypeScript 类型错误
- reactjs - 如何在不重新渲染嵌套组件的情况下有条件地渲染组件?
- google-apps-script - 在哪里存储 Google App 脚本的静态图像(例如,应用程序徽标)?
- c# - 同时取回正则表达式内容和其他数据
- python - 文本小部件中的滚动条仅出现在底部
- ubuntu - 在 Ubuntu 18.04 上的 Python 3.7 上安装 wxPython
- html - 根据屏幕大小更改 CSS