![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
iOS
文章平均质量分 51
iOS
乐事派
iOS开发者
展开
-
iOS基础 获取状态栏的高度
由于各代iPhone对屏幕尺寸以及前置摄像头、传感器等的迭代,对于其状态栏的高度也发生了一些微小的变化,不再是如以前的20高度了。因此在iOS13后,对于状态栏的高度,有这么一个方法可以获取。参考文章:VeggieOrz的文章:iOS 准确获取 iPhone 状态栏、导航栏、TabBar高度,看这篇就够了...原创 2022-06-12 09:37:56 · 1591 阅读 · 0 评论 -
正则表达式 常用的正则规则汇总
数字:^[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 · 838 阅读 · 0 评论 -
iOS基础 对AFNetworking工具进行封装
封装封装的工具类是继承自:AFHTTPSessionManager创建单例使用static关键字、用let声明一个本类型的常量。(let是线程安全的。如:import UIKitimport AFNetworkingclass GGNetworkTools: AFHTTPSessionManager { static let share = GGNetworkTools()}如此单例就制作好了。解除不安全的网络访问限制封装import AFNetworkingenu原创 2022-05-26 15:51:34 · 859 阅读 · 0 评论 -
iOS基础 自定义转场控制器上的动画 UIPresentationController
概述约定:底层控制器:在层级较低的控制器,由它创建新控制器转场控制器:就是底层控制器创建的新控制器转场控制器被创建出来,若要自定义转场的动画,比如从中心逐渐放大知道占据满屏,这样系统没有提供的动画,就需要底层控制器来创建新的转场动画。首先需要底层控制器创建新控制器的时候,给新控制器约定管理转场与动画的代理。如:accountVC.transitioningDelegate = self然后底层控制器需要实现相关的协议,即实现控制器转场协议:UIViewControllerTransitio原创 2022-05-25 12:01:58 · 548 阅读 · 0 评论 -
iOS基础 自定义转场控制器UIPresentationController
概述基本上苹果提供的控制器转场都能满足我们的需求,比如反转、淡入淡出、翻页、从下往上显示等等,这都可以通过设置控制器实现。但如果有一些特殊的需求,比如只在一小块区域显示新控制器的内容。当然你也可以通过一些复杂的方式在原本的控制器上自定义一个小View来实现,但那样会增加原控制器的业务负担。实际上,我们可以通过自定义UIPresentationController来控制新controller的展示形式,这只需要在转场相关的代码部分设置一下代理,原控制器再遵守以下该转场控制器的协议就可以了。具体原创 2022-05-24 14:38:34 · 473 阅读 · 0 评论 -
iOS基础 Storyboard Reference
然后就会在目录结构中看见刚的两个控制器一起并入到新的Storyboard中了我们回到MainStoryboard。在MainStoryboard中就被映射成功了。原创 2022-05-21 17:25:30 · 117 阅读 · 0 评论 -
iOS基础 根据类名字符串创建类
命名空间Swift中是有命名空间概念的,我们在通过字符串创建对应的类的时候:NSClassFromString("HomeController")发现并不能按照想象中的那样创建得出来。这时是因为Swift中有命名空间的概念,be like:NSClassFromString("IDB.HomeController")通过命名空间获取的类之后,怎么使用NSClassFromString(<ClassName: String>)->AnyClass?获得得的是一个AnyC原创 2022-05-21 13:12:32 · 636 阅读 · 0 评论 -
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 · 511 阅读 · 0 评论 -
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 · 676 阅读 · 0 评论 -
iOS基础 代码开发中常见助力
注释方法Swift中有两种较为常见的注释方法:用于快捷总览代码功能的注释://MARK:- 用于方法管理用的注释//TODO:- 用于暂缓编写,留作备忘的代码注释用于方法功能说明的注释,对于编程中调用代码显示代码功能很方便:///方法相关功能、属性、调用时间等的备注说明都可以写。...原创 2022-05-19 15:33:52 · 246 阅读 · 0 评论 -
iOS基础 在控制器中添加控件
在控制器中添加控件(以UITableView为例)一般代码添加控件的形式:声明设置frame或者添加布局约束设置数据源 or 代理 and so on添加到view在开发的过程中,苹果官方文档里面的精神是让我们尽量把一些控件留到需要时才加载进内存的,所以我们尽可能合理利用Lazy延迟加载关键字。然后我们在控制器中进行一些控件的声明的时候,如果对于需要初始化控件进行比较多的设置的时候,我们可以直接使用闭包的形式进行初始化,这样就能把相关的代码都存放到一起,便于管理。class ViewCo原创 2022-05-15 18:03:37 · 248 阅读 · 0 评论 -
iOS基础 应用程序的状态 与 UIApplication
闭包闭包是用大括号括起来的,可以没有名字的函数类型的实例。闭包有三种形式:全局函数:具名函数,但不捕获任何值嵌套函数:在函数内部嵌套定义具名函数,可捕获包含函数中的值。闭包表达式:匿名函数类型的实例,不具名代码块,可捕获上下文中的值。闭包是引用类型,闭包变量的拷贝具有引用语义。闭包和函数实例具有同样的内存模型。表达式:{(参数列表1,参数列表2,...)->(返回值) in 函数体执行的内容}示例:var closure = {(number1:Int,number2原创 2021-12-18 01:19:57 · 1163 阅读 · 0 评论 -
iOS基础 UIStackView
UIStackViewUIStackView用于组织、布局显示的视图,可用来平铺一系列的视图组合。UIStackView管理着其成员属性arrangedSubviews下的所有视图,以arrangedSubviews数组顺序排序。axis 用于定义子视图的排列方向:横、纵spacing 用于控制子视图的间距alignment 对齐方式distribution 布局规则let view1 = UIView()view1.backgroundColor = UIColor.redlet vi原创 2022-05-16 11:34:01 · 3565 阅读 · 1 评论 -
iOS基础 关于UIKit框架
UIKit框架Cocoa框架含有Foundation框架和UIKit框架。Foundation框架和界面无关,主要包含大量常用的API,如:集合、文件系统、URL、进程通信、通知、归档和序列化、表达式、条件判断等。UIkit框架则是基础的UI类库。...原创 2022-05-16 11:33:19 · 866 阅读 · 0 评论 -
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 · 304 阅读 · 0 评论 -
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 · 573 阅读 · 0 评论 -
XMPP 01 基础
网络基本结构OSI七层模型:物理层:定义的是设备的标准数据链路层:定义了对比特流的包装网络层:定义了传输的路径传输层:定义了传输数据的协议(常见的各种HTTP、TCP、UDP等等)会话层:定义了收发数据对象的协议表示层:定义了两个终端可识别的协议应用层:用户使用软件的层次网络世界中最重要的就是协议,各种各样的协议。数据传输的时候会用到一个socket套接字协议。套接字工作在传输层到应用层之间。socket本地进程间的通信可以通过PID来确定彼此,然后借由共享内存的方式等来完成通信。原创 2022-03-27 18:27:18 · 5434 阅读 · 0 评论 -
CoreData相关04 多个数据库
多个数据库一般来说你可以把所有的表都放在一个数据库里,但那样不容易管理。我们更多的情况是,针对不同的模型来设计数据库。在上一个案例中,已经有一个含有Person与Country两个表的数据库,现在我们再新增一个数据库为School。现在的情况相当于我们有两个数据库了,所以我们创建上下文的方式也需要做一些改变,不然的话,就有可能会出现student表放在别的数据库的情况。代码的这个位置如果传入的是nil的话,那么就会将所有的的文件都关联到同一个model中,这就会出现student表和person、c原创 2022-03-07 15:12:50 · 3268 阅读 · 0 评论 -
CoreData相关03 表关联
表关联比如企业下有众多部门,而员工属于某一个部门,则在员工表与部门表之间产生了关联。在上一篇文章中已经有一张“Person”表了,现在创建一个“国家”表“Country”添加关联然后把person类都删掉,重新生成一下person类文件。重新生成后,就可以发现多出了关联的那个属性了。添加关联数据- (void)addPersonAndCountry{ Person* person = [NSEntityDescription insertNewObjectForEntityForN原创 2022-03-04 23:21:51 · 2828 阅读 · 0 评论 -
CoreData相关02 基础及运用:删除、修改、模糊查询
删除条目在上一篇文章中,可以发现有0岁的条目:2022-03-04 16:27:23.552477+0800 CoreData实践1[72820:3059276] personName:personSomeone5009 age:0系统想要将这些age = 0 的条目删掉。其基本的操作是:找到 age = 0 的条目删除这些条目用上下文保存- (void)deleteSomeoneAge:(int64_t)age{ //创建请求对象(填入的是表名称) NSFetchReq原创 2022-03-04 18:26:59 · 524 阅读 · 0 评论 -
CoreData相关01 基础及运用:添加、查询、过滤、排序、分页
CoreDataCoreData中几乎不用写数据库操作语句就能完成数据的本地化存储。CoreData和iOS中的模型对象相联系在一起,只需要操作模型对象的增删改查就可以完成数据的增删改查,不用写SQL语句。CoreData的存储方式SQLite NSSQLiteStoreTypeXML NSXMLStoreTypeBinary NSBinaryStoreType内存存储 NSInMemoryStoreTypeCoreData的核心对象NSManagedObjectContext 用途:负原创 2022-03-04 16:33:45 · 6027 阅读 · 0 评论 -
多线程相关 GCD
什么是GCDGCD是一种异步执行任务的技术。开发者只需要将想要执行的任务添加到适当的Dispatch Quere中,GCD就能生成必要的线程并执行任务。GCD相比NSThread类等的多线程方法,更加简洁和一目了然,并且GCD可以提供系统级别的线程管理来提高执行效率。还会自动管理线程的生命周期,如:创建线程、调度任务、销毁线程。使用方式创建队列派遣任务(同步、异步)同步与异步同步:在当前线程中执行异步:在其他线程中执行串行队列按顺序,一个任务一个任务顺序执行。同步://创建队列原创 2021-11-26 17:19:59 · 1378 阅读 · 0 评论 -
多线程相关 基本概念
进程系统正在运行的一个应用程序。每个进程是相互独立的。线程线程是进程的基本执行单元,可以说是应用程序执行任务的一个流程,因此进程至少有一个线程用于执行所有的任务。线程的串行单个线程按顺序执行一个任务。多线程单个线程并发执行多个任务。(相当于A任务完成一点,再去做B任务完成一点,事件间隔小,在瞬间的维度上理解为同时),多线程可提高程序的执行效率。多线程原理CPU同一时间只能处理一条线程(但处理速度非常快)。多线程并发执行,实际上就是CPU在多条线程上调度切换来执行任务,从而从视觉上给到有原创 2021-11-17 22:20:11 · 176 阅读 · 0 评论 -
多线程相关 NSOperation
NSOperationNSOperation是苹果对GCD的一个封装类。配合NSOperation和NSOperationQueue也能实现多线程编程。其使用过程是,将需要操作的任务封装到NSOperation对象当中,再将NSOperation对象添加到NSOperationQueue队列中。后续的系统会像GCD那样自动去管理。NSOperation是一个抽象类,所以不能直接创建对象,我们使用时必须使用NSOperation的子类:NSInvocationOperationNSBlockO原创 2021-12-02 23:35:14 · 177 阅读 · 0 评论 -
多线程相关 NSThread
NSThread对象一个NSThread对象就是一条线程。一般的使用方式://创建线程NSThread* thread = [[NSThread alloc]initWithTarget:self selector:@selector(timeConsumingOperation) object:nil];[thread start];//开始工作//使用类方法实现[NSThread detachNewThreadSelector:@selector(timeConsumingOperat原创 2021-11-23 19:49:46 · 426 阅读 · 0 评论 -
正则表达式-04 实际应用
正则表达式在实际开发中,常常是为了获取文本中的一些信息,比如邮箱地址,手机号码,http网址之类的截取需求. 假设现在手机上有一条这样的信息,如果我想拨打电话给信息显示里面告知的手机号码,如果手机没有给我们讲号码处理出来,那么我们可能就需要先将号码抄下,再拨号出去,这样显得客户体验不好,所以正则表达式就派上用场了....原创 2015-03-01 16:38:56 · 618 阅读 · 0 评论 -
正则表达式-02 更多的方式
通过上一篇文章的学习,已经使用过”.”的正则表达式的使用,”.”的检索方式就是匹配任意的字符,但是对于其他的语法可能还不大清楚是怎么用的,现在列出一些正则表达式的语法,会帮助进一步的理解加深....原创 2015-03-01 16:30:39 · 603 阅读 · 0 评论 -
正则表达式-01 初识
简介:正则表达式,又称正规表示法、常规表⽰法(Regular Expression,在代码中常简写为regex、regexp或RE),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配⼀系列符合某个句法规则的字符串。在很多文本编辑器⾥,正则表达式通常被⽤用来检索、替换那些符合某个模式的文本。...原创 2015-03-01 16:19:58 · 590 阅读 · 0 评论 -
正则表达式-03 更多的方式
这篇文章主要是学习剩下的一些常见的规则语法^: 非运算 a[^b] 除了b以为的字符 或者^a 以a开头 \d:代表一个数字,等同于[0-9] \D:代表⾮数字,等同于[^0-9]\s:代表换行符、Tab制表符等空⽩字符\S:代表⾮空白字符 \w:匹配任何字类字符,包括下划线。与“[A-Za-z0-9_]”等效。 \W:⾮\w ,等同于[^\w]^的语法代码:int...原创 2015-03-01 16:34:54 · 485 阅读 · 0 评论 -
Xcode中常见的文件
Xcode中常见的项目文件》Info.plist是整个项目的重要配置文件不能删除原创 2015-02-25 23:33:01 · 549 阅读 · 0 评论 -
iOS - 硬件配置相关 - 获取WiFi的SSID(草稿)
- (id)fetchSSIDInfo{ NSString *currentSSID = @""; CFArrayRef myArray = CNCopySupportedInterfaces(); if (myArray != nil){ NSDictionary* myDict = (__bridge NSDictionary *) CNCopyCurr原创 2015-05-25 16:02:57 · 809 阅读 · 0 评论 -
iOS - 硬件配置相关 - AVCaptureDevice
最近因为需要做二维码的功能,所以接触到这个类, AVCaptureDevice.h,主要用来获取iphone一些关于相机设备的属性。 使用这个类必须要引入AVFoundation.framework包。原创 2015-05-25 09:54:13 · 2069 阅读 · 0 评论 -
三种枚举方式
普通枚举typedef enum{ PersonDoctor, PersonTeacher}Person;这样定义的枚举的值,首位是0,后续依次加1,在此例,PersonDoctor的值为0,PersonTeacher为1。位移枚举typedef enum { PersonDoctor = 1<<0, // 0b0001 PersonTeacher = 1<<1, // 0b0010} Person;这样定义的枚举的值,往后1原创 2021-12-04 19:50:01 · 247 阅读 · 0 评论 -
OC - KeyValue - 根据字典给模型赋值
通常我们在使用模型数据的时候,有个应用场景就是服务器返回的数据刚好是一个层次比较复杂的json,这时候就可以将其转换成字典,再将字典转换成模型.这样代码的可读性就会大大提升.我知道现在业界内有个大牛写得一个框架比较好用,就是Extension,但是我在使用的时候,发现,只要字典的键值对和模型对象类的属性数量不对等后者是有出入的时候,就会奔溃在某一行中.我采用的是比较底层的解决办法: 直接对我的模型原创 2015-06-02 09:07:51 · 2993 阅读 · 0 评论 -
OC - NSString的属性区别(转载)
NSString的属性一直是个很迷惑的东西,因为它不像其他类一样,NSString的属性可以为copy,也可以为retain/strong.比如:@property (retain,nonatomic) NSString *rStr;@property (copy, nonatomic) NSString *cStr;- (void)test:{ NSMutableString *mS转载 2015-06-03 18:55:16 · 924 阅读 · 0 评论 -
OC - NSData 转 NSDictionary(转载)
(BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions { [self test]; // Override point for customization after application launch. return YES; }转载 2015-06-04 11:04:20 · 1546 阅读 · 0 评论 -
SEL数据类型
SELSEL是一种数据类型,表示的是方法的存储位置。假设有一个Person类,实例化该类后就有了person对象,那么每个对象都会有一个isa指针指向该类的代码存储区。在代码存储区中,会有SEL包装过的一些方法的调用地址,通过SEL指向的地址来调用该具体的方法。用下代码来解释,也许会更清晰点: SEL func = @selector(stringByAppendingString:); NSString* abc = @"abc"; abc = [abc performSelect原创 2021-12-02 18:40:09 · 1788 阅读 · 0 评论 -
iOS - 需求 - 二维码(生成)
生成二维码我是直接用库的,貌似iOS也没有自带的二维码生成类,在网上寻找一番之后最常用的莫过于一个C++写的一个库了.名字是:qrencode; 网上有些大神已经为这个库写好了调用方法,只要传入字符串,就能将字符串处理成二维码,其中还能将公司的logo内嵌到二维码的中心位置. 贴上相关的代码:#import "QRCodeGenerator.h"#import "qrencode.h"enum原创 2015-05-25 14:51:30 · 460 阅读 · 0 评论 -
iOS - 需求 - 微信扫描二维码支付(草稿)
首先先讲一下这个流程: 1.商户即公司,根据微信官方支付的规则,为不同的商品或者是订单号生成不同的链接,将链接转换成二维码. 2.用户扫描二维码 3.微信客户端引导用户完成支付 4.用户完成支付,用户收到支付成功的提示 5.商户即公司的后台会收到支付成功地提示(前提是有填写回调地址)开发步骤: 1.开通支付权限 在微信公众平台设置支付权限,进入栏目微信支付-》开发配置-》修改 <参考原创 2015-05-27 11:13:16 · 3624 阅读 · 0 评论 -
iOS - 需求 - 将参数进行字典排序组成字符串(待签名字符串)
将所有POST参数(sign除外)进行字典排序,组成字符串: 比如:(根据首字母排序,参数间用&相连,字典转成json格式)ap_id=20140723007148&biz_conte={"outTradeNo":201503201",toalAmount":"8.8",discountAmount":8.",unDiscountAmount":80",subject": 扫码支付",godsD原创 2015-06-03 10:47:37 · 5681 阅读 · 0 评论