- 博客(637)
- 收藏
- 关注
原创 遇到的几个iOS问题
跑模拟器的时候遇到这个报错,解决方法 处理办法:删除升级之前的模拟器缓存,重启模拟器。删除路径:~/Library/Developer/CoreSimulator/Cache注意:后面可能还会复现这个报错,M的电脑尤其容易出现,然后再次删除,重新打开模拟器即可。
2024-08-18 16:20:19 268
原创 封装了一个iOS 分页嵌套滚动框架
并重写手势的代理方法//是否支持多手势触发,返回YES,则可以多个手势一起触发方法,返回NO则为互斥.//是否允许多个手势识别器共同识别,一个控件的手势识别后是否阻断手势识别继续向下传播,默认返回NO;如果为YES,响应者链上层对象触发手势识别后,如果下层对象也添加了手势并成功识别也会继续执行,否则上层对象识别后则不再继续传播//一句话总结就是此方法返回YES时,手势事件会一直往下传递,不论当前层次是否对该事件进行响应。
2024-08-11 22:18:42 437
原创 iOS中分页视图滚动和全屏返回手势冲突的问题
1 我们这个页面是一个左右分页的容器页面,可以左右滚动分页,然后app整体之前是支持右滑返回的,这样就遇到一个问题,就是我们在分页的最左边的时候,滑动的时候,因为分页的scrollView的滑动手势是在最上层的左右滑动手势,所以,在自然情况下,我们滑动的时候,是响应scrollView的滑动手势的,不会响应navigationController的滑动返回的手势如何让系统响应返回手势呢,这就用到了。
2024-08-11 17:48:17 322
原创 iOS自定义分页滚动视图生命周期的控制
就是我们在横向滚动分页视图的的时候,触发横向scrollView 的scrollViewDidscroll 代理方法,然后获取到我们我们将要滚动到的那一个分页,然后执行将要获取的分页的willAppear, 当前分页的viewDidAppear,并设置将要展示的will-appearIndex, 等到滚动结束的时候,执行willapperaindex位置的didAppear,这里有两个重要的点1 因为我们是在 scrollViewDidscroll 执行willappear的。
2024-08-10 12:38:00 202
原创 iOS 评论弹窗手势问题
给slidePopupView添加一个滑动手势并设置代理我们在 shouldReceiveTouch 代理方法中 通过 touch.view 判断 是否是滑动tableView, 如果touch.view 是tableView , isDragScrollView 就是YES, 否则就是NO并且要 shouldRecognizeSimultaneouslyWithGestureRecognizer 方法中 gestureRecognizer == self.panGesture。
2024-07-28 21:42:35 461
原创 shouldReceiveTouch 和 gestureRecognizerShouldBegin 的差异
shouldReceiveTouch 方法中,获取到的touch.view是手指触摸到的最上层的视图,由此可见,我们如果想要获取手指触摸的视图,必须要通过shouldReceiveTouch 方法,gestureRecognizerShouldBegin 获取到的是 手势添加到的视图。方法获取到我们当前滑动的是弹窗中的tableView,还是弹窗本身的视图。用法,比如我们在类似抖音评论弹窗视图中,就可以通过这个。
2024-07-21 11:41:41 267 1
原创 iOS中多个tableView 嵌套滚动特性探索
这个时候就有一个问题,就是正常的情况下,如果我们滑动内部 小的tableView, 如果开始滑动的时候, 内部的tableView 没有滚动。如果我们开始滑动内部小的tableView的时候,tableView在该方向上已经滚动到头了,则直接执行外层tableView的滚动,到尽头,我们滑动其滚动到尽头的时候,根据上面的机制,就会带动外层的tableView滚动,这是我们不想看到的,如果内部的滚动到边界的时候,外层的tableView已经滚动到头了,则内部的tableView。
2024-07-07 20:42:31 465
原创 iOS UITableView自带滑动手势和父视图添加滑动手势冲突响应机制探索
我们有时候会遇到这样的一个交互场景:我们有一个UITableView放在一个弹窗中,这个弹窗可以通过滑动进行展示和消失(跟手滑动的方式),然后这个UITableView放在弹窗中,并且可以滚动,展示一些内容,比如商品信息,评论,(类似抖音的评论弹窗),并且下滑的时候,如果tableView已经滑动到了顶部,就可以响应滑动手势,继续向下滑动弹窗。
2024-07-07 13:49:08 1330
原创 封装了一个iOS滚动厨窗效果
我们要实现如图的厨窗效果,不能通过在tableView底部添加一个背景图片的方式,因为这需要修改整个tableView的背景色为透明,影响到的范围太大,只能将这个效果局限在这个cell 中,然后通过监听tableView的滚动的方式来实现。
2024-06-29 18:39:01 1147
原创 iOS shouldRecognizeSimultaneouslyWithGestureRecognizer 调用机制探索
shouldRecognizeSimultaneouslyWithGestureRecognizer 经常会看到,但是一直没有弄清楚其中的原理和运行机制,今天专门研究下其运行规律我们准备三个视图,如下,红色的是绿色视图的父视图,绿色视图是蓝色视图的父视图,为了探索 shouldRecognizeSimultaneouslyWithGestureRecognizer并且,每一个视图中都有如下代码。
2024-06-28 23:32:18 658
原创 iOS 实现类似抖音滚动效果
整体上我们使用tableView实现,为了预留内容的缓冲,我们将tableView 的contentinset设置为上面一个屏幕的高度,下面一个屏幕的高度,左右为0,这样保证我们滚动过去的时候都是准备好的内容然后就是滑动效果的实现了,主要就是我们在scrollViewWillEndDragging方法中获取到停止拖动(手指离开)时候的速度。在scrollViewDidEndDragging 方法中通过translationInView方法判断当前滑动的方向,
2024-06-26 21:14:07 753 2
原创 封装了一个iOS联动滚动效果
就是在 didEndDisplayingCell 方法中通过indexPathsForVisibleItems 接口获取当前可见的cell对应的indexPath, 然后获取到item最小的那一个,即可,同时,还要在 willDisplayCell 方法中直接设置标题的选中属性,否则由于重用机制,导致选中的展示错乱。
2024-06-25 21:52:04 421
原创 iOS调整collectionViewCell顺序
就是设置collectionView调整顺序的代理方法,这里要注意一点调整过代理方法之后,一定要修改数据源,否则导致错乱。还有就是在collectionView上面添加一个长按手势,在长按手势的不同阶段,调用collectionView 调整顺序的系统方法 beginInteractiveMovementForItemAtIndexPath等等。
2024-06-10 17:19:28 563
原创 使用贝塞尔曲线实现一个iOS时间轴
就是通过贝塞尔曲线画出时间轴的圆环的路径,然后使用CAShaper来渲染UI,再通过animation.beginTime = [cilrclLayer convertTime:CACurrentMediaTime() fromLayer:nil] + circleTimeOffset 来设置每个圆环的动画开始时间,,每个地方都是有两层layer的,一层是底部灰色样式的(即没有到达时候的颜色)一层是到达得阶段的颜色,到达的layer在上面,如果要开启动画,我们就得先将。
2024-06-09 20:53:40 612 1
原创 封装了一个简单理解的iOS竖直文字轮播
就是持有两个视图,并且两个视图同时改变origin.y动画结束之后,判断哪个视图是在上面并且看不到的,则将该视图移动到底部,并且该视图展示下一跳内容在开始下一轮动画。
2024-06-06 23:45:32 446
原创 封装了一个仿照抖音评论轮播效果的iOS轮播视图
一个是willShowView,在一次动画过程中,我们改变current View的frame,同时改变willShowView的frame,同时,需要改变currentVIew 的transform.y不然的话,currentView里面的内容就没有缩放效果了,看起来就是单纯的展示不下的感觉,动画结束之后,将currentView指向willView, willView指向currentView, 同时,将刚刚消失的视图,放到底部,等待下次动画展示。
2024-06-06 21:10:46 569
原创 Couldn‘t determine repo type for URL: `https://cdn.cocoapods.org/`: execution expired
在podfile中添加如下代码。
2024-06-05 21:56:08 248
原创 封装了一个使用UICollectionViewLayout 实现的吸附居左banner图
实现的原理就是通过自定义UICollectionView layout,然后。这里是之前写的一个,使用自定义视图实现的,没有使用。UICollectionViewLayout 实现。设置减速速率是快速就可以达到吸附的效果。
2024-06-02 18:35:13 269
原创 iOS hitTest 机制用处之二-----使用pointInside方法
由上面的hittest机制可以知道,如果我们想扩大一个视图的点击范围,或者让一个超出父视图的子视图可以点击,我们既可以通过重写hittest方法实现,即在hittest 方法中去掉pointinside方法的判断,同时也可以通过重写pointinside 方法来实现。重写point inside ,如果是扩大点击范围,我们就判断新的rect是否包含point, 如果是子视图超出父视图可以点击,我们就将point转换为相对于子视图的point,然后判断是否在子视图中。扩大点击范围,或者是超出父视图可以点击,
2024-06-02 00:33:08 688
原创 iOS Hittest 机制和实际应用之一 hittest方法
hitTest的原理就是,当我们点击的时候,会触发 window的hittest方法,在该方法中会首先使用point inside方法判断点击的地方是否在window范围内,如果在的话,就倒序遍历姿子视图,然后将point转换为相对于子视图的point,然后在子视图再执行hittest,里面执行同样的流程。如果不在window范围内的话,就返回一个nil这里写下实现逻辑。
2024-06-01 11:21:56 538
原创 封装了一个iOS对号成功动画
对号动画完成之后,整个对号不见了,后来经过仔细调查,发现,是自己初始化 checkLayer的时候,将strokeEnd属设置为0了,注意,虽然我们是通过"strokeEnd"设置的动画,但是我们进行动画之后,并不会真正的改变layer.strokeEnd属性的值,所以我们初始化对号layer的时候,还是要将strokeEnd设置为1。路径的效果,这里注意,这个过程中过遇到过一个问题,就是。基本思路其实很简单,就是通过贝塞尔曲线画出路径,然后。
2024-05-31 22:03:07 462
原创 封装了一个iOS中间放大的collectionView layout
原理:就是首先确定一个放大和缩小系数和原大小对应的基准位置,然后根据距离每个布局属性到视图中心的距离和基准点到中心的距离的差距/基准点到中心的距离, 计算出每个布局属性的缩放系数。下面这一段是计算放大系数的核心逻辑。
2024-05-25 13:57:56 256
原创 实现多读单写的原理
但是我们使用dispatch_syn的同步方法,为什么能达到多读的效果呢,就是因为,我们所说的同步执行,是指在同一线程里面来说的,当在多个线程中的时候,就没有同步的概念了。单读就不说了,因为栅栏函数就是有这样的特性,需要等之前的block执行完毕,之后的block需要等栅栏函数执行完毕。由此可见,在多线程中,syn并不能达到同步的效果。我们通过以下代码进行验证。
2024-05-23 08:39:15 181
原创 iOS 使用栅栏函数实现多读单写
在队列中,barrier块必须单独执行,不能与其他block并行。这只对并发队列有意义,并发队列如果发现接下来要执行的block是个barrier block,那么就一直要等到当前所有并发的block都执行完毕,才会单独执行这个barrier block代码块,等到这个barrier block执行完毕,再继续正常处理其他并发block。在上面的代码中,setter方法中使用了barrier block以后,对象的读取操作依然是可以并发执行的,但是写入操作就必须单独执行了。
2024-05-23 08:22:37 319
原创 封装了一个iOS环形加载动画和成功对号效果
的话,就会造成一个后果,就是,从七点到终点和走过的line中间的地方会有黑色,所以这里要特别注意,fillColor 设置成clearcolor。这里要注意一个地方,如果我们这里不设置。如果不设置的话,效果就是下面的样子。
2024-05-22 22:07:07 353
原创 封装了一个iOS水平方向瀑布流布局
当前最小的x 所在的列,其实原理和竖直方向上的是相同的。只不过这里记录的列是水平方向的,同时要记录下。思路就是和竖直方向上的瀑布流布局是一样的,子类layout 中的代码。父类layout中的代码。
2024-05-19 16:10:33 359
原创 iOS 实现视图遮罩效果
这时候,我们可以通过设置该视图layer.mask = layerb来实现,需要注意的是,这里的layerb必须要设置backgroundColor,渐变layer有colors,否则达不到效果。有时候,我们会遇到这种需求,只讲视图的某个部分展示出来。
2024-04-29 20:28:03 1029
原创 iOS 获取到scrollView停止拖动时候的速度
在 - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset。方法中得到手势离开的时候的速度。
2024-04-28 21:36:52 930
原创 Unable to determine the platform for the `LiuBoapp` target.
今天再执行pod install 的时候, 遇到了这个问题。解决方法,将这一样代码放开就行了。后面发现podfile 中的。
2024-04-27 21:14:08 202
原创 drb requires Ruby version >= 2.7.0. The current ruby version is 2.6.10.210.
今天安装cocoa pod ,执行命令。
2024-04-27 20:40:59 722 4
原创 两个列表联动修改选中标题的时机
这个时候,我们有多种实现方案,其中一种就是在scrollVIewdidscroll 方法中执行,需要注意,这种实现从效果上没什么问题,但是在性能上是有多余的消耗的,因为scrolldidscroll是会很频繁的执行的,但是我们又不能在停止滚动的时候再执行,这个时候,就需要我们判断好一个时机,列表是标题,一个列表是分区的内容,我们滚动内容列表的时候,需要选中当前内容列表中对应的标题,我们可以设想一下,什么时候,选中的标题会有可能发生变化呢,就是内容列表的cell消失的时候,
2024-04-26 22:31:58 139
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人