ReyZhang
专注移动ios平台的软件开发,多年的一线研发经验,实战经验丰富,只为你呈现有价值的信息。据说关注我的人,都薪资翻倍了[笑脸]
展开
-
ios 实现PDF,Word,Excel等文档类型的读取与预览
最近正在研发的项目有一个需求: 允许用户将iCloud中的文档上传,实现文件的流转。以前接触的项目对于资料类的上传大多是仅限于图片与视频的。对于文档类(Word, Excel, PDF, Text等), 因苹果的沙箱环境限制,想要读取文件是无法实现的。目前虽然可以支持选择文件,但只能通过访问iCloud上的云文档来实现。所以,要在应用中对文档类进行上传流转,首先需要将本地文档存储到你的iCloud中,再通过读取iCloud的云文档来获取。原创 2023-10-18 11:45:23 · 2430 阅读 · 1 评论 -
使用pod package打包framework 实现组件的二进制化
随着项目的多次迭代,功能越来越多,项目也越来越大,相应的编译时间也越来越长。 亟需要方案来解决项目日益变大,模块变多,功能藕合变紧密的问题。 对项目进行模块化,组件化迫在眉睫。可见,组件化是项目变大后的必经选择。那组件化能给项目带来哪些优势,又有哪些不足呢? 接下来本文会就组件的拆分,组件的创建,组件的二制化来介绍项目组件化的整个过程。组件化是不是所有的项目都适用组件化 ?答案是否定的。 只有当项目到了一定规模,各功能模块日趋增多,此时可考虑对项目进行组件化的重构。我们先来了解一下组件化到底有哪些原创 2022-01-07 18:26:12 · 2935 阅读 · 3 评论 -
ios 自制Framework 获取指定bundle并读取里面的资源
应用中某些模块需要组件化,组件化后的工程最后会做二进制化处理,打包成.framework文件。 今天简单聊一下在主工程或其他组件中是如何访问自制组件.framework中的bundle,及其中资源的。访问应用资源我们知道苹果应用是基于沙盒机制, 打包生成.ipa后的资源会被放到沙盒的根目录下。通常在主工程中我们是这样访问资源的:NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"plist"]原创 2021-12-02 13:48:22 · 2921 阅读 · 0 评论 -
ios apns推送 离线锁屏语音播报
公司正在研发的一款App,需要在进行消息推送时支持语音播报。 具体要求:- 离线:App在用户未打开时,可收到消息推送- 锁屏:用户在设备锁屏状态下,仍可收到消息推送- 语音播报:收到消息推送时可同时进行语音播放苹果的APNs消息推送, 支持在应用未打开及设备锁屏状态下收到推送。 而同时进行语音播报,则需要做一些特殊处理。 目前语音播报的场景有两种: 一种是固定音频的播放, 一种是需要动态合成后的音频播放。如支付宝或微信收款的消息提醒: “支付宝/微信成功收款100元” 。原创 2023-04-24 14:23:26 · 790 阅读 · 5 评论 -
ios 开发问题小集 [持续更新]
iOS开发中遇到的问题整理, 短篇的介绍问题出现的原因及解决方案原创 2023-11-09 09:16:20 · 1671 阅读 · 6 评论 -
ios 三方库的使用之 MJExtension
调用接口从服务端拿数据 (数据获取)拿到数据进行数据模型转换 (数据加工)将转换后的数据模型通过UI控件展示 (数据展示)即:数据获取->数据加工->数据展示数据加工)的过程是其中的重要一环。iOS开发中的模型指的是数据模型,是用来存放数据的对象。原创 2023-09-17 20:53:18 · 822 阅读 · 2 评论 -
ios 三方库的使用之 YYLabel
如何设置内容显示的最大行数在展示文本时,我们的UI给的空间有限,需要对长文本进行截取。 那么通过YYLabel控件,如何控制内容的显示呢?通过尝试,给YYLabel指定numberOflines属性来设置并不起作用。 需要通过另外的方式来设置。我们知道,除了通过attributeText来给YYLabel赋值文本外,我们还可以通过 YYTextLayout 来封装文本内容的富文本样式(颜色,大小,字体等)的方式来赋值。YYTextLayout对象的创建,需要依赖一个叫YYTextContainer的对原创 2021-12-04 18:46:44 · 1199 阅读 · 0 评论 -
ios 三方库的使用之 YYTextView
在进行社交类应用开发时,要求内容除了基本的文本内容外,还需要包含话题、邮箱、链接、用户 等信息,而且需要在录入时就能进行区分。 所以单纯的使用UITextView控件已经不再满足当前的需求, 经过技术调研,发现YYTextView控件完全满足所有的需求。 故而方案就选择了YYTextView控件。 如下要罗列介绍的就是在本人在开发过程中遇到的场景,以及这些场景使用YYTextView控件是如何进行实现的。原创 2021-11-16 09:22:59 · 1440 阅读 · 0 评论 -
UITextField & UITextView 使用小技巧
本文总结了在使用 UITextField & UITextView 时遇到的一些问题及场景,以及对应的解决方案。目前覆盖的面可能不太全,后面会持续更新…原创 2023-09-12 10:21:30 · 610 阅读 · 1 评论 -
iOS 检查及获取相机、麦克风、相册、位置等权限
我们知道,苹果对于应用访问用户的硬件设备时,有严格的访问权限。 iOS开发者在需要使用用户的设备前,需先检查一下各硬件的授权状态。 此外,我们还需要在应用程序的info.plist中配置访问硬件的使用声明 ( 增加需要授权key值并填写相应的权限使用声明)。 如果未添加使用描述,那么我们通常会收到如下崩溃信息:“This app has crashed because it attempted to access privacy-sensitive data without a usag原创 2022-05-05 14:52:17 · 3922 阅读 · 0 评论 -
UICollectioView 使用集合
我们在做滚动数据展示时,常用到的UIKit库中的控件就是如下几种:。其中与都是直接继承自在未出现之前,我们的应用程序中基本都在使用控件,它使用简单易上手。对于纵向的数据展示,使用控件完全可以轻松满足我们的需求, 但对于横向的数据展示,我们只能选择使用UIScrollView来实现。这种情况在控件出现之后得以解决。除了支持纵向布局外,还可以横向布局,也能实现左右表格高度不同的流式布局,同样也能复用表头和表脚非常的强大。可以说就是为了代替而生。允许定制的布局可能非常复杂(例如:每个单元的大小不同)原创 2023-09-04 09:54:07 · 420 阅读 · 3 评论 -
ios 组件化实施过程
组件化的拆分组件与组件之间如何进行通讯(路由)从Cocopods拉取代码的过程远程索引库里很多的.spec文件,该文件记录了很多内容,如用户名,框架名称,描述,框架的地址Podfile 文件是拉取框架源码的配置文件, pod install 命令会根据Podfile中配置来拉取框架源码Pod setup 命令会把远程索引库拷贝到本地,在本地还有一个检索文件执行pod search命令过程,并不是直接从远程索引库查找,它是从本地的检索文件,该检索文件是以键值对原创 2021-11-29 11:44:38 · 900 阅读 · 0 评论 -
.podspec 文件使用详解
podspec中spec的全称是“”,说明书的意思。顾名思义,这是用来描述你这个pod的说明信息。.podspec是cocoapods的一种文件格式,有一套自己的语法,我们可以到cocoapods官网进行详细了解。原创 2022-03-04 14:26:14 · 1090 阅读 · 0 评论 -
ios 声网agora 音视频直播场景下的集成总结
项目中需要用到音视频会议/直播的场景, 自研比较耗时,且没有技术积累,实现难道较大。所以第三方成为当前选型的首选。通过调研,目前支持这类型技术的三方,诸如:阿里、腾讯、anyRTC、声网RTC。每月1w分钟的免费用量, 对于项目初期,这个免费量应该够用支持更多的使用场景更完善的集成文档与demo几行代码即可完成接入,SDK使用比较友好。原创 2023-08-22 10:34:00 · 1075 阅读 · 3 评论 -
ios animation 动画学习总结
动画一直是 iOS 开发中很重要的一部分。设计良好,效果炫酷的动画往往能对用户体验的提升起到很大的作用,在这里将自己学习 iOS 动画的体会记录下来,希望能对别人有所帮助。iOS 的动画框架,即 CoreAnimation,本身十分庞大和复杂,这里暂时分两个部分进行介绍,分别是 UIView 动画 和 CALayer 动画。1、UIView Animation简单动画对于 UIView 上简单的动画,iOS 提供了很方便的函数:+ animateWithDuration:animations原创 2021-12-11 12:47:55 · 1854 阅读 · 0 评论 -
ios websocket 使用详解
负载数据的长度为扩展数据及应用数据之和,扩展数据的长度可能为0,因而此时负载数据的长度就为应用数据的长度。Extension data: x位,如果客户端与服务端之间没有特殊约定,那么扩展数据的长度始终为0,任何的扩展都必须指定扩展数据的长度,或者长度的计算方式,以及在握手时如何确定正确的握手方式。如果存在扩展数据,则扩展数据就会包括在负载数据的长度之内。即:websocket分为。Application data: y位,任意的应用数据,放在扩展数据之后,应用数据的长度=负载数据的长度-扩展数据的长度。原创 2023-04-04 11:34:50 · 1278 阅读 · 0 评论 -
SFSafariViewController 加载的网页与原生oc之间的交互
问题描述:工作中碰到这样一种场景, WebApp 已经实现了IM即时通讯及基于WebRTC实现的音视频会议,音视频聊天。 也是半路接手的项目,项目整体是使用WKWebView套壳加载h5 页面实现(后期过审还有很多路要走) 。 h5与原生交互的方案使用的javascriptCore(具体如何使用,不在本文之内)。 大部分的交互工作都是可以得到解决,唯独需要调起WebRTC引擎进行音视频会议,音视频聊天时,WKWebView就无法再提供支持了。但在手机的Safari浏览器中加载的WebApp在使用音视频这原创 2021-11-16 11:53:41 · 1673 阅读 · 3 评论 -
graphhopper-ios 编译过程详解
GraphHopper 是一个快速且高效的路径规划引擎,它默认使用和GTFS数据, 也可以导入其他数据源。它可以用作java库或独立的web服务器,去计算两个或多个点之间的线路的距离,时间,转弯指令和许多道路属性。除了“A-to-B”的路径规划能力之外,它还支持“snap to road”、等时线计算、移动导航等。是的oc版本,它使用j2objc将.java源代码转换为代码, 以供iOS平台的开发者来使用。该库在成功编译后会生成一个的静态库文件。接下来介绍该库在终端命令行模式下的编译过程。原创 2022-10-27 17:06:23 · 1410 阅读 · 6 评论