applicationDidEnterBackground方法和applicationWillEnterForeground方法不调用 在iOS 10 后 applicationDidEnterBackground和applicationWillEnterForeground已经被SceneDelegate给接管了。所以关于前台后台等的处理操作,不应该写在AppDelegate里。
iOS基础 获取状态栏的高度 由于各代iPhone对屏幕尺寸以及前置摄像头、传感器等的迭代,对于其状态栏的高度也发生了一些微小的变化,不再是如以前的20高度了。因此在iOS13后,对于状态栏的高度,有这么一个方法可以获取。参考文章:VeggieOrz的文章:iOS 准确获取 iPhone 状态栏、导航栏、TabBar高度,看这篇就够了...
正则表达式 常用的正则规则汇总 数字:^[0-9]*$n位的数字:^\d{n}$至少n位的数字:^\d{n,}$m-n位的数字:^\d{m,n}$零和非零开头的数字:^(0|[1-9][0-9]*)$非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$带1-2位小数的正数或负数:^(-)?\d+(.\d{1,2})?$正数、负数、和小数:^(-|+)?\d+(.\d+)?$有两位小数的正实数:^[0-9]+(.[0-9]{2})?$有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
iOS基础 对AFNetworking工具进行封装 封装封装的工具类是继承自:AFHTTPSessionManager创建单例使用static关键字、用let声明一个本类型的常量。(let是线程安全的。如:import UIKitimport AFNetworkingclass GGNetworkTools: AFHTTPSessionManager { static let share = GGNetworkTools()}如此单例就制作好了。解除不安全的网络访问限制封装import AFNetworkingenu
iOS基础 自定义转场控制器上的动画 UIPresentationController 概述约定:底层控制器:在层级较低的控制器,由它创建新控制器转场控制器:就是底层控制器创建的新控制器转场控制器被创建出来,若要自定义转场的动画,比如从中心逐渐放大知道占据满屏,这样系统没有提供的动画,就需要底层控制器来创建新的转场动画。首先需要底层控制器创建新控制器的时候,给新控制器约定管理转场与动画的代理。如:accountVC.transitioningDelegate = self然后底层控制器需要实现相关的协议,即实现控制器转场协议:UIViewControllerTransitio
iOS基础 自定义转场控制器UIPresentationController 概述基本上苹果提供的控制器转场都能满足我们的需求,比如反转、淡入淡出、翻页、从下往上显示等等,这都可以通过设置控制器实现。但如果有一些特殊的需求,比如只在一小块区域显示新控制器的内容。当然你也可以通过一些复杂的方式在原本的控制器上自定义一个小View来实现,但那样会增加原控制器的业务负担。实际上,我们可以通过自定义UIPresentationController来控制新controller的展示形式,这只需要在转场相关的代码部分设置一下代理,原控制器再遵守以下该转场控制器的协议就可以了。具体
iOS基础 Storyboard Reference 然后就会在目录结构中看见刚的两个控制器一起并入到新的Storyboard中了我们回到MainStoryboard。在MainStoryboard中就被映射成功了。
iOS基础 根据类名字符串创建类 命名空间Swift中是有命名空间概念的,我们在通过字符串创建对应的类的时候:NSClassFromString("HomeController")发现并不能按照想象中的那样创建得出来。这时是因为Swift中有命名空间的概念,be like:NSClassFromString("IDB.HomeController")通过命名空间获取的类之后,怎么使用NSClassFromString(<ClassName: String>)->AnyClass?获得得的是一个AnyC
iOS基础 UITabBarController 使用创建子控制器继承自UITabBarController,在viewDidLoad阶段,把各个分页上的控制器给创建好,用UITabBarController的方法addChildControoler相关的方法就可以完成子控制器的添加。be like: private func creatChildController(vc:UIViewController,title:String,image:String,selected:String?){ vc.title = title
iOS基础 Swift纯代码初始化项目(入口引导) 纯代码初始化项目首先在配置也做以下修改:删除Main Interface中的内容,则程序运行时会先去AppDelegate中执行相关的代码。然后在Appdelegate.swift中添加如下代码:class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWit
Gitee基础 远程项目部署 Github国外的服务器,国内访问速度慢免费账户需要公开项目,而私人项目需要收费Gitee原 git.oschina.net国内服务器,访问速度快免费,且能创建私人项目使用Gitee新建仓库就…直接在网页创建就好将新项目同步到本地首先在本地创建好固定项目文件路径。在终端中打开进入到本地该路径:回到Gitee自己的项目中,以下功能处复制仓库位置。如果是私有仓库的话,则会要求输入Gitee账户的用户名及密码,如果是公开仓库的话,则直接完成克隆。由于swift.gitigno
项目初面对 新项目开发公司会提供完整的产品原型图,或者功能设计文档通过这些文档,能够梳理出目标项目的整体框架,从而协助项目框架的搭建。旧项目维护由于很多老项目是缺乏文档的,所以接管旧项目有必要为旧项目梳理一份文档,想要快速上手一个老项目,就需要先梳理一下整个项目的整体框架结构,可以先通过x-mind或者笔记等方式,整理出一套思路。主体框架确认明确好开发目标,能够使项目一直处于推进的状态。明确功能模块,能够使各个模块共同推进,也能较为准确测算工期,方便协同不同的部门参与开会等。在一些项目的重点难点的地方
iOS基础 代码开发中常见助力 注释方法Swift中有两种较为常见的注释方法:用于快捷总览代码功能的注释://MARK:- 用于方法管理用的注释//TODO:- 用于暂缓编写,留作备忘的代码注释用于方法功能说明的注释,对于编程中调用代码显示代码功能很方便:///方法相关功能、属性、调用时间等的备注说明都可以写。...
iOS基础 UIStackView UIStackViewUIStackView用于组织、布局显示的视图,可用来平铺一系列的视图组合。UIStackView管理着其成员属性arrangedSubviews下的所有视图,以arrangedSubviews数组顺序排序。axis 用于定义子视图的排列方向:横、纵spacing 用于控制子视图的间距alignment 对齐方式distribution 布局规则let view1 = UIView()view1.backgroundColor = UIColor.redlet vi
iOS基础 关于UIKit框架 UIKit框架Cocoa框架含有Foundation框架和UIKit框架。Foundation框架和界面无关,主要包含大量常用的API,如:集合、文件系统、URL、进程通信、通知、归档和序列化、表达式、条件判断等。UIkit框架则是基础的UI类库。...
iOS基础 CALayer CALayerCALayer = Core Animation Layer ,UIView真正绘图的部分是由CALayer管理的。边框 通过设置CALayer的borderWidth和borderColor可以给视图添加边框效果,值得注意的是,这里设置的Color参数是QuartzCore框架下的CGColorRef类型的,而不是UIKit框架下的UIColor。但我们可以便捷地从UIColor对象获取CGColor属性转换后的CGColorRef值。投影 通过设置CALayer的shadowCol
iOS基础 UIView UIVIewUIView之所以能显示是因为其内部的CALayer对象,实际上执行绘图的是CALayer对象,UIView其实更像是CALayer对象的管理控制器。UIView的继承关系NSObject > UIResponder > UIViewUIView常用的成员属性backgroundColor背景色alpha 透明度hidden 隐藏clipsToBounds 切边UIView的几何属性Frame:描述UIView的大小以及在父控件上的位置。Bounds:描
Swift基础 throws do-catch 错误的捕获和处理 错误的捕获和处理throws关键字用于抛出错误。do-catch用户捕获代码中可能出现的一场并妥善处理异常。//定义一个错误枚举,遵循Error协议enum PersonError:String,Error{ case PersonErrorDoNotEatBreakfast = "不吃早餐" case PersonErrorDoNotTakeExercise = "不锻炼"}class Person{ var age:Int var name:String
Swift基础 guard guardguard与if语句功能非常相似,设计出它的目的,其实是为了提高程序的可读性(重点)。guard语句必须在函数中使用,并且必须带有else语句。当条件表达式为真的时候,则跳过else语句。当条件表达式为假的时候,则执行else语句。而且else语句内必须带有return、break、continue、throw语句。let age = 17func allowToMakeCola(){ guard age < 18 else { print("可以瑟瑟
Swift基础 多态 多态多态指的是,同一个方法在不同的实例中,会有不同的执行效果。swift中有两种引用变量类型,一种是编译时,另一种是运行时。class Person{ var name : String init(personName: String) { name = personName } func eat() -> () { print("\(name)吃饭") } func getup() ->