Избегать того, чтобы элементы вида спрятались, позвонив в viewDidLayoutSubviews

Я оставался руководитель как осуществлять login с parse с функцией loguearse с Facebook и Твиттером, однако, я встречаюсь с деталью.

В принципе элементы главного вида прячутся посредством функции viewDidLayoutSubviewsа именно, они посланы к нижней части экрана и позже двигаются вверх в форме оживления, это оживление работает в функции viewDidAppear.

Даже там все совершенное, однако, когда я выбираю какой-либо textFields что составляют часть вида, чтобы вводить текст, как это очевидно, клавиатура появляется и теоретически он был бы должен прокручивать элементы вверх не скрывать для них, когда он пишет себе, здесь я предполагаю, что вновь включают функцию viewDidLayoutSubviews и выполни фрагмент кода, который прячет мне все элементы в нижней части, как он осуществляется, когда загружается приложение, чтобы делать оживление возможным.

Как я могу избегать того, чтобы элементы исчезли каждый раз, когда я попробовал писать в каком-либо textFields?

override func viewDidLoad() {
        super.viewDidLoad()

 // create an array of all the views we want to animate in when we launch the screen

        viewsToAnimate = [self.logInView?.usernameField, self.logInView?.passwordField, self.logInView?.logInButton, self.logInView?.passwordForgottenButton, self.logInView?.facebookButton, self.logInView?.signUpButton, self.logInView?.logo]
}

override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()


        // We to position all the views off the bottom of the screen
        // and then make them rise back to where they should be
        // so we track their final position in an array
        // but change their frame so they are shifted downwards off the screen


        viewsFinalYPosition = [CGFloat]();
        for viewToAnimate in viewsToAnimate {
            //print(viewToAnimate.frame)
            let currentFrame = viewToAnimate.frame
            print(viewsFinalYPosition.count)
            viewsFinalYPosition.append(currentFrame.origin.y)
            viewToAnimate.frame = CGRectMake(currentFrame.origin.x, self.view.frame.height + currentFrame.origin.y, currentFrame.width, currentFrame.height)
        }
    }

override func viewDidAppear(animated: Bool) {


        super.viewDidAppear(animated)


        // Now we'll animate all our views back into view
        // and, using the final position we stored, we'll
        // reset them to where they should be
        if viewsFinalYPosition.count == self.viewsToAnimate.count {
            UIView.animateWithDuration(1, delay: 0.0, options: .CurveEaseInOut,  animations: { () -> Void in
                for viewToAnimate in self.viewsToAnimate {
                    print(viewToAnimate.frame)
                    let currentFrame = viewToAnimate.frame
                     print(self.viewsFinalYPosition.count)
                    viewToAnimate.frame = CGRectMake(currentFrame.origin.x, self.viewsFinalYPosition.removeAtIndex(0), currentFrame.width, currentFrame.height)
                }
                }, completion: nil)
        }
    }

ViewsDissapear

https://dl.dropboxusercontent.com / или / 4915071/viewsDissapear.mov

5
задан 02.02.2017, 23:24
1 ответ

AsГ-gnales она posiciГіn инициал, (спрятавший) в viewDidLoad или aГ±ade свойство booleana:

var initialPositionSet = false

Так что в viewDidLayoutSubviews ты поместил ее true, когда уже спрячутся элементы:

override func viewDidLayoutSubviews() {
    if !self.initialPositionSet {
        self.initialPositionSet = true

        // establecer posición inicial
    }
}

Я Думаю, что что-то asГ - ты может функционировать.

2
ответ дан 24.11.2019, 15:02
  • 1
    Первое помещения фрагмента кода в ViewDidAppear уже это выполнило и просто он не идет, что он делает, состоит в том, что мне посылает все элементы в верхней части sobreencimados. И это, обусловливать выполнение кода, она мне показалась хорошей мыслью однако он как будто когда бы то ни было reposicionara элементы. Я поместил breakpoints и выполни код, но он ничего не перемещает. – Víctor Gonzal 31.12.2015, 22:15
  • 2
    Оно функционировало!!. Проблема состояла в том, что фрагмент кода, который reposicionaba выполнял элементы два раза, поэтому не функционировал обусловливая это с bool, а следовательно я использовал счетчик. Спасибо, – Víctor Gonzal 01.01.2016, 01:14
  • 3
    Я радуюсь тому, что он служит тебе помощью – thxou 01.01.2016, 01:19