CocoaTouch框架与构建应用界面
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
AppDelegate
中通过application(_:configurationForConnecting:options)
返回一个UISceneConfiguration
实例- 完成启动后,控制权被交接给
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
删除
SceneDelegate.swift
删除info.plist中的如下内容
删除内容.png
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
}
- 删除
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框架与构建应用界面相关推荐
- Cocoa Touch框架与构建应用界面
step -1:视图控制器的分类与周期 1.分类: 1> UIViewController:用于自定义视图控制器的导航. 2>UINavigationController:导航控制器,与U ...
- (转)基于MVC4+EasyUI的Web开发框架经验总结(2)- 使用EasyUI的树控件构建Web界面...
http://www.cnblogs.com/wuhuacong/p/3669575.html 最近花了不少时间在重构和进一步提炼我的Web开发框架上,力求在用户体验和界面设计方面,和Winform开 ...
- 整个linux程序的框架,Linux兼容Win32程序,一个框架、两个界面
Linux兼容Win32程序,"一个框架.两个界面" Linux兼容Win32程序,"一个框架.两个界面" [日期:2007-07-19] 来源:Linux公社 ...
- 超声波技术构建触摸界面
超声波技术构建触摸界面 Ultrasound tech builds touch interfaces 无论材料是什么,无论材料厚度如何,总部位于加州的创业公司UltraSense Systems声称 ...
- 分享一款基于aui框架的图文发布界面
本文出自APICloud官方论坛, 感谢论坛版主 川哥哥 的分享. 分享一款基于aui框架的图文发布界面,可以添加多张图可以删除,类似qq空间发布说说,没做服务器后端,只演示前端操作. 需要用到UIM ...
- CSDN问答标签技能树(一) —— 基本框架的构建
目录 系列文章 1 问题定义 1.1 背景 2 解决方案 2.1 知识搜集 2.2 技能树的构建 2.3 技能树的合并 2.4 问题与技能树的匹配 3 总结与下一步计划 总结 下一步计划 系列文章 C ...
- vue框架搭建前端登录界面
使用vue框架搭建前端登录界面,用v-bind引入类,v-model实现数据绑定,v-on实现事件处理机制的处理. <!DOCTYPE html> <html lang=" ...
- 使用Layui框架的简单web界面开发
使用Layui框架的简单web界面开发 Layui的简介 优势 框架的安装 使用方法 Layui的简介 layui(谐音:类UI) 是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/C ...
- (43)-- Django框架之前台购物车界面
# Django框架之前台购物车界面 # index.html <!DOCTYPE html> <html lang="en" class="" ...
- python构建web界面实现MySQL数据库的操作
通过构建web界面,在web界面上对于数据库进行增删改查的操作.使用python中的web模块完成. 这部分内容目前在网上没有搜到太多类似的,所以有很多地方都是一点点自己试出来的. 另外这里的pyth ...
最新文章
- 【网易出品】2019不容错过的泛娱乐创新峰会来了!
- SAP中货源清单创建的几种方法
- java流的传递方式是_java中数据的传递方式到底是怎样的!
- 模仿Google搜索功能
- mac下使用自带的svn客户端上传、下载文件到服务端
- vsphere 6.5 HA 提示:此主机当前没有管理网络冗余,该主机的vSphere HA检测信号数据存储数目为0 告警消除
- 爆火GitHub 的十大最火 Python 项目,三天收藏突破10w+
- 领域对象映射到微服务代码模型
- Android拨号盘列表加载机制(原)
- Python+OpenCV 轻松实现人脸识别签到考勤系统
- python爬虫面试题集锦及答案
- 电流输入放大器的设计
- 企业微信打卡怎么防止作弊?看看其他企业是怎么做的
- 30岁哥大计算机博士生遇刺身亡!论文刚被顶会接收,曾留学中国
- PHP 十六大魔术方法学习
- “为物联网提供分散的隐私保护医疗区块链”外文翻译——2019年5月份
- 爱莎天河学校体验课,探索多元文化融合的IB课程
- 前端js 隐藏手机号或证件号的中间四位
- 华为云大数据中台架构设计方案
- 经典运放电路分析—虚短虚断