阿尔法在标签和按钮上无法工作,swift

问题描述 投票:0回答:1

我想在任何控制器出现和解散时,使用淡入和淡出过渡。为此,当新的控制器出现时,我将视图的所有组件资产如标签、按钮等的alpha值设置为零,在viewDidLoad和view didAppear中,我将下面的alpha值设置为1。 这是我使用的代码。

override func viewDidLoad() {
        super.viewDidLoad()
        imageView1.isHidden = true
        imageView2.isHidden = true
        self.setupScreen()
        setAssetsAlphaZero()
    }

    private func setupScreen() {
        switch loginVM.loginScreenType {
        case .resetPassword:
            presentResetPasswordScreen()
        default: break
        }
    }

    override func viewDidAppear(_ animated: Bool) {
           super.viewDidAppear(animated)
           animateAssetsWithIdentity()
       }

 func animateAssetsWithIdentity() {
        self.view.layoutIfNeeded()
        self.view.setNeedsDisplay()
        hideShowAssets(hidden: false)
        UIView.animate(withDuration: 0.5, animations: { [weak self] in
            self?.passwordTextField.alpha = 1
            self?.forgotPasswordButton.alpha = 1
            self?.emailTextField.alpha = 1
            self?.loginButton.alpha = 1
            self?.loginLbl.alpha = 1
            self?.emailImg.alpha = 1
            self?.emailLbl.alpha = 1
            self?.passwordImg.alpha = 1
            self?.passwordLbl.alpha = 1
            self?.signUpBtn.alpha = 1
            self?.view.layoutIfNeeded()
            self?.view.setNeedsDisplay()
        }) {[weak self] (complete) in
            self?.signUpBtn.isEnabled = true
            self?.view.layoutIfNeeded()
            self?.view.setNeedsDisplay()
        }
        self.enableDisableButton()
    }

    func setAssetsAlphaZero() {
        self.view.layoutIfNeeded()
        self.view.setNeedsDisplay()
        UIView.animate(withDuration: 0.5, animations: {[weak self] in
            self?.passwordTextField.alpha = 0
            self?.forgotPasswordButton.alpha = 0
            self?.emailTextField.alpha = 0
            self?.loginButton.alpha = 0
            self?.loginLbl.alpha = 0
            self?.emailImg.alpha = 0
            self?.emailLbl.alpha = 0
            self?.passwordImg.alpha = 0
            self?.passwordLbl.alpha = 0
            self?.signUpBtn.alpha = 0
            self?.view.layoutIfNeeded()
            self?.view.setNeedsDisplay()
        }) {[weak self] (complete) in
            self?.hideShowAssets(hidden: true)
            self?.signUpBtn.isEnabled = false
            self?.view.layoutIfNeeded()
            self?.view.setNeedsDisplay()
        }
    }

    func hideShowAssets(hidden : Bool ) {
        self.passwordTextField.isHidden = hidden
        self.forgotPasswordButton.isHidden = hidden
        self.emailTextField.isHidden = hidden
        self.loginButton.isHidden = hidden
        self.loginLbl.isHidden = hidden
        self.emailImg.isHidden = hidden
        self.emailLbl.isHidden = hidden
        self.passwordImg.isHidden = hidden
        self.passwordLbl.isHidden = hidden
        self.signUpBtn.isHidden = hidden
    }

当控制器解散时,借助于委托人,我通知前一个控制器。

@IBAction func signUpButtonTapped(_ sender: UIButton) {
        setAssetsAlphaZero()
        self.delegate?.dissmissVC()
        delay(0.5) {[weak self] in
            self?.dismiss(animated: false, completion: nil)
        }

    }

为了呈现控制器,我使用modalPresentationStyle = .overFullScreen,因为我需要目前我们控制器应该是透明的。

请帮助我。

先谢谢你。

ios animation alpha swift5 presentviewcontroller
1个回答
0
投票

我认为你不需要调用setNeedsDisplay。因为它将对这里提到的函数drawRect做出反应。还有一些建议,我认为最好调用setAssetsAlphaZero(),然后添加延迟0.5秒,然后调用animateAssetsWithIdentity()。希望对你有所帮助

什么时候需要在iOS中调用setNeedsDisplay?

© www.soinside.com 2019 - 2024. All rights reserved.