Используйте функцию жеста Swipe на нескольких UILabels swift - PullRequest
0 голосов
/ 17 мая 2018

Я новичок, мне удалось найти и адаптировать код, так что, когда я провожу метку, значение этой метки меняется.Теперь моя функция относится только к одной конкретной метке, но я хочу, чтобы несколько меток имели одинаковую функцию, метку сбора статистики, как мне изменить / применить функцию ко многим различным меткам?

Здесьмой код:

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)
            }
        }
    }

}

1 Ответ

0 голосов
/ 17 мая 2018

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 = "???"
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...