IOS

iOS简单抽屉效果的实现方法

2022-08-07
本文实例为大家分享了iOS实现简单抽屉效果的具体代码,供大家参考,具体内容如下 实现思路及步骤: 1.首先准备要滑动的view #warning 第一步 - (void)addChildView {     // left     UIView *leftView = [[UIView alloc] initWithFrame:self.view.bounds];     leftView.backgroundColor = [UIColor greenColor];     [self.vie

混合栈跳转导致Flutter页面事件卡死问题解决

2022-08-07
目录 问题来源 问题难点 问题定位 问题确定 问题解决 总结 问题来源 在我们升级Flutter2.5后,测试在走整个业务流程中发现了有页面卡死现象,于是给我提了一个BUG. 在xx页面多次操作后,页面卡死,页面还可以滚动但是无法跳转,点击长按事件都失效了. 在我多次测试后发现,确实存在这个问题,而且老版本也都存在. 问题难点 复现难 问题定位 最开始,我先确定了失效情况下,事件源头有没有正确发送,所以,先在_dispatchPointerDataPacket方法上添加了断点.结果发现都是正常.

iOS Objective-c实现左右滑动切换页面

2022-08-07
本文实例为大家分享了iOS Objective-c实现左右滑动切换页面的具体代码,供大家参考,具体内容如下 ScrollView + n个view 1.storyboard布局一个ScrollView 2.拖出两个输出口,定义三个属性 @property (weak, nonatomic) IBOutlet UIScrollView *XMScrollView; @property (weak, nonatomic) IBOutlet UIView *scrollContentView; ///

Objective-C const常量的优雅使用方法

2022-08-07
目录 正文 Objective-C 的常量声明方式 在 Objective-C 中使用 let 来声明常量 正文 在编写代码时经常要使用常量,来替代 magic number.比较简单的做法是通过预处理指令 #define 来实现. #define ANIMATION_DURATION 0.3 上述预处理指令会在编译时的预处理阶段会将代码中 ANIMATION_DURATION 字符串替换为 0.3.这种定义常量的方式比较简便,但是存在两个问题: 丢失了类型信息. 若该预处理指令声明在头文件中,

iOS实现简易的抽屉效果

2022-08-06
本文实例为大家分享了iOS实现简易的抽屉效果的具体代码,供大家参考,具体内容如下 1.添加需要实现抽屉效果的三个视图,这里需要注意主视图需要放在最后添加 // 左边视图  ... // 右边视图   ... // 主视图     UIView *mainView=[[UIView alloc]initWithFrame:self.view.bounds];     mainView.backgroundColor=[UIColor greenColor];     _mainView=mainV

iOS开发实现搜索框(UISearchController)

2022-08-06
最近自己在写一个APP,其中需要实现搜索框搜索功能,于是乎就想写篇博客介绍下UISearchController和搜索框的实现. 我写的是一个天气预报APP,直接以我APP中的源代码来详细介绍下搜索框的实现. 注:在iOS 8.0以上版本中, 我们可以使用UISearchController来非常方便地在UITableView中添加搜索框. 而在之前版本中, 我们还是必须使用UISearchBar + UISearchDisplayController的组合方式. 初始化UISearchCont

iOS实现UIButton的拖拽功能

2022-08-04
本文实例为大家分享了iOS实现UIButton拖拽功能的具体代码,供大家参考,具体内容如下 在APP界面中,把资讯等功能设置为悬浮的Button并且能够让用户自己拖拽调整位置很常用.这里实现一下上述的功能,我们先看一下效果图 这里给UIButton的拖拽的范围进行了设定,超过了这个区域则强行结束拖拽. 我们知道UIButton是自带手势事件的,但我们不选择使其自带的手势事件来响应拖拽,其原因为自带的手势不好得到和控制拖拽的状态.我们创建一个 UIPanGestureRecognizer 添加给U

iOS简单实现轮播图效果

2022-08-02
本文实例为大家分享了iOS简单实现轮播图效果的具体代码,供大家参考,具体内容如下 平常在开发过程中,首页的轮播图总是少不了,轮播图我们都知道肯定是要使用 UIScrollView ,难点就在最后一张图片被滑动时,如何回到第一张图片以及第一张滑动到最后一张.我们可以使用如下方式实现轮播图,在划到3后面的1后,设置 contentOffset 回到最先的1,并设置 pageControl ,即可达到效果 (从1划到3也同理) 看一下效果: 完成这种轮播图,我们的 View 需要如下的属性和方法 @i

iOS阅读器与直播的控件重叠滑动交互详解

2022-08-02
目录 场景一 场景二 场景三 场景一 进行一个阅读器项目的开发时,遇到了一个问题, 需要在点击绿色区域时弹出一个菜单,因此在该区域加了一个View, 然而,当在这个区域滑动时,滑动手势被绿色区域拦截,手势无法传递到下面的 UIPageViewController 的 View 上 描述 阅读器上方,摇啊摇,出来一个绿色的菜单 要求可以点,也可以拖动 拖动是下方 UIPageViewController 的事情. 手势被绿色视图挡住了,需要一个透传 思路: 把绿色视图的 hitTest View

iOS Lotusoot模块化工具应用的动态思路

2022-08-01
目录 组件化的要点-约定 场景 调用服务 注册服务 动态思路 代码实现 1.MachO 获取命名空间 2.包名+类名的验证 下文,写的是 Swift 依赖 OC 库,没有命名空间 组件化的要点-约定 个人觉得 例如,URL 路由的注册,就是把约定的信息,传过去.作为服务. Lotusoot 包含服务调用,短链的注册与调用 下面着重讲服务调用,短链略 场景 project 有两个依赖 A (协议) 和 B (协议的实现者,提供服务) project 引用 A,知道了协议信息 project 不引用

iOS两丫技术之UILabel性能不够的解决方法

2022-07-31
目录 Async View Async Layer RunLoop 触发 事件的保存 YYLabel 主要参照 YYKit YYKit 博大精深,就像少林武功 Async View 为了异步 + runloop 空闲时绘制, 因为苹果的 UILabel 性能不够 6 Async Layer 思路: UI 操作,必须放在主线程, 然而图形处理,可以放在子线程, ( 开辟图形上下文,进行绘制,取出图片 ) 最后一步,放在主线程,就好了 layer.contents = image Custom Vi

iOS开发常用线程安全锁

2022-07-26
目录 正文 原子属性 OSSpinLock - 自旋锁 os_unfair_lock - 互斥锁 NSLock - 互斥锁 NSCondition - 互斥锁 NSConditionLock - 互斥锁 NSRecursiveLock @synchronized Semaphore信号量 pthread_mutex 读写锁 正文 多线程开发,就会有资源抢占的情况,导致出现我们意想不到的数据问题,我们就需要对数据进行加锁,已保证线程安全. 锁主要分为两大类自旋锁和互斥锁. 自旋锁:自旋锁已经被别的

iOS开发探索多线程GCD队列示例详解

2022-07-26
目录 引言 进程与线程 1.进程的定义 2.线程的定义 3. 进程和线程的关系 4. 多线程 5. 时间片 6. 线程池 GCD 1.任务 2.队列 3.死锁 总结 引言 在iOS开发过程中,绕不开网络请求.下载图片之类的耗时操作,这些操作放在主线程中处理会造成卡顿现象,所以我们都是放在子线程进行处理,处理完成后再返回到主线程进行展示. 多线程贯穿了我们整个的开发过程,iOS的多线程操作有NSThread.GCD.NSOperation,其中我们最常用的就是GCD. 进程与线程 在了解GCD之前

iOS xcconfig编写示例教程

2022-07-26
目录 引言 注释 include导入其他设置 变量 优先级(由高到低) 引言 xcconfig文件的语法比较简单,每个配置文件都由一系列键值分配组成,这些键值分配具有以下语法: BUILD_SETTING_NAME = value 注释 xcconfig文件只有一种注释方式,就是//. include导入其他设置 在创建xcconfig文件的时候,可以根据需求,创建多个.也就意味着,可以通过include关键字导入其他的xcconfig内的配置.通过include关键字后接上双引号,如下例: #

iOS开发探索多线程GCD常用函数

2022-07-24
目录 正文 单例 栅栏函数 调度组 dispatch_group_t 信号量 dispatch_semaphore_t dispatch_source 总结 正文 前篇文章我们了解了GCD的任务的原理,接下来我们在探索一下GCD中我们开发常用的函数 单例 下面我们从源码中看一下我们创建单例的时候使用的dispatch_once,都做了什么,是通过什么操作保证全局唯一的 void dispatch_once(dispatch_once_t *val, dispatch_block_t block)

iOS开发retina屏幕下的点与像素关系详解

2022-07-24
目录 引言 I iOS中点与像素有什么关系? II 图片使用的相关注意事项 2.1 推荐使用png格式 2.2 关于图像的实例化 2.3 动画结束之后清除帧动画数组 III 设置状态栏字体颜色 3.1 方式一 3.2 方式二 see also 引言 提交app store的时候 需要一张1024*1024的 如果不设置这两种的尺寸启动页的话,在4英寸.3.5英寸的设备上展示不了启动页,app 的高度也默认都是矮的960px.** 注意@3x 提供给开发的px 为12422208 ,但真实的px

iOS开发探索多线程GCD任务示例详解

2022-07-23
目录 引言 同步任务 死锁 异步任务 总结 引言 在上一篇文章中,我们探寻了队列是怎么创建的,串行队列和并发队列之间的区别,接下来我们在探寻一下GCD的另一个核心 - 任务 同步任务 void dispatch_sync(dispatch_queue_t queue, DISPATCH_NOESCAPE dispatch_block_t block); 我们先通过lldb查看其堆栈信息,分别查看其正常运行和死锁状态的信息 我们再通过源码查询其实现 #define _dispatch_Block_

ios开发Flutter之数据存储

2022-07-20
目录 偏好存储 sqlite 创建表 数据插入 数据查询 数据修改 删除表 删除数据库 偏好存储 shared_preferences 类比iOS中的UserDefaults,使用方法比较简单. 地址戳这里 pub get之后会自动出现一个这样的文件generated_plugin_registrant.dart 数据存储: void _incrementCounter() { //创建对象,用于操作存储和读取. SharedPreferences.getInstance().then((Sha

fastlane自动化打包iOS APP过程示例

2022-07-20
目录 概述 fastlane的安装 fastlane的配置 到你的iOS项目下,执行初始化命令: 打包并自动上传 App 到蒲公英 安装蒲公英的 fastlane 插件 打包上传到Testflight 概述 APP自动化打包常见的主流工具有Jenkins.fastlane.Jenkins功能强大,但是需要的配置也比较多,团队较大的可以优先考虑,fastlane是用Ruby语言编写的一套自动化工具集,比较轻便,配置简单,使用起来也很方便.本文会详细的介绍fastlane从安装到上传APP到蒲公英的

iOS StoreKit 2 新特性盘点解析

2022-07-19
目录 一.背景 二.物料 三.StoreKit 1 存在的问题 四.StoreKit v2 新特性 五.StoreKit 2 API 5.1 只支持 Swift 开发 原始获取商品方式 新获取商品方式 5.2 新 API 5.2.1 Product 5.2.2 Transaction History 5.2.3 Subscription status 5.2.4 show manager subscriptions 5.2.5 request refund API 小结: 六.Server to