【问题标题】:Alpha is not working on labels and buttons in SwiftAlpha 不适用于 Swift 中的标签和按钮
【发布时间】:2020-08-17 01:11:31
【问题描述】:

当任何控制器出现和关闭时,我正在尝试使用淡入和淡出过渡。为此,当出现新控制器时,我将视图的所有组件/资产(如标签、按钮等)的 alpha 值设置为零,在 viewDidLoad 和视图 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】:

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

    When do I need to call setNeedsDisplay in iOS?

    【讨论】:

    • 感谢您的回复。实际上这个问题只发生在 iPhone 11 pro max 中。正如您在我的代码中看到的,我在 viewDidAppear 函数中调用 animateAssetsWithIdentity()。
    猜你喜欢
    • 2014-05-09
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 2017-08-29
    • 2021-07-19
    相关资源
    最近更新 更多