自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(140)
  • 资源 (13)
  • 收藏
  • 关注

原创 applicationDidEnterBackground方法和applicationWillEnterForeground方法不调用

在iOS 10 后 applicationDidEnterBackground和applicationWillEnterForeground已经被SceneDelegate给接管了。所以关于前台后台等的处理操作,不应该写在AppDelegate里。

2022-07-06 11:43:49 1123 1

原创 iOS基础 获取状态栏的高度

由于各代iPhone对屏幕尺寸以及前置摄像头、传感器等的迭代,对于其状态栏的高度也发生了一些微小的变化,不再是如以前的20高度了。因此在iOS13后,对于状态栏的高度,有这么一个方法可以获取。参考文章:VeggieOrz的文章:iOS 准确获取 iPhone 状态栏、导航栏、TabBar高度,看这篇就够了...

2022-06-12 09:37:56 1562

原创 正则表达式 常用的正则规则汇总

数字:^[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})?$

2022-06-07 12:08:20 808

原创 iOS基础 对AFNetworking工具进行封装

封装封装的工具类是继承自:AFHTTPSessionManager创建单例使用static关键字、用let声明一个本类型的常量。(let是线程安全的。如:import UIKitimport AFNetworkingclass GGNetworkTools: AFHTTPSessionManager { static let share = GGNetworkTools()}如此单例就制作好了。解除不安全的网络访问限制封装import AFNetworkingenu

2022-05-26 15:51:34 827

原创 iOS基础 自定义转场控制器上的动画 UIPresentationController

概述约定:底层控制器:在层级较低的控制器,由它创建新控制器转场控制器:就是底层控制器创建的新控制器转场控制器被创建出来,若要自定义转场的动画,比如从中心逐渐放大知道占据满屏,这样系统没有提供的动画,就需要底层控制器来创建新的转场动画。首先需要底层控制器创建新控制器的时候,给新控制器约定管理转场与动画的代理。如:accountVC.transitioningDelegate = self然后底层控制器需要实现相关的协议,即实现控制器转场协议:UIViewControllerTransitio

2022-05-25 12:01:58 525

原创 iOS基础 自定义转场控制器UIPresentationController

概述基本上苹果提供的控制器转场都能满足我们的需求,比如反转、淡入淡出、翻页、从下往上显示等等,这都可以通过设置控制器实现。但如果有一些特殊的需求,比如只在一小块区域显示新控制器的内容。当然你也可以通过一些复杂的方式在原本的控制器上自定义一个小View来实现,但那样会增加原控制器的业务负担。实际上,我们可以通过自定义UIPresentationController来控制新controller的展示形式,这只需要在转场相关的代码部分设置一下代理,原控制器再遵守以下该转场控制器的协议就可以了。具体

2022-05-24 14:38:34 459

原创 iOS基础 Storyboard Reference

然后就会在目录结构中看见刚的两个控制器一起并入到新的Storyboard中了我们回到MainStoryboard。在MainStoryboard中就被映射成功了。

2022-05-21 17:25:30 109

原创 iOS基础 根据类名字符串创建类

命名空间Swift中是有命名空间概念的,我们在通过字符串创建对应的类的时候:NSClassFromString("HomeController")发现并不能按照想象中的那样创建得出来。这时是因为Swift中有命名空间的概念,be like:NSClassFromString("IDB.HomeController")通过命名空间获取的类之后,怎么使用NSClassFromString(<ClassName: String>)->AnyClass?获得得的是一个AnyC

2022-05-21 13:12:32 622

原创 iOS基础 UITabBarController

使用创建子控制器继承自UITabBarController,在viewDidLoad阶段,把各个分页上的控制器给创建好,用UITabBarController的方法addChildControoler相关的方法就可以完成子控制器的添加。be like: private func creatChildController(vc:UIViewController,title:String,image:String,selected:String?){ vc.title = title

2022-05-21 12:35:38 499

原创 iOS基础 Swift纯代码初始化项目(入口引导)

纯代码初始化项目首先在配置也做以下修改:删除Main Interface中的内容,则程序运行时会先去AppDelegate中执行相关的代码。然后在Appdelegate.swift中添加如下代码:class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWit

2022-05-21 10:11:14 651

原创 Gitee基础 远程项目部署

Github国外的服务器,国内访问速度慢免费账户需要公开项目,而私人项目需要收费Gitee原 git.oschina.net国内服务器,访问速度快免费,且能创建私人项目使用Gitee新建仓库就…直接在网页创建就好将新项目同步到本地首先在本地创建好固定项目文件路径。在终端中打开进入到本地该路径:回到Gitee自己的项目中,以下功能处复制仓库位置。如果是私有仓库的话,则会要求输入Gitee账户的用户名及密码,如果是公开仓库的话,则直接完成克隆。由于swift.gitigno

2022-05-20 14:20:27 733

原创 项目初面对

新项目开发公司会提供完整的产品原型图,或者功能设计文档通过这些文档,能够梳理出目标项目的整体框架,从而协助项目框架的搭建。旧项目维护由于很多老项目是缺乏文档的,所以接管旧项目有必要为旧项目梳理一份文档,想要快速上手一个老项目,就需要先梳理一下整个项目的整体框架结构,可以先通过x-mind或者笔记等方式,整理出一套思路。主体框架确认明确好开发目标,能够使项目一直处于推进的状态。明确功能模块,能够使各个模块共同推进,也能较为准确测算工期,方便协同不同的部门参与开会等。在一些项目的重点难点的地方

2022-05-20 12:40:29 77

原创 iOS基础 代码开发中常见助力

注释方法Swift中有两种较为常见的注释方法:用于快捷总览代码功能的注释://MARK:- 用于方法管理用的注释//TODO:- 用于暂缓编写,留作备忘的代码注释用于方法功能说明的注释,对于编程中调用代码显示代码功能很方便:///方法相关功能、属性、调用时间等的备注说明都可以写。...

2022-05-19 15:33:52 237

原创 iOS基础 UIStackView

UIStackViewUIStackView用于组织、布局显示的视图,可用来平铺一系列的视图组合。UIStackView管理着其成员属性arrangedSubviews下的所有视图,以arrangedSubviews数组顺序排序。axis 用于定义子视图的排列方向:横、纵spacing 用于控制子视图的间距alignment 对齐方式distribution 布局规则let view1 = UIView()view1.backgroundColor = UIColor.redlet vi

2022-05-16 11:34:01 3544 1

原创 iOS基础 关于UIKit框架

UIKit框架Cocoa框架含有Foundation框架和UIKit框架。Foundation框架和界面无关,主要包含大量常用的API,如:集合、文件系统、URL、进程通信、通知、归档和序列化、表达式、条件判断等。UIkit框架则是基础的UI类库。...

2022-05-16 11:33:19 832

原创 iOS基础 CALayer

CALayerCALayer = Core Animation Layer ,UIView真正绘图的部分是由CALayer管理的。边框 通过设置CALayer的borderWidth和borderColor可以给视图添加边框效果,值得注意的是,这里设置的Color参数是QuartzCore框架下的CGColorRef类型的,而不是UIKit框架下的UIColor。但我们可以便捷地从UIColor对象获取CGColor属性转换后的CGColorRef值。投影 通过设置CALayer的shadowCol

2022-05-16 11:31:47 296

原创 iOS基础 UIView

UIVIewUIView之所以能显示是因为其内部的CALayer对象,实际上执行绘图的是CALayer对象,UIView其实更像是CALayer对象的管理控制器。UIView的继承关系NSObject > UIResponder > UIViewUIView常用的成员属性backgroundColor背景色alpha 透明度hidden 隐藏clipsToBounds 切边UIView的几何属性Frame:描述UIView的大小以及在父控件上的位置。Bounds:描

2022-05-16 11:30:43 556

原创 Swift基础 throws do-catch 错误的捕获和处理

错误的捕获和处理throws关键字用于抛出错误。do-catch用户捕获代码中可能出现的一场并妥善处理异常。//定义一个错误枚举,遵循Error协议enum PersonError:String,Error{ case PersonErrorDoNotEatBreakfast = "不吃早餐" case PersonErrorDoNotTakeExercise = "不锻炼"}class Person{ var age:Int var name:String

2022-05-16 11:27:13 579

原创 Swift基础 guard

guardguard与if语句功能非常相似,设计出它的目的,其实是为了提高程序的可读性(重点)。guard语句必须在函数中使用,并且必须带有else语句。当条件表达式为真的时候,则跳过else语句。当条件表达式为假的时候,则执行else语句。而且else语句内必须带有return、break、continue、throw语句。let age = 17func allowToMakeCola(){ guard age < 18 else { print("可以瑟瑟

2022-05-16 11:26:17 1063

原创 Swift基础 多态

多态多态指的是,同一个方法在不同的实例中,会有不同的执行效果。swift中有两种引用变量类型,一种是编译时,另一种是运行时。class Person{ var name : String init(personName: String) { name = personName } func eat() -> () { print("\(name)吃饭") } func getup() ->

2022-05-15 18:07:49 344

原创 Swift基础 闭包

闭包闭包是用大括号括起来的,可以没有名字的函数类型的实例。闭包有三种形式:全局函数:具名函数,但不捕获任何值嵌套函数:在函数内部嵌套定义具名函数,可捕获包含函数中的值。闭包表达式:匿名函数类型的实例,不具名代码块,可捕获上下文中的值。闭包是引用类型,闭包变量的拷贝具有引用语义。闭包和函数实例具有同样的内存模型。表达式:{(参数列表1,参数列表2,...)->(返回值) in 函数体执行的内容}示例:var closure = {(number1:Int,number2

2022-05-15 18:07:07 231

原创 Swift基础 函数作为参数类型

函数类型函数类型是一种引用类型,类似于函数指针,可以将函数类型应用在参数、变量、返回值等地方。函数类型的定义:(参数列表1,参数列表2,...)->返回值类型示例代码:class Person{ var name : String init(personName: String) { name = personName }}class Student: Person { var classmate : Student? var

2022-05-15 18:05:00 495

原创 iOS基础 在控制器中添加控件

在控制器中添加控件(以UITableView为例)一般代码添加控件的形式:声明设置frame或者添加布局约束设置数据源 or 代理 and so on添加到view在开发的过程中,苹果官方文档里面的精神是让我们尽量把一些控件留到需要时才加载进内存的,所以我们尽可能合理利用Lazy延迟加载关键字。然后我们在控制器中进行一些控件的声明的时候,如果对于需要初始化控件进行比较多的设置的时候,我们可以直接使用闭包的形式进行初始化,这样就能把相关的代码都存放到一起,便于管理。class ViewCo

2022-05-15 18:03:37 237

原创 Swift基础 循环引用导致内存泄漏

实例对象之间循环强引用ARC并不是绝对安全的,当两个实例对象间相互强引用,就会造成引用循环,导致所占用的内存无法释放。class Person{ var name : String init(personName: String) { name = personName }}class Student: Person { var classmate : Student? override init(personName: String) {

2022-05-15 18:02:52 469

原创 Swift基础 重写父类已有的方法

重写重写方法重写父类已有的方法,需要在方法名前加 override 的关键字。class Person{ var age:Int var name:String init(name:String,age:Int){ self.name = name self.age = age }}class Student:Person{ var classScore:Dictionary<String,Int> =

2022-05-15 18:01:48 855

原创 Swift基础 类型检查、强转、对象的释放

类型检查类型检查通过is与as两个操作符来实现。is 操作符可以判断两个实例是否是同一个类。as 操作符可以将元素转化为想转化的类。Any与AnyObjectswift中针对不确定类型的对象有两种特殊的别名,Any和AnyObject。Any表示任意的类型,包括类、结构体、基本数据类型等等。AnyObject只能表示任意的类的实例对象,结构体对象不能用这个表示。实例对象的销毁析构是实例对象释放前所做的动作,需要释放它所占有的内存资源。析构器 deinitializer 不需要任何参数。

2022-05-15 17:59:50 916

原创 Swift基础 类的属性与特殊方法(监听、延迟加载)

类的willSet()和didSet()通过给类的属性添加willSet()和didSet()方法,可以给类的属性增加观察者。其被设置的新的属性值,如果不进行重命名的话,就是默认名newValue。 static var locationMSVersion : NSNumber = 0 { didSet{ if onlineMSVersion != 0 { compareMSVersion() }

2022-05-15 17:57:52 425

原创 Swift基础 类的初始化方法-构造函数

类的初始化类的初始化是调用init()方法进行的,在 Objective-C 中,init()方法是不安全的,因为init()方法可能被调用不止一次,也不能保证初始化后所有的成员属性都不为空、都有值。对于不需要立刻初始化的属性,需要在声明类型后增加 ? 符号Designated(指定的、标记的)所以 Swift 有了超级严格的初始化方法。一方面,Swift 强化了 designated 初始化方法的地位。Swift 中不加修饰的 init 方法都需要在方法中保证所有非 Optional 的实例变

2022-05-15 17:56:00 344

原创 Swift基础 关于类与类的继承

类类与结构体的区别:类可以有继承关系,子类可以使用父类的特性和方法,而结构体没有。类型转换可以在运行时检查和解释为另一个类的实例。deinit反初始化可以做到释放所占用的内存资源。类的引用计数可以做到不止一个对另一实例的引用。格式:class 类名 : 父类名 { 数据成员(变量)定义 函数成员(方法)定义和实现}案例:class Person { var name : NSString var height : CGFloat var se

2022-05-15 17:54:33 275

原创 Swift基础 map

map用法:let numbers = [1,2,3,4]let result = numbers.map { $0 + 1 }print(result) // [2,3,4,5]map 方法接受一个闭包作为参数, 然后它会遍历整个数组,并对数组中每一个元素执行闭包中定义的操作。

2022-05-08 15:26:55 499

原创 Swift基础 for循环

循环语句下的forloopforloop是标签语句,一般用于结束循环(主要是外循环) var i,j:Int var s:Int forloop:for i in 1...10 { for j in 1...10 { s = i*j print("i*j=\(s)") if (s>50) { print("i*j>50,退出外循环");

2022-05-08 15:26:15 2522

原创 Swift基础 泛型

泛型在程序设计中,要实现任意数据类型执行统一的一段操作,可以运用模版,对于整型、字符型、浮点型或者其他类型,均可以实现,这就叫泛型,可以重复利用。编写泛型函数的步骤是:将涉及不同代码的部分用T表示。 struct Student { var name = "name" var height = 160.00 } override func viewDidLoad() { super.viewDidLoad()

2022-05-08 15:25:47 142

原创 Swift基础 some关键字不透明结果类型

some关键字 不透明结果类型在某一些情况下,我们需要返回接受一个遵守了某协议的对象,该对象可以是任何类,但需要遵守某个协议即可,并不限定类的类型。这个时候就会有以下问题:协议:protocol ProtocaltTalk{ associatedtype words func say(words:words)}该协议定义了说话,遵守该协议的可以是人类,可以是动物,可以是机器人。遵守ProtocaltTalk协议的两个类型(简单举例):class Person:Protocal

2022-05-08 15:25:19 573

原创 Swift基础 协议

协议协议的关键字是protocal。协议只需定义,没有实现的部分。协议也分两种,属性协议和方法协议。属性协议属性协议的声明用var声明,在声明后,要设置get方法或者set方法、get方法一起设置。//协议class Person{ var age:Int var name:String init(name:String,age:Int){ self.name = name self.age = age }}prot

2022-05-08 15:24:56 236

原创 Swift基础 扩展

扩展关键字extension,扩展的目的就是衍生原来没有的功能,可以扩展属性、方法、索引。并且可以在没有获得原始代码的情况下扩展。在oc中是以runtime来实现动态调用和添加功能的。现有的类、结构体、枚举可以在扩展的方式下添加方法,但重写的方法不能使用扩展。属性扩展extension Double{ var q:Double{return self/1000} var w:Double{return self/10000}}override func viewDidLoad(

2022-05-08 13:05:15 179

原创 Swift基础 函数

函数函数的声明方式: func 函数名(参数列表) -> 返回值 { 参数列表里的数据表示方式: 参数名:参数类型 函数体 }案例: struct Student { var name = "name" var index = 202100 var height = 160.00 var profession = "profession" var sex = "男"

2022-05-08 13:05:02 305

原创 Swift基础 结构体

结构体声明结构体的关键字是struct,使用起来和类相似,但类的成员是引用类型,而结构体的成员是值类型。值类型在传递和赋值的时候,是进行复制的,那也就是说在修改一处复制体的时候,原来被复制的对象是不受影响的。引用类型在传递和赋值的时候,是传递引用对象的一个“指向”,所以当对该引用进行修改的时候,是直接直接修改到最原始的对象,即,一旦修改值,则对该原始对象的所有引用都会被同步修改。在内存中,引用类型的变量是在堆上存储和操作的。值类型的变量是在栈上存储和操作的。两者相比起来,在堆上的变量操作会比较复杂和

2022-05-08 13:04:26 411

原创 Swift基础 枚举

枚举使用枚举会使得编程的过程更加安全,因为一旦使用了不是枚举的值,系统就会立刻给出反馈。 enum Direction{ case North case South case East case West } let directuin = Direction.South switch directuin { case .North: print("North") case .South:

2022-05-08 13:03:54 145

原创 Swift基础 Switch分支语句

Switch分支语句在swift中的Switch语句是没有穿透效果的,也就是匹配到对应的值之后,运行完代码所属的代码块就结束了。相较于传统的不同,传统的匹配完之后,还会一一往下再与每个case比较。switch还可以匹配多个值: let index = "A" switch index { case "A","B","C": print("通过,及格") case "D","E": print("不通过,不及格") default

2022-05-08 13:03:18 613

原创 Swift基础 Dictionary字典

字典字典和数组都是集合类型,字典元素可以是值类型也可以是引用类型。键名不允许重复。字典的声明方式(三种)显式: var studentList : Dictionary<String,Float> = ["xiaoMing":172.5,"xiaoHong":168.5] for (name,height) in studentList { print("\(name):\(height)"); }运行结果:xiaoMing:172.5xi

2022-05-06 11:45:27 610

XGColletcionView

XGColletcionView,现在有许多极具创造力的网站,几周前我碰巧浏览到一个名为Form Follows Function的网站,上面有各种交互动画。其中最吸引我的是网站上的导航转轮,转轮由各种交互体验海报组成。

2015-09-13

libqrencode

生成二维码我是直接用库的,貌似iOS也没有自带的二维码生成类,在网上寻找一番之后最常用的莫过于一个C++写的一个库了.名字是:qrencode; 网上有些大神已经为这个库写好了调用方法,只要传入字符串,就能将字符串处理成二维码,其中还能将公司的logo内嵌到二维码的中心位置.

2015-05-25

framework-RegexKitLite

博文代码---- 正则表达式的使用,RegexKitLite这个框架是很久以前的了,里面的项目是一个MRC的环境,不是ARC的,所以我们在ARC中使用MRC的话,对这个ARC的项目本身还需要在一些地方进行配置,这个操作等一下会写出.

2015-03-01

RegularExpression04

博文代码---- 正则表达式在实际开发中,常常是为了获取文本中的一些信息,比如邮箱地址,手机号码,http网址之类的截取需求. 假设现在手机上有一条这样的信息,如果我想拨打电话给信息显示里面告知的手机号码,如果手机没有给我们讲号码处理出来,那么我们可能就需要先将号码抄下,再拨号出去,这样显得客户体验不好,所以正则表达式就派上用场了.

2015-03-01

RegularExpression03

博文代码---- 这篇文章主要是学习剩下的一些常见的规则语法 ^: 非运算 a[^b] 除了b以为的字符 或者^a 以a开头 \d:代表一个数字,等同于[0-9] \D:代表⾮数字,等同于[^0-9] \s:代表换行符、Tab制表符等空⽩字符 \S:代表⾮空白字符 \w:匹配任何字类字符,包括下划线。与“[A-Za-z0-9_]”等效。 \W:⾮\w ,等同于[^\w]

2015-03-01

RegularExpression02

博文代码---- 通过上一篇文章的学习,已经使用过”.”的正则表达式的使用,”.”的检索方式就是匹配任意的字符,但是对于其他的语法可能还不大清楚是怎么用的,现在列出一些正则表达式的语法,会帮助进一步的理解加深.

2015-03-01

RegularExpressionCode01

博文代码---- 简介:正则表达式,又称正规表示法、常规表⽰法(Regular Expression,在代码中常简写为regex、regexp或RE),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配⼀系列符合某个句法规则的字符串。在很多文本编辑器⾥,正则表达式通常被⽤用来检索、替换那些符合某个模式的文本。

2015-03-01

getScreenViewCode

博客代码---- 用代码写的用于ios中的屏幕截图,有时候我们在应用中需要加入屏幕截图的功能,比如说游戏的最高纪录,玩家刷新了游戏的纪录用于纪录一些具有历史性的、里程碑式的一些小事情……

2015-02-25

Quartz2D-根据路径绘制

博客代码---- Quartz2D中还有以CGPath开头的API,Path我们称之为路径,我们之前用Quartz2D画出的东西都是沿着一条路径去画的。 而这次我们将来学一下如何先将路径定好之后,再将路径放入图层上下文中。

2015-02-25

cutPictureCode

博客代码---- 之前写过图形上下文裁剪处理后制作头像那样的实现,是在UIView的drawRect里面实现的, 当然也可以在UIImage里面实现,这样就可以直接返回一个UIImage对象,直接可以拿来用。现在写的这个是关于位图上下文的裁剪。也是裁剪成一个圆形头像作为一个例子。

2015-02-25

WaterMakeImageCode

博客代码---- 这次我们要来学习如何为一张图片添加水印,为图片添加水印是现在很多社交软件都有实现的一个功能,我们在微博上面查看好友的图片的时候,图片的右下方经常附带有发表该微博的作者的名字,这就是我们今天要实现的效果。在示例的最后还会用到在学OC的时候学得NSData方法将处理后的位图保存为png或者jpg的图片文件。

2015-02-25

kkkentyBlog-Xcode中常见的项目文件

kkkentyBlog-Xcode中常见的项目文件

2015-01-10

【C++学习笔记】01_C++概述

这是kkkenty个人学习的读书笔记文档,想要的同学可以自行下载。

2014-06-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除