首页 > 解决方案 > 在多个 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)
            }
        }
    }

}

标签: iosswiftuilabel

解决方案


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 = "???"
        }
    }
}

推荐阅读