Кнопка меняется после перемещения изображения? - PullRequest
1 голос
/ 25 октября 2019

Я делаю кнопку «слайд для подтверждения», настройка представляет собой пользовательскую кнопку UIB + обычный UIImageView, изображение передается кнопке, а кнопка прослушивает прикосновения и соответственно перемещает изображение. Все работает отлично, за исключением одной детали после того, как кнопка отпущена, все должно вернуться в исходное состояние, но кнопка остается неизменной, как если бы ее альфа была уменьшена вдвое

before after

Я прокомментировал альфа, потому что кнопка собиралась скрыть, но я отключил, что, как только я столкнулся с этой проблемой, проблема возникает независимо от того, установлена ​​ли альфа или нет.

Это код для пользовательской кнопки

class SlideButton: UIButton {

    var arrowImage: UIImageView?
    var initialLocation: CGPoint?
    var initialArrowPosition: CGPoint?

    func setArrow(arrow:UIImageView){
        arrowImage = arrow
        initialArrowPosition = arrow.frame.origin
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesBegan(touches, with: event)
        let touch = touches.first!
        let location = touch.location(in: self.superview)
        initialLocation = location
        UIView.animate(withDuration: 0.2) {
            //self.alpha = 0.0
          }
    }

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        UIView.animate(withDuration: 0.3) {
            self.arrowImage!.frame.origin = self.initialArrowPosition!
            //self.alpha = 1.0
        }
    }

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
        let touch = touches.first!
        let currentLocation = touch.location(in: self.superview)
        arrowImage!.frame.origin.x = initialArrowPosition!.x - initialLocation!.x + (currentLocation.x)
    }
 }

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Вы не забыли вызвать super для одного из ваших touches методов:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    super.touchesBegan(touches, with: event)

Но для других touches методов вы забыли это сделать, так что вы сломалиосновная функциональность кнопки.

0 голосов
/ 25 октября 2019

вам также может понадобиться добавить переопределение к touchesCancelled, поскольку вы не всегда можете достичь конечной точки touchesEnded.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...