Swift - удалить / добавить UIView из superView - PullRequest
1 голос
/ 11 января 2020

В моем проекте у меня есть UIView, называемый MakeWishView, который я позволяю появиться нажатием кнопки, подобной этой:

@objc private func addWishButtonTapped(){
    print("addWishButton tapped")

    view.addSubview(makeWishView)

    makeWishView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    makeWishView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
    makeWishView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    makeWishView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true

    makeWishView.grayView.transform =  CGAffineTransform(scaleX: 1.3, y: 1.3)
    makeWishView.visualEffectView.alpha = 0
    makeWishView.grayView.alpha = 0
    makeWishView.wishButton.alpha = 0
    makeWishView.closeButton.alpha = 0
    makeWishView.dropDownButton.alpha = 0
    makeWishView.wishNameTextField.alpha = 0
    makeWishView.wishImage.alpha = 0
    makeWishView.wishImageButton.alpha = 0
    makeWishView.linkTextField.alpha = 0
    makeWishView.priceTextField.alpha = 0
    makeWishView.noteTextField.alpha = 0
    makeWishView.linkImage.alpha = 0
    makeWishView.priceImage.alpha = 0
    makeWishView.noteImage.alpha = 0


    UIView.animate(withDuration: 0.3) {

        self.makeWishView.visualEffectView.alpha = 1
        self.makeWishView.grayView.alpha = 1
        self.makeWishView.wishButton.alpha = 1
        self.makeWishView.closeButton.alpha = 1
        self.makeWishView.dropDownButton.alpha = 1
        self.makeWishView.wishNameTextField.alpha = 1
        self.makeWishView.wishImage.alpha = 1
        self.makeWishView.wishImageButton.alpha = 1
        self.makeWishView.linkTextField.alpha = 1
        self.makeWishView.priceTextField.alpha = 1
        self.makeWishView.noteTextField.alpha = 1
        self.makeWishView.linkImage.alpha = 1
        self.makeWishView.priceImage.alpha = 1
        self.makeWishView.noteImage.alpha = 1

        self.makeWishView.grayView.transform = CGAffineTransform.identity
    }

}

И я отклоняю представление следующим образом:

func dismissView(){
    UIView.animate(withDuration: 0.3, animations: {
        self.grayView.transform =  CGAffineTransform(scaleX: 1.3, y: 1.3)
        self.visualEffectView.alpha = 0
        self.grayView.alpha = 0
        self.wishButton.alpha = 0
        self.closeButton.alpha = 0
        self.dropDownButton.alpha = 0
        self.wishNameTextField.alpha = 0
        self.wishImage.alpha = 0
        self.wishImageButton.alpha = 0
        self.linkTextField.alpha = 0
        self.priceTextField.alpha = 0
        self.noteTextField.alpha = 0
        self.linkImage.alpha = 0
        self.priceImage.alpha = 0
        self.noteImage.alpha = 0
    }) { (_) in
        self.visualEffectView.removeFromSuperview()
        self.grayView.removeFromSuperview()
        self.wishButton.removeFromSuperview()
        self.closeButton.removeFromSuperview()
        self.dropDownButton.removeFromSuperview()
        self.wishNameTextField.removeFromSuperview()
        self.wishImage.removeFromSuperview()
        self.wishImageButton.removeFromSuperview()
        self.linkTextField.removeFromSuperview()
        self.priceTextField.removeFromSuperview()
        self.noteTextField.removeFromSuperview()
        self.linkImage.removeFromSuperview()
        self.priceImage.removeFromSuperview()
        self.noteImage.removeFromSuperview()
        self.removeFromSuperview()
    }
}

Проблема в том, что если я хочу снова нажать addWishButton, MakeWishView не отображается, а вместо этого появляется пустое view:

enter image description here

Полагаю, у меня простое недопонимание, как отклонить или добавить UIView. Цени любую помощь:)

Ответы [ 2 ]

1 голос
/ 11 января 2020

Почему вы удаляете следующие представления из их суперпредставления? Я не мог видеть, что вы добавляете их снова

{ (_) in
    self.visualEffectView.removeFromSuperview()
    self.grayView.removeFromSuperview()
    self.wishButton.removeFromSuperview()
    self.closeButton.removeFromSuperview()
    self.dropDownButton.removeFromSuperview()
    self.wishNameTextField.removeFromSuperview()
    self.wishImage.removeFromSuperview()
    self.wishImageButton.removeFromSuperview()
    self.linkTextField.removeFromSuperview()
    self.priceTextField.removeFromSuperview()
    self.noteTextField.removeFromSuperview()
    self.linkImage.removeFromSuperview()
    self.priceImage.removeFromSuperview()
    self.noteImage.removeFromSuperview()
    self.removeFromSuperview()
}

Я думаю, что вам просто нужно вызвать следующее:

{ (_) in

    self.removeFromSuperview()

}
1 голос
/ 11 января 2020

Здесь вы удалите подпредставления

    self.visualEffectView.removeFromSuperview()
    self.grayView.removeFromSuperview()
    self.wishButton.removeFromSuperview()
    self.closeButton.removeFromSuperview()
    self.dropDownButton.removeFromSuperview()
    self.wishNameTextField.removeFromSuperview()
    self.wishImage.removeFromSuperview()
    self.wishImageButton.removeFromSuperview()
    self.linkTextField.removeFromSuperview()
    self.priceTextField.removeFromSuperview()
    self.noteTextField.removeFromSuperview()
    self.linkImage.removeFromSuperview()
    self.priceImage.removeFromSuperview()
    self.noteImage.removeFromSuperview()
    self.removeFromSuperview()

Вам нужно сделать объявление представления вычисленным свойством вместо сохраненного, например

var makeWishView:MakeWishView {
     ....
    return 
}

, или сделать это только внутри завершение анимации

 self.removeFromSuperView()

и обратная альфа = 1

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