iOS
文章平均质量分 65
iOS 基础知识
CuiXg
生活很短,让它精彩一点
展开
-
搜狐视频iOS团队 Objective-C 编码规范
搜狐视频iOS团队 Objective-C 编码规范介绍团队中长期以来存在各人不同的编码方式和习惯,导致代码中模块编码风格迥异,降低了可读性和维护性,经团队决定由张科、李红力编写这份规范。待定稿后务必遵守相关约定,这能使团队编码风格趋于一致,也有助于养成良好的代码习惯。目录命名基本原则命名类和协议命名头文件命名方法命名存取方法命名委法集合操作类方法命名属性和实例变量数命名常量命名通知图片命名注释文件注释代码注释代码格式每一行的最大长度空格函数的书转载 2021-04-21 09:53:54 · 151 阅读 · 0 评论 -
逐步实现 JSON 解析类
逐步实现解析库主流 JSON 解析库Codable简单应用Model 类定义自定义键名解析方式使用特殊处理字段设置默认值或者缺少字段处理主流 JSON 解析库SwiftyJSON ObjectMapperHandyJSONJSONEncoderMJExtensionYYModel…CodableCodable Swift 4 带来的新特性,是苹果官方提供的一套用于 JSON 解析的协议。Codable 其实是一个组合协议,由 Decodable 和 Encodable 两个协议组原创 2021-03-25 13:57:03 · 573 阅读 · 0 评论 -
iOS 开发常用三方类库
1. IQKeyboardManagerIQKeyboardManager是iOS中解决键盘弹起遮挡UITextField/UITextView的一种很实用的工具。无需输入任何代码,不需要额外的设置。使用IQKeyboardManager的你只需要将源文件添加到项目。2.AFNetwokingAFNetworking是一个为 iOS 和 Mac OSX 制作的令人愉快的网络库,它建立在URL 装载系统框架的顶层,内置在Cocoa里,扩展了强有力的高级网络抽象。它的模块架构被良好的设计,拥有丰富的原创 2021-03-24 17:02:39 · 568 阅读 · 0 评论 -
动态修改应用图标
动态修改应用图标拖入图标文件配置 Info.plist文件代码去掉更换icon时的弹框动态修改图标是在不重新安装应用的前提下修改 icon 应用图标,在一些节日时可以为了营造氛围临时修改应用图标,动态修改图标避免了应用提交审核,重新安装的麻烦。/// 该功能目前仅支持 iOS 10.3 以上版本,参考 API:extension UIApplication { // If false, alternate icons are not supported for the current p原创 2021-02-04 15:01:27 · 303 阅读 · 0 评论 -
开发中常用类扩展
源码UILabel设置字体和颜色 /// 设置 Label 属性 /// - Parameters: /// - text: 文本内容 /// - font: 字体 /// - color: 字体颜色 public func cxg_setAttribute(_ text: String? = nil, font: UIFont, textColor color: UIColor) { }加载 HTML /// 加载 HTML 标签原创 2020-12-01 11:18:47 · 197 阅读 · 0 评论 -
iOS 获取系统,APP 部分信息 设备型号 (iphone12)
开放中时长会需要收集一些手机设备信息以及 app 版本信息,列举了比较常见的几种信息,持续更新!//// CXGSystemInfo.swift//// Created by CuiXg on 2018/7/21.// Copyright © 2018年 CuiXg. All rights reserved.//import UIKitclass CXGSystemInfo { /// 手机获取设备名称 class var deviceName: Strin.原创 2020-11-02 14:18:10 · 497 阅读 · 0 评论 -
iOS 调用系统自带导航功能实现
项目中需要用到导航功能,接收前人项目引用的高德地图,原本简单的项目因为引入高德导航使得包变大,决定使用系统自带的地图导航功能替代原有的导航.使用系统导航需要用到 MapKit 框架.通过调用 ‘MKMapItem.openMaps(with: [items], launchOptions: [options])’ 方法调起系统地图的导航功能.items 是一个数组,标记要经过的地方坐标 MKMapItem 类型,options 参数设置.具体使用如下:let startItem = MKMapI.原创 2020-11-02 14:11:54 · 651 阅读 · 0 评论 -
给 view设置渐变色背景,生成渐变 UIImage
通过 CAGradientLayer 实现 let gradientLayer = CAGradientLayer() gradientLayer.colors = [UIColor(R: 241, G: 173, B: 17, alpha: 1).cgColor, UIColor(R: 210, G: 166, B: 8, alpha: 1).cgColor, UIColor(R: 237, G: 178, B: 60, alpha: 0).cgColor] grad原创 2020-10-24 10:24:44 · 457 阅读 · 0 评论 -
ios开发中object-c中UTF-8 和 GBK 的 NSString 相互转化的方法
应用都要遇到一个很头疼的问题:文字编码,汉字的 GBK 和 国际通用的 UTF-8 的互相转化稍一不慎,就会满屏乱码。下面介绍 UTF-8 和 GBK 的 NSString 相互转化的方法NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);char* c_test = “北京”;int nLen = strle原创 2020-10-17 22:46:38 · 724 阅读 · 0 评论 -
UITableView 重用池原理
重用实现分析查看UITableView头文件,会找到NSMutableArray* visiableCells,和NSMutableDictnery* reusableTableCells两个结构。visiableCells内保存当前显示的cells,reusableTableCells保存可重用的cells。TableView显示之初,reusableTableCells为空,那么tableView dequeueReusableCellWithIdentifier:CellIdentif原创 2020-10-17 22:45:08 · 227 阅读 · 0 评论 -
停用 iOS 模拟器输出大量的系统调试数据
在 Xcode 中,iOS 模拟器会输出大量的系统调试数据,为了停用这个功能,您可以打开对应 Target 的 Scheme,定位到 Run(Debug) 一栏的 Arguments 当中,在 Environment Variables 中加入 OS_ACTIVITY_MODE = DISABLE 这一条数据,即可屏蔽模拟器输出系统调试数据。...原创 2020-10-17 22:41:20 · 101 阅读 · 0 评论 -
通过 UIBezierPath 与 CAShapeLayer 为 UIView 添加边框
通过贝塞尔曲线与 CAShapeLayer 为 View 添加虚线边框,可设置宽度,颜色,圆角等代码如下: /// 为视图添加虚线边框 /// /// - Parameters: /// - view: 要添加边框的视图 /// - size: 视图 size /// - cornerRadius: 视图圆角 默认:10 /// - lineWidth: 边框宽 默认: 1 /// - lineColor: 边框颜色 默认: black原创 2020-10-17 22:24:59 · 558 阅读 · 0 评论 -
swift 实现星级评分
许多App都会有评价功能,这个时候或许会需要实现星级评分,下面我们来简单的实现一个星级评分功能。思路通过添加图片形式实现星级打分功能.创建两个视图,其中一个添加灰色星星图片,另一个添加橘色星星图片.橘色星星视图覆盖灰色星星视图,通过修改橘色星星视图的宽度实现评分的展现.创建一个继承于 UIView 的类,作为星级打分的显示视图创建灰色星星视图,并添加到父视图.创建橘色星星视图,添加到父视图,保证橘色视图覆盖灰色星星视图.通过修改橘色星星视图宽度实现评分.可通过手势等方式实现打分功能.原创 2020-10-17 22:22:54 · 852 阅读 · 0 评论 -
Carthage 安装以及初步实用
本人从事 iOS 开发已有5年多,用 swift 开发也有一年多的时间了,此前一直利用 cocopods 管理三方框架和依赖,最近了解到 Carthage 这个工具,本着学习的态度对这工具进行了了解.官方地址: https://github.com/Carthage/CarthageCarthage 简介Carthage 类似于 CocoaPods,为用户管理第三方框架和依赖,但不会自动修改项目文件和生成配置Carthage 是去中心化的依赖管理工具,安装依赖时不需要去中心仓库获取 Cocoa原创 2020-10-17 22:17:25 · 329 阅读 · 0 评论 -
禁止 UIButton 连续点击
UIButton是我们iOS开发中常用的控件,连续/抖动点击造成数据请求或其它操作重复执行也是用户使用中常发生的 !解决这一问题的方法很多,简单总结了一下.使用UIButton的enabled或userInteractionEnabled使用UIButton的enabled属性,点击后将enabled设置为 false, 进行任务处理,完成任务后再将其设置为 false.@objc func btnClick(_ sender: UIButton) { sender.isEnabled =原创 2020-10-17 22:02:31 · 343 阅读 · 0 评论 -
消除 UINavigationBar 底部黑线
1. 通过设置背景图片与阴影图片清除// 在自定义 UINavigationController 内self.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)self.navigationBar.shadowImage = UIImage()2. 通过遍历 UINavigationBar 子视图,找到对应的 View,设置为隐藏extension UINavigationBar { func h原创 2020-10-17 21:56:35 · 541 阅读 · 0 评论 -
UITableView性能优化的几点建议
TableView是App里最常用的一个UI控件了,优化TableView性能,使我们提高用户体验必须要考虑的问题。提前计算并缓存好高度,因为heightForRow最频繁的调用。- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath;异步绘制,遇到复杂界面,性能瓶颈时,可能是突破口。滑动时按需加载,这个在大量图片展示,网络加载时,很管用。(SD原创 2020-10-17 21:53:45 · 239 阅读 · 0 评论 -
实现cell图片自适应方案
UITableView 是 iOS 开发中最常用的控件之一,使用 UITaleView 时最头疼的莫过于 cell 高度的计算,虽说在 iOS8.0 以后引入了自适应方法,但在适配过程中任然会遇到各种难题,尤其是为了满足产品需求进行复杂 cell 自定义时,高度计算可谓是难上加难.这里主要对开发中遇到的自定义 cell 是加载网络图片适配问题进行总结.在开发中为了用户能有更好体验,对网络请求多采用异步请求的方式,更有甚者对请求数据做了本地缓存.图片作为 app 中最常见的展现形式无疑是最耗流量的,对图片原创 2020-10-16 11:53:28 · 451 阅读 · 1 评论 -
iOS 沙盒机制
iOS 每个 APP 都有自己的存储空间,这个存储空间叫做沙盒. APP可以在自己的沙盒中进行数据存取操作,但不能访问其他 app 的沙盒空间.对 app 做一些数据存储或者文件缓存时,一般都保存在沙盒中.沙盒机制简介目录结构沙盒机制根据访问权限和功能区别分为不同的目录: document,library,temp,.app, library又包含 caches 和preferences.document: 保存应用运行时生成的需要持久化的数据iTunes会自动备份该目录。苹果建议将在应用程序中原创 2020-10-16 11:52:10 · 778 阅读 · 0 评论 -
iOS 实现电子签名
实现原理使用拖动手势记录获取用户签名路径.当用户初次接触屏幕,生成一个新的UIBezierPath,并加入数组中.设置接触点为起点.在手指拖动过程中为UIBezierPath添加线条,并重新绘制,生成连续的线.手指滑动中不断的重新绘制,形成签名效果.签名完成,转化为UIImage保存.class CXGSignView: UIView { var path: UIBezierPath? var pathArray: [UIBezierPath] = [] overr原创 2020-10-16 11:51:18 · 953 阅读 · 0 评论 -
记录一次树形分级列表的实现
项目需求需要对用户根据推荐人的不同进行树形结构显示.使用 tableView 实现这一需求.实现思路使用 tableView 实现先树形结构(不同的 cell 样式显示不同的等级),当点击 cell 时,判断当前点击的 cell 是否存在下一级,是否已经是打开状态.如果存在下一级,关闭状态,则通过插入 cell 实现点击展开树形图的效果.如果存在下一级且已经展开则通过删除 cell的方式实现树形图的关闭效果.具体实现定义数据结构类型,如下:class YTTTreeListModel: NSO原创 2020-10-16 11:50:00 · 187 阅读 · 0 评论 -
SDWebImage 源码一览
SDImageCacheSDMemoryCache (只针对 iOS, 其他系统与 NSCache 一样)SDMemoryCache: 继承于NSCache. 声明三个私有属性: config, weakCache, weakCacheLockconfig: SDImageCacheConfig 缓存配置信息weakCache: NSMapTable<KeyType, ObjectType> 缓存信息weakCacheLock: dispatch_semaphore_t 锁,保..原创 2020-10-16 11:48:55 · 159 阅读 · 0 评论 -
swift 获取图像指定点的颜色(UIColor)
在 iOS 开发中,有时候需要获取图像中某个像素点的颜色,返回 UIColor 值。网上收集资料,参考各种方案,最后总结如下:/// 获取图片触摸点颜色////// 参考资料/// https://blog.csdn.net/huangfei711/article/details/76189655/// - Parameters:/// - image: 要获取颜色的图片/// - point: 触摸点/// - Returns: 获取到的颜色func cxg_getPointC原创 2020-10-16 11:46:31 · 1060 阅读 · 0 评论 -
Keychain的介绍和使用
什么是 Keychain?iOS 的 keychain 服务提供了一种安全的保存私密信息(密码,序列号,证书等)的方式,每个ios程序都有一个独立的keychain存储。用于储存一些私密信息,比如密码、证书等等,Keychain里保存的信息不会因App被删除而丢失,在用户重新安装App后依然有效。同样也适用于应用之间数据共享。我们可以把KeyChain理解为一个Dictionary,所有数据都以key-value的形式存储,可以对这个Dictionary进行add、update、get、delete原创 2020-10-16 11:44:06 · 1566 阅读 · 0 评论 -
iOS音视频播放-AVPlayer简单使用
按公司需求需要对音频文件进行后台播放,借此机会对音频播放做了个总结.主要针对 AVPlayer 进行详细说明.iOS 各播放器比较名称使用环境优点确点System Sound ServicesAVFoundationC语言的底层写法,节省内存支持的格式有限,音量无法通过音量键控制,而且播放方式单一。AVAudioPlayerAVFoundation抒写效率更高,基本上支持所有的音频格式,对播放的控制,如循环播放,声音大小,暂停等比较方便。对内存的消耗会多些。不原创 2020-10-16 11:38:35 · 30705 阅读 · 0 评论 -
iOS 总结
iOS是由苹果公司开发的移动操作系统.iOS 简介开发语言Object-C通常写作ObjC或OC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言。OC 完全兼容 C语言.面向对象语言(C 语言面向过程).是MAC OSX和IOS开发的基础语言。Swift苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C*共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序.Swift和Objective-C共用一套运行时环境原创 2020-10-15 11:36:33 · 169 阅读 · 0 评论 -
音乐播放器图片旋转-会旋转的 UIImageView
通过给继承与 UIImageView 的类 CXGImageView 添加 CABasicAnimation 转动动画,实现播放器图片转动效果.主要提供三个方法: startRotating, stopRotating,resumeRotatestartRotating/// 开始动画func startRotating() { let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation") rotat原创 2020-10-13 15:29:41 · 521 阅读 · 0 评论