Горизонтальное выдвижное меню

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

Мне удалось заставить это работать, проблема, с которой я столкнулся, заключается в том, что меню скользит справа налево, но оно должно идти наоборот, то есть слева направо. Я пробовал играть с положительными и отрицательными значениями, но все еще немного озадачен тем, как работают эти свойства компьютерной графики (оси x, y и т. д.).

Вот мой код, отвечающий за отображение меню:

     private func showSettingsMenu(){
        if let window = UIApplication.shared.keyWindow {

        blackView.backgroundColor = UIColor(white: 0, alpha: 0.7)

        blackView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleDismiss)))

        window.addSubview(blackView)
        window.addSubview(collectionView)

        blackView.frame = window.frame
        blackView.alpha = 0

        let collectionWidth: CGFloat = window.frame.width * 0.75
        let x = window.frame.width - collectionWidth

        collectionView.frame = CGRect(x: window.frame.width, y: 0, width: collectionWidth, height: window.frame.height)

        UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {

            self.blackView.alpha = 1
            self.collectionView.frame = CGRect(x: x, y: 0, width: self.collectionView.frame.width, height: self.collectionView.frame.height)

        }, completion: nil)
    }
}

person Cláudio 'Dhekstro' Paulo    schedule 12.02.2018    source источник


Ответы (1)


Проблема в том, что вы устанавливаете начальную позицию x на ширину экрана, а конечную - на 1/4 от нее, поэтому она скользит справа налево:

let collectionWidth: CGFloat = window.frame.width * 0.75

collectionView.frame = CGRect(x: -1 * collectionWidth , y: 0, width: collectionWidth, height: window.frame.height)

UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {

   self.blackView.alpha = 1

   self.collectionView.frame = CGRect(x: 0, y: 0, width: self.collectionView.frame.width, height: self.collectionView.frame.height)

}, completion: nil)

Редактировать строку изменения

 collectionView.frame = CGRect(x: window.frame.width, y: 0, width: collectionWidth, height: window.frame.height)

To

collectionView.frame = CGRect(x: -1 * collectionWidth , y: 0, width: collectionWidth, height: window.frame.height)

/// внутри строки смены анимации

 self.collectionView.frame = CGRect(x: x, y: 0, width: self.collectionView.frame.width, height: self.collectionView.frame.height)

to

 self.collectionView.frame = CGRect(x: 0, y: 0, width: self.collectionView.frame.width, height: self.collectionView.frame.height)
person Sh_Khan    schedule 12.02.2018
comment
Вы можете предоставить исправление? - person Cláudio 'Dhekstro' Paulo; 12.02.2018
comment
ответ содержит исправление изменения x здесь collectionView.frame = CGRect(x: -1 * collectionWidth , y: 0, width: collectionWidth, height: window.frame.height) в строке перед UIView.animate - person Sh_Khan; 12.02.2018