Длинное нажатие распознает жест с помощью кнопки - Swift 3

Я новичок в Swift и пытаюсь сделать таймер (на этикетке), который запускается долгим нажатием на кнопку. В то же время я хочу изменить изображение кнопки длительного нажатия при нажатии кнопки длительного нажатия. Я оставляю кнопку, я хочу, чтобы кнопка вернулась обратно.

Что может быть не так?

@IBOutlet weak var myBtn: UIButton!

func initGesture()
{

    {   let longGesture = UILongPressGestureRecognizer(target: self, action: #selector(longTap(_:)))
        myBtn.addGestureRecognizer(longGesture)
    }
}

func TimerAction()
{
    Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(longTap), userInfo: nil, repeats: false)
    myBtn.setImage(UIImage(named: "xxx.png"), for: .normal)


}
@IBOutlet weak var lbl: UILabel!

func start()
{
    timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(ViewController2.updateTime as (ViewController2) -> () -> ())), userInfo: nil, repeats: true)

}

func updateTimer () {
    count += 1
    let hours = Int(count) / 3600
    let minutes = Int(count) / 60 % 60
    let seconds = Int(count) % 60
    label.text = String(format: "%02i:%02i:%02i",hours,minutes,seconds)
}

func reset()
{
    timer.invalidate()
    count = 0
    label.text = "00:00:00"

}

person MarryJoe    schedule 02.08.2017    source источник
comment
что делает ваш код?   -  person Mohammad Bashir Sidani    schedule 02.08.2017
comment
Я пытаюсь сделать что-то, что я пишу. Я нажал myBtn на длинное нажатие, распознав жест. Где я ошибаюсь? @МохаммадБаширСидани   -  person MarryJoe    schedule 02.08.2017
comment
stackoverflow.com/questions/34548263 /   -  person Eridana    schedule 02.08.2017
comment
Опубликуйте свой метод longTap   -  person Krishnarjun Banoth    schedule 02.08.2017
comment
Вы вызываете метод updateTime (не существует в вашем коде) вместо метода updateTimer в методе запуска. Затем установите свои изображения как решение @Kiester.   -  person Krishnarjun Banoth    schedule 02.08.2017
comment
@MarryJoe посмотри ответ и дай мне знать, если у тебя возникнут затруднения.   -  person Salman Ghumsani    schedule 02.08.2017


Ответы (3)


Вы можете получить TouchUpInside и TouchUpOutside, а также действие кнопки TouchDown без использования жеста.

class ViewController: UIViewController {
@IBOutlet weak var lbl: UILabel!
@IBOutlet weak var myBtn: UIButton!
var timer: NSTimer!

override func viewDidLoad() {
      super.viewDidLoad()
      myBtn.addTarget(self, action: "buttonDown:", forControlEvents: .TouchDown)
      myBtn.addTarget(self, action: "buttonUp:", forControlEvents: [.TouchUpInside, .TouchUpOutside])
    }
func buttonDown(sender: AnyObject) {
    singleFire()
    timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "rapidFire", userInfo: nil, repeats: true)
}

func buttonUp(sender: AnyObject) {
    timer.invalidate()
    count = 0
    label.text = "00:00:00"
}

func singleFire() {
    myBtn.setImage(UIImage(named: "xxx.png"), for: .normal)
}

func rapidFire() {
    count += 1
    let hours = Int(count) / 3600
    let minutes = Int(count) / 60 % 60
    let seconds = Int(count) % 60
    label.text = String(format: "%02i:%02i:%02i",hours,minutes,seconds)
}

}
person Salman Ghumsani    schedule 02.08.2017
comment
хороший. но увеличивает код распознавания длительного нажатия. - person jegadeesh; 02.08.2017
comment
@jegadeesh спасибо за предложение, но я показываю, как можно использовать действие. - person Salman Ghumsani; 02.08.2017
comment
рада помочь ???? - person Salman Ghumsani; 02.08.2017

Вы должны реализовать события кнопок вместо использования распознавателей жестов здесь. События кнопок, о которых я говорю, это TouchDown и TouchUpInside. TouchDown сообщит вам, когда кнопка нажата, а touchupinside сообщит вам, когда пользователь убрал палец с кнопки.

Таким образом, вы измените изображение кнопки и запустите таймер в случае приземления. Затем вы вернетесь к событию touchupinside.

https://developer.apple.com/documentation/uikit/uicontrolevents

person Rishabh    schedule 02.08.2017

Попробуй это,

установить сначала изображение кнопки в зависимости от ее состояния.

    self.arrowIcon.setImage(UIImage(named: "normalImage.png"), for: .normal)
    self.arrowIcon.setImage(UIImage(named: "pressedImage.png"), for: .highlighted)
person Kiester    schedule 02.08.2017
comment
рад помочь @MarryJoe! - person Kiester; 02.08.2017