1. 添加SDWebImage库,创建 WelcomeViewController.swift 继承 UIViewController
import UIKit
import SDWebImage
class WelcomeViewController: UIViewController {
//设置界面,视图的层次结构
override func loadView() {
//直接使用背景图像作为根视图,不用关心图像的缩放问题
view = backImageView
setupUI()
}
//视图加载完成之后的后续处理,通常用来设置数据
override func viewDidLoad() {
super.viewDidLoad()
//异步加载用户头像
iconView.sd_setImage(with:UserAccountViewModel.sharedUserAccount.avatarUrl, placeholderImage: UIImage(named: "avatar_default_big"))
}
//视图已经显示,通常可以动画/键盘处理
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
//1.更改约束 -> 改变位置
//updateConstraints 更新已经设置过的约束
//multiplier 属性是只读属性,创建之后,不允许修改
/**
使用自动布局开发,有一个原则
-所有使用约束设置位置的控件,不要再设置 'frame'
原因: 自动布局系统会根据设置的约束,自动计算控件的 frame
在 layoutSubviews 函数中设置 frme
如果 主动修改 frame,会引起 自动布局系统计算错误
-工作原理:当有一个运动循环启动,自动布局系统,会收集“所有的约束变化”
-再运行循环结束前,调用 layoutSubViews 函数统一设置 frame
-如果希望某些约束提前更新!使用 ‘layoutIfNeeded’ 函数让自动布局系统,提前更新当前收集到的约束变化
*/
iconView.snp.updateConstraints { make in
// make.bottom.equalTo(view.snp.bottom).multipliedBy(0.3)
make.bottom.equalTo(view.snp.bottom).offset(-view.bounds.height + 200)
//make.bottom.equalTo(view.snp.bottom).offset(-view.bounds.height * 0.7)
}
//2.动画
welcomeLable.alpha = 0
UIView.animate(withDuration: 1.2, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 10, options: []) {
//修改所有‘可动画’属性
//自动布局的动画
self.view.layoutIfNeeded()
} completion: {(state: Bool) in
UIView.animate(withDuration: 0.7) {
self.welcomeLable.alpha = 1
} completion: {(state: Bool) in
//不推荐的写法
//UIApplication.shared.keyWindow?.rootViewController = MainViewController()
NotificationCenter.default.post(name: NSNotification.Name(SwitchRootViewControllerNotification), object: nil)
}
}
}
//MARK: - 懒加载控件
//背景图像
private lazy var backImageView:UIImageView = UIImageView(imageName: "ad_background")
//头像
private lazy var iconView: UIImageView = {
let iv = UIImageView(imageName: "avatar_default_big")
//设置圆角
iv.layer.cornerRadius = 45
iv.layer.masksToBounds = true
return iv
}()
//欢迎标签
private lazy var welcomeLable: UILabel = UILabel(title: "欢迎回来", fontSize: 18)
}
2. 扩展类设置 UI
//MARK: - 设置界面
extension WelcomeViewController{
private func setupUI(){
//1.添加控件
view.addSubview(iconView)
view.addSubview(welcomeLable)
//2.自动布局
iconView.snp.makeConstraints { make in
make.centerX.equalTo(view.snp.centerX)
//make.bottom.equalTo(view.snp.bottom).multipliedBy(0.7)
make.bottom.equalTo(view.snp.bottom).offset(-200)
make.width.height.equalTo(90)
}
welcomeLable.snp.makeConstraints { make in
make.centerX.equalTo(iconView.snp.centerX)
make.top.equalTo(iconView.snp.bottom).offset(16)
}
}
}
原文地址:https://blog.csdn.net/u011193452/article/details/124315850
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_45594.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。