CocoaTouch框架与构建应用界面

苹果应用程序的界面几乎都是由Cocoa和Cocoa Touch框架中的类和协议等元素构建的,这些元素通过MVC(Model-View-Controller)模式有效地组织起来。

​ macOS应用的界面主要使用Cocoa框架开发,Cocoa是一种为应用程序提供丰富用户体验的框架,其核心是:Foundation和UIKit(AppKit)框架。**iOS应用界面主要使用Cocoa Touch框架开发,核心是Foundation和UIKit框架。**Cocoa Touch框架有一套自己的MVC模式,其中视图和控制器是UIKit中的UIView(及其子类)和UIViewController(及其子类)。

1.视图控制器

1.1 种类

  • UIViewController——用于自定义视图控制器的导航。
  • UINavigationController——导航控制器,与UITableViewController结合使用,能够构建树形导航模式。
  • UITabBarController——标签栏控制器,用于构建树形标签导航模式。
  • UIPageViewController——呈现电子书导航风格的控制器。
  • UISplitViewController——可以把屏幕分割成几块的视图控制器,主要为iPad屏幕设计。
  • UIPopoverController——呈现“气泡”风格视图的控制器,主要为iPad屏幕设计。

1.2 生命周期

2.视图

在Cocoa Touch框架中,提供了视图的“根”类——UIView

2.1 UIView继承层次结构

  • 特殊的视图:UIControll类——该类是控件类,其子类有UIButton、UITextField、和UISlider .之所以称他们为"控件类",是因为他们都有能力响应一些高级事件.

2.2视图分类

  • 控件:继承自UIControll类,能够响应一些高级事件.
  • 窗口:它是UIWindow对象.一个iOS应用只有一个UIWindow对象.它是所有子视图的"根"容器.
  • 容器视图:包括了UIScrollView,UIToolBar以及它们的子类.
  • 显示视图:用于显示信息,包括UIImageView,UILabel,UIProgressView和UIActivityIndicatorView等.
  • 文本和Web视图:提供了能够显示多行文本的视图,包括UITextView和UIWebView,其中UITextView也属于容器视图,UIWebView是能够加载和显示HTML代码的视图.
  • 导航视图:为用户提供从一个屏幕到另外一个屏幕的导航(或者跳转)视图,它包括UITabBar和UINavigationBar.
  • 警告框和操作表:用于给用户提供一种反馈或者与用户进行交互.

3.纯代码构建页面❗(网络转载)

纯代码的条件

删除Main Interface中的Main同时需要删除info.plist中的如下代码

<key>UISceneStoryboardFile</key>
<string>Main</string>

项目文件变化

  • AppDelegate.swift文件负责App的启动与终止,并负责与SceneDelegate交接。
  • SceneDelegate.swift文件负责管理应用程序的生命周期。

保留SceneDelegate

  1. AppDelegate中通过application(_:configurationForConnecting:options)返回一个UISceneConfiguration实例
  2. 完成启动后,控制权被交接给 SceneDelegate,它的 scene(_:willConnectTo:options:)将会被调用,设置window的根视图控制器
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {guard let windowScene = (scene as? UIWindowScene) else { return }//创建windowself.window = UIWindow(windowScene: windowScene)//设置window的rootViewControllerself.window?.rootViewController = ViewController()self.window?.makeKeyAndVisible()
}

不保留SceneDelegate

  1. 删除SceneDelegate.swift

  2. 删除info.plist中的如下内容

    删除内容.png

  3. AppDelegate.swift中代码写成和Xcode11之前的样子

var window: UIWindow?func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {//创建windowself.window = UIWindow(frame: UIScreen.main.bounds)//设置window的rootViewControllerself.window?.rootViewController = ViewController()self.window?.makeKeyAndVisible()return true
}
  1. 删除 AppDelegate.swift中的如下代码
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {}func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UIScen

链接:https://www.jianshu.com/p/cc901be44773

4.HelloWorld示例

class ViewController:UIViewController{override func viewDidLoad(){super.viewDidLoad()let screen = UIScreen.main.bounds //获取屏幕的边界,其返回值是CGFloat类型.CGFloat是描述视图对象位置和大小的结构体.let labelWidth:CGFloat = 90let labelHeight:CGFloat = 20let labelTopView:CGFloat = 150let frame = CGRect(x:(screen.size.width - labelWidth)/2,y:labelTopView,width:labelWidth,height:labelHeight)let label = UILabel(frame:frame)label.text = "HelloWorld"label.textAlignment = .centerself.view.addSubView(label) //最后,不要忘记通过addSubView:方法将它添加回父视图中}
}
  • frame和bounds属性:

    • frame属性表示该视图在**父视图坐标系统(相对于父视图)**中的位置和大小.
    • bounds属性表示该视图在**本地坐标系统(相对于自己)**中的位置和大小.
    • frame属性用得很多,bounds属性用得比较少,这主要是因为bounds属性的坐标系是本地坐标.

CocoaTouch框架与构建应用界面相关推荐

  1. Cocoa Touch框架与构建应用界面

    step -1:视图控制器的分类与周期 1.分类: 1> UIViewController:用于自定义视图控制器的导航. 2>UINavigationController:导航控制器,与U ...

  2. (转)基于MVC4+EasyUI的Web开发框架经验总结(2)- 使用EasyUI的树控件构建Web界面...

    http://www.cnblogs.com/wuhuacong/p/3669575.html 最近花了不少时间在重构和进一步提炼我的Web开发框架上,力求在用户体验和界面设计方面,和Winform开 ...

  3. 整个linux程序的框架,Linux兼容Win32程序,一个框架、两个界面

    Linux兼容Win32程序,"一个框架.两个界面" Linux兼容Win32程序,"一个框架.两个界面" [日期:2007-07-19] 来源:Linux公社 ...

  4. 超声波技术构建触摸界面

    超声波技术构建触摸界面 Ultrasound tech builds touch interfaces 无论材料是什么,无论材料厚度如何,总部位于加州的创业公司UltraSense Systems声称 ...

  5. 分享一款基于aui框架的图文发布界面

    本文出自APICloud官方论坛, 感谢论坛版主 川哥哥 的分享. 分享一款基于aui框架的图文发布界面,可以添加多张图可以删除,类似qq空间发布说说,没做服务器后端,只演示前端操作. 需要用到UIM ...

  6. CSDN问答标签技能树(一) —— 基本框架的构建

    目录 系列文章 1 问题定义 1.1 背景 2 解决方案 2.1 知识搜集 2.2 技能树的构建 2.3 技能树的合并 2.4 问题与技能树的匹配 3 总结与下一步计划 总结 下一步计划 系列文章 C ...

  7. vue框架搭建前端登录界面

    使用vue框架搭建前端登录界面,用v-bind引入类,v-model实现数据绑定,v-on实现事件处理机制的处理. <!DOCTYPE html> <html lang=" ...

  8. 使用Layui框架的简单web界面开发

    使用Layui框架的简单web界面开发 Layui的简介 优势 框架的安装 使用方法 Layui的简介 layui(谐音:类UI) 是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/C ...

  9. (43)-- Django框架之前台购物车界面

    # Django框架之前台购物车界面 # index.html <!DOCTYPE html> <html lang="en" class="" ...

  10. python构建web界面实现MySQL数据库的操作

    通过构建web界面,在web界面上对于数据库进行增删改查的操作.使用python中的web模块完成. 这部分内容目前在网上没有搜到太多类似的,所以有很多地方都是一点点自己试出来的. 另外这里的pyth ...

最新文章

  1. 【网易出品】2019不容错过的泛娱乐创新峰会来了!
  2. SAP中货源清单创建的几种方法
  3. java流的传递方式是_java中数据的传递方式到底是怎样的!
  4. 模仿Google搜索功能
  5. mac下使用自带的svn客户端上传、下载文件到服务端
  6. vsphere 6.5 HA 提示:此主机当前没有管理网络冗余,该主机的vSphere HA检测信号数据存储数目为0 告警消除
  7. 爆火GitHub 的十大最火 Python 项目,三天收藏突破10w+
  8. 领域对象映射到微服务代码模型
  9. Android拨号盘列表加载机制(原)
  10. Python+OpenCV 轻松实现人脸识别签到考勤系统
  11. python爬虫面试题集锦及答案
  12. 电流输入放大器的设计
  13. 企业微信打卡怎么防止作弊?看看其他企业是怎么做的
  14. 30岁哥大计算机博士生遇刺身亡!论文刚被顶会接收,曾留学中国
  15. PHP 十六大魔术方法学习
  16. “为物联网提供分散的隐私保护医疗区块链”外文翻译——2019年5月份
  17. 爱莎天河学校体验课,探索多元文化融合的IB课程
  18. 前端js 隐藏手机号或证件号的中间四位
  19. 华为云大数据中台架构设计方案
  20. 经典运放电路分析—虚短虚断

热门文章

  1. 如何使用ERD设计关系数据库?
  2. 豆瓣读书TOP250书籍信息爬虫脚本
  3. 【Redis踩坑日记】Redis由于目标计算机积极拒绝,无法连接
  4. ssh 所选的用户密钥未在远程主机上注册
  5. 饭店点餐系统之系统网络结构
  6. python中encode函数_Python中encode()方法有哪些功能?
  7. BP误差反传神经网络
  8. php圆的面积计算公式,圆的面积怎么计算如何求解
  9. 三分钟快速了解怎么查询ip地址,怎么更换ip地址!
  10. TYVJ P1002 谁拿了最多奖学金 Label:模拟 水