首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Alpha不适用于Swift中的标签和按钮

Alpha不适用于Swift中的标签和按钮
EN

Stack Overflow用户
提问于 2020-05-02 22:47:01
回答 1查看 155关注 0票数 0

我正在尝试使用淡入和淡出过渡,当任何控制器存在和关闭时。为此,当新控制器出现时,我在viewDidLoad中将视图的所有组件/资源的Alpha值设置为零,并在视图didAppear中将下面的alpha设置回1。

下面是我使用的代码:

代码语言:javascript
运行
复制
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
    }

当控制器解散时,在委托的帮助下,我通知前一个控制器。

代码语言:javascript
运行
复制
@IBAction func signUpButtonTapped(_ sender: UIButton) {
        setAssetsAlphaZero()
        self.delegate?.dissmissVC()
        delay(0.5) {[weak self] in
            self?.dismiss(animated: false, completion: nil)
        }
        
    }

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

EN

回答 1

Stack Overflow用户

发布于 2020-05-03 01:44:24

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

When do I need to call setNeedsDisplay in iOS?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61561232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档