首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SnapKit时无法正确动画

使用SnapKit时无法正确动画
EN

Stack Overflow用户
提问于 2019-03-05 16:26:18
回答 2查看 1.5K关注 0票数 0

我试图为我的应用程序动画一个标志(UILabel),从中间到顶部。我尝试的是更新约束,但它似乎不起作用。问题是动画,即标志,从原点(0,0),而不是中间的视图到顶部。必要的代码(控制器及其继承的类):

代码语言:javascript
复制
import UIKit
import SnapKit

class EntryController: LatroController {

    static let spacingFromTheTop: CGFloat = 150
    var latroLabelCenterYConstraint: Constraint?

    override init() {
        super.init()
        self.animateTitleLabel()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func initTitleLabel() {
        self.latroLabel = UILabel()
        self.latroLabel?.text = General.latro.rawValue
        self.latroLabel?.textAlignment = .center
        self.latroLabel?.font = UIFont (name: General.latroFont.rawValue, size: EntryController.fontSize)
        self.latroLabel?.textColor = .white
        self.latroLabel?.contentMode = .center
        self.view.addSubview(self.latroLabel!)

        self.latroLabel?.snp.makeConstraints({ (make) in
            make.width.equalTo(EntryController.latroWidth)
            make.height.equalTo(EntryController.latroHeight)
            make.centerX.equalTo(self.view.center.x)
            self.latroLabelCenterYConstraint = make.centerY.equalTo(self.view.center.y).constraint
        })
    }

    func animateTitleLabel() {
        UIView.animate(withDuration: 1.5) {
            self.latroLabel?.snp.updateConstraints { (make) in
                make.centerY.equalTo(200)
            }
            self.view.layoutIfNeeded()
        }
    }
}
代码语言:javascript
复制
import UIKit
import SnapKit

class LatroController: UIViewController {

static let latroWidth: CGFloat = 288
static let latroHeight: CGFloat = 98
static let btnWidth: CGFloat = 288
static let btnHeight: CGFloat = 70
static let txtFieldWidth: CGFloat = 288
static let txtFieldHeight: CGFloat = 50
static let fontSize: CGFloat = 70
static let bottomOffset: CGFloat = 100
static let buttonOffset: CGFloat = 20
static let logoOffset: CGFloat = 50

var latroLabel: UILabel?
var signUpBtn: UIButton?
var logInBtn: UIButton?
var titleLabelYConstraint: NSLayoutConstraint?
var usernameTxtField: UITextField?

init() {
    super.init(nibName: nil, bundle: nil)
    self.view.backgroundColor = UIColor(named: General.orange.rawValue)
    self.initTitleLabel()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.setNavigationBarHidden(true, animated: false)
}

override func viewDidDisappear(_ animated: Bool) {
    super.viewDidDisappear(animated)
    self.navigationController?.setNavigationBarHidden(false, animated: true)
}

func initTitleLabel() {
    self.latroLabel = UILabel()
    self.latroLabel?.text = General.latro.rawValue
    self.latroLabel?.textAlignment = .center
    self.latroLabel?.font = UIFont (name: General.latroFont.rawValue, size: EntryController.fontSize)
    self.latroLabel?.textColor = .white
    self.latroLabel?.contentMode = .center
    self.view.addSubview(self.latroLabel!)

    self.latroLabel?.snp.makeConstraints({ (make) in
        make.width.equalTo(LatroController.latroWidth)
        make.height.equalTo(LatroController.latroHeight)
        let safeAreaLayoutHeight = self.view.safeAreaLayoutGuide.layoutFrame.height
        print(safeAreaLayoutHeight)
        make.top.equalTo(self.view).offset(150)
        make.centerX.equalTo(self.view.center.x)
    })
}
}
EN

回答 2

Stack Overflow用户

发布于 2019-03-05 16:32:33

除非视图在界面中并执行了初始布局,否则无法对其进行动画化。因此,您调用self.animateTitleLabel()的速度太快了(在init中)。

把它叫做viewDidAppear之类的东西。当然,您必须使用Bool标志属性来确保在每次运行viewDidAppear时,只在第一次运行时调用它。

(可能有必要在viewDidLayoutSubviews中调用它;您将不得不进行实验。)

票数 2
EN

Stack Overflow用户

发布于 2019-03-05 16:32:05

好吧,我以为这会比我最初预想的要困难。缺少了以下内容:

代码语言:javascript
复制
self.view.updateLayoutIfNeeded() 

设置约束之后!

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

https://stackoverflow.com/questions/55007330

复制
相关文章

相似问题

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