UIScrollerView常见属性 CGPoint contentOffset 这个属性用来表示UIScrollerView滚动的位置(其实就是内容左上角与ScrollerView左上角的间距值...= NO UIScrollerView代理方法 ScrollerView滑动的代理回调 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView..."); } - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset...:(inout CGPoint *)targetContentOffset{ NSLog(@"当用户完成滑动内容时"); } - (void)scrollViewDidEndDragging:(...*)scrollView{ return [UIView new]; } ScrollerView缩放的代理回调 //滚动视图在和方法的实现结束时调用此方法,但仅在请求动画时调用setContentOffset
UIScrollView UIScrollView全部API学习。...:(UIScrollView *)scrollView; //45. scrollView将要结束拖拽的时候调用 - (void)scrollViewWillEndDragging:(UIScrollView...*)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset...UIScrollView的常见属性 @property(nonatomic) CGPoint contentOffset; 这个属性用来表示UIScrollView滚动的位置 (其实就是内容左上角与scrollView...控制器 () @end 控制器要实现UIScrollViewDelegate协议里面的代理方法 #pragma mark - <UIScrollViewDelegate
CoreText绘制文本的和图片的技术你可以在老司机的CoreText实现图文混排系列中得到详细的实现方法,想看的去看吧。...- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset...首先他cell调用了clear方法,这是VVeboTableViewCell中作者自己实现的方法,用于清除cell上面展示的内容,这样可以避免因cell重用而导致没有绘制的cell会显示之前的内容的问题...要知道没有什么代理是直接反应滚动速度的,这里作者很取巧的用到了-scrollViewWillEndDragging:withVelocity:targetContentOffset:这个代理。...重要的事情说三遍 放一个效果图,老司机写的控制器里面看不到任何一个TableView代理然而还是能正常显示并实现很多功能。
下面我就从左到右,从上到下,结合代码来展示一下作者是如何实现每一点的。 1....(使用layer或者裁剪图片),只是将一张圆角颜色和cell背景色一致的图片覆盖在了原来的头像上,实现了圆角的效果(但是这个方法不太适用于有多个配色方案的app)。...- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset...:(inout CGPoint *)targetContentOffset{ //targetContentOffset : 停止后的contentOffset NSIndexPath...UILabel里文本的绘制,我们先说一下关于简单的纯NSString的绘制: 3.4 异步绘制NSString 作者通过传入字符串的字体,颜色和行高,以及位置就实现了纯文本的绘制: //绘制名字 [_
,需要计算停下的位置,使用UICollectionViewDelegate代理方法 //停下的位置 - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView...withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset { UICollectionViewFlowLayout...- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView { UICollectionViewFlowLayout..."; } return _userLocationAnnotation; } 定位当前位置和放大缩小按钮的实现 //定位 - (UIButton *)currentLocationBtn...,点击和取消大头针,实现回调跳转车辆信息view #pragma mark - MKMapViewDelegate //点击大头针 - (void)mapView:(MKMapView *)mapView
@param imageUrls 所有大图的数组 @param originImageViews 所有小图原始的imageView数组 @param selectPage 选中的是第几个 @...selectPage:(NSInteger)selectPage; 此功能推荐采用UIModalPresentationOverCurrentContext 用法一:采用模型数据进行传递 避免多个数组下标不一致问题...- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset...:(inout CGPoint *)targetContentOffset { CGFloat contentOffsetY = scrollView.contentOffset.y;...UIModalPresentationAutomatic API_AVAILABLE(ios(13.0)) = -2, }; 3.1 Modal 转场动画 此功能推荐采用UIModalPresentationOverCurrentContext 实现代理方法
但是上一篇中实现的自定义布局稍显简单,只能说是比较粗略的计算了下布局各个 item 的位置,搞明白了继承自 UICollectionFlowLayout 子类它需要重载的方法的意义,那么今天这篇文章我们就来实现一个更加复杂的自定义布局...的滚动是分页滚动,而且每次停止的位置都是与UICollectionView 的中心点重合 需求已经明确了,那我们该如何去实现呢!...实现分页滑动效果),里面讲述的就是如何不通过设置 isPagingEnabled 来实现分页效果,在里面我提到了一个很重要的方法叫做: override func targetContentOffset...: 将要停止的点 /// - velocity: 滚动速度 /// - Returns: 滚动停止的点 override func targetContentOffset(forProposedContentOffset...extension CoverFlowViewController: UICollectionViewDelegate{ func scrollViewDidScroll(_ scrollView: UIScrollView
1.2 RunLoop和线程 RunLoop和线程是息息相关的,我们知道线程的作用是用来执行特定的一个或多个任务,但是在默认情况下,线程执行完之后就会退出,就不能再执行任务了。...具体的顺序如下: 通知观察者RunLoop已经启动 通知观察者即将要开始的定时器 通知观察者任何即将启动的非基于端口的源 启动任何准备好的非基于端口的源 如果基于端口的源准备好并处于等待状态,立即启动;...监听UIScrollView的滚动 因为UITableView继承自UIScrollView,所以我们可以通过监听UIScrollView的滚动,实现UIScrollView相关delegate即可。...具体实现过程如下: 在项目的ViewController.m中添加一条强引用的thread线程属性,如下图: ?...这样我们就实现了常驻线程的需求。
实现这个效果的关键点只有两点: 获取正在输入内容在UITextView占用了多少行 让UITextView动态改变大小 一开始,为了解决第一个问题,我一直在考虑怎么获取换行事件,发现只用捕捉\n输入即可...要知道,UITextView是继承UIScrollView的。...UITextView输入文字过多时是可以用手上下拖动浏览内容的,所以可以猜想是和UIScrollView有关系。...UITextField输入满了会把文字顶到前面看不见的地方,但还不支持左右拖动!这一点比Android体验要差!...好了,知道其集成UIScrollView就好办了,因为UITextView只有在输入内容超过其显示范围才可以拖动,那就知道输入文字的bound就是UIScrollView的contentSize。
WKWebView+UITableView混排 做内容展示页的时候,经常会用到WKWebView+UITableView的混排功能,现在此做一个总结,该功能的实现我采用了四种方法。...方案2: 简书的内容页实现方案 : UIWebView与UITableView的嵌套方案 将 tableView 加到 webView.scrollView 上, webView 加载的HTML最后留一个空白占位...,我也利用这些类自定义继承于UIView的类实现UIScrollView的效果,详情可以去看代码。...步骤1:确定webView和tableView的高度 //添加观察者 监听webView 和tableView 的contentSize - (void)addKVO{ [self.webView...、WKWebView+UITableView混排、UIScrollView实现原理、WKWebView离线缓存功能 等更多内容都在 https://github.com/wsl2ls/iOS_Tips
以下是使用协议的一些场景: 让 modal 与呈现它的组件进行通信; 让多个 UIViewController 或 多个 Cocoa Touch 类实现相同的行为; 在 UITableCell 向父 UIViewControllers...用户可能被迫伸出手来操作它,但是最好实现 UIScrollView 并处理滚动操作以避免键盘覆盖输入内容。 9.使用通知 通知中心是在组件之间分发消息的好工具。...在开发文档中,通知是在控制器与模型或服务之间实施通信可同步模式的正确方法,我在项目中经常使用 Notification Center,基本上实现了观察者模式,并让应用程序带有更多响应式的元素。...可以使用观察者模式实现许多关键功能,我发现它非常有用。该方法非常简单,且大多数操作都可以用一行代码进行编码,使用 target 和 user info 来传递所有数据。...一个重要的建议是:需要在 deinit 或 viewWillDisappear 方法中删除未使用和不必要的观察者,以避免内容泄漏和重载。 10.
一、iOS12(Xcode10) 1.1、升级Xcode10后项目报错 不允许多个info.plist Xcode10是默认选中的最新的New Build System(Default),在这个编译系统的环境下...,不允许多个info.plist 解决办法一:(推荐) 把build system切换到 Legacy Build System,换言之就是切换成老的编译系统,就OK了。...,所以需要设置UIScrollView的contentInsetAdjustmentBehavior属性。...解决方法是实现对应方法或吧这三个属性设为0。 2.4、LocalAuthentication 本地认证 本地认证框架提供了从具有指定安全策略(密码或生物学特征)的用户请求身份验证的功能。...4.2、HTTP 请求失败 iOS9 默认不支持 HTTP 请求,需要改用更安全的 HTTPS(默认用 TLS 1.2)。
前言 本文源自实际开发中的需求,核心的要求有几个: 1、多个UITableview要支持左右滑动; 2、点击Tab也要有UITableview的滑动切换效果; 3、每个UITableview单独的下拉刷新和上拉加载...某条.gif 正文 1、核心思路 根据要求来分析,可以采用UIScrollView作为容器,开启pageEnable属性实现左右分页,同时关闭UIScrollView的上下滑动手势(避免和UITableview...的冲突),通过修改UIScrollView的contentOffset属性实现左右滑动效果。...容器和内部UITableView滑动手势冲突 如果UIScrollView容器的上下滑动手势打开,会存在两个上下滑手势,一般的操作不会触发UIScrollView容器的上下滑动(因为上下滑动优先被内部的...在代码复杂度已经很高的架构里实现功能,犹如在钢绳交错的天空中行走,一不小心就踏空踩到Bug;又可能明明走在自己的这条钢绳上,结果把别人甩到坑里去。 三思而后行,代码以兼容稳健为主。
[1240] 收录:原文地址 前言 iOS 的动画框架很成熟,提供必要的信息,譬如动画的起始位置与终止位置,动画效果就出来了 动画的实现方式挺多的, 有系统提供的简单 API ,直接提供动画般的交互效果...[image] 动画的实现效果,是通过更改约束。...(_ scrollView: UIScrollView) { updateHeaderView() } func updateHeaderView() {...UIScrollViewDelegate{ // MARK: - UIScrollViewDelegate func scrollViewDidScroll(_ scrollView: UIScrollView..., withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer) { if
1 简介 UIScrollView 是负责滚动的视图。苹果最强大的地方就在于其良好的UI展示,和UE体验。如果不会很好的使用UIScrollView,就等于丧失了苹果一般的法力。...UIScrollView是一个能够滚动的视图控件,可以用来展示大量的内容,并且可以通过滚动查看所有的内容 1.1 工作原理 在缩放的时候,原理是操作被缩放控件的的transform数值。...1.2 UIScrollView常见的几个重要控件 UITableView UICollectionView UITextView 1.3 UIScrollView常见的重要属性 属性名 作用 contentSize...设置UIScrollView的滚动范围 contentOffset UIScrollView当前滚动的位置 contentInset 增加滚动视图四周的增加滚动范围 bounces 是否有弹簧效果,默认是开启的...是否正在缩放 pagingEnabled 滚动视图是否被分割成多个独立的页面 1.4 手工代码实现拖动 // 创建scrollView UIScrollView *scrollView
前言 在移动应用实际开发过程中,往往会有多个scrollview嵌套的界面需求,这种需求已经司空见惯,解决方案也多种多样,这里就介绍一下我认为最优的解决方案。 效果图: ?...Untitled.gif 结构解读: 底层有一个UIScrollview子类,这里叫它mainScrollview; mainScrollview下方嵌套了两个视图(通常这两个视图也用UIScrollview...毫无疑问,我们通常的做法是在mainScrollview的下方先嵌套一个横向滚动的UIScrollview子类,再在这个横向滚动的视图上嵌套n个子模块(像gif中的“图文详情”和“客户评分”两个子模块)...缺点:逻辑复杂程度过大,容错处理很多,致命的缺陷是临界状态无法实现scrollview的减速效果(惯性效果),当然有的开发者会说利用核心动画能实现这一效果,但是,我认为这就太费周折了。...值得注意的是,UIScrollview实现了这个协议的方法,所以,我们可以让子模块直接继承UIScrollview(或其子类),然后重写该方法。
这时候两个scrollView都会滑动,我们可以在滑动回调里,根据当前的情况进行处理,实现想要的滑动规则了。----滑动规则制定Tips:规则一定要提前确认好。...实现抽屉效果如下:图片下拉:内部列表拉到最顶部了,才放大headerView上拉:先把headerView缩到最小,再上滑内部列表----实现1、层级关系图片mainScrollView:添加在vc.view...nil, bundle: nil) ctl.view.backgroundColor = .cyan return ctl}()----MOMultiResponseScrollView内部实现了...UIGestureRecognizer) -> Bool { return true}undefinedMOMultiTabContainerViewController内部是一个scrollView,添加多个...:/// 更新 scrollView 的 offset, 相同时跳过,防止极限情况死循环private func updateScrollView(_ scrollView: UIScrollView,
,再通过设置UIScrollView的contentSize 来限定UIScrollView的滚动范围,保证全部内容可被浏览到 2 实现代码 2.1 伪代码 class CustomView: UIView...3 问题的分析 在发现实现的效果没有达到想要的效果后,就开始进入问题的分析排查阶段。...y值从30逐渐缩小于10,但测试发现不管怎样改这个初始的y值,实现的效果其实都差不多,根本没有办法缩小其距离顶部的距离。...这不科学啊,这个只是用来设置可滚动范围的接口啊,难道是我设置的高度太多了?但在尝试设置了多个不同的高度后,发现都没有解决问题。让我有点怀疑人生了。...4 最终解决方式 在经历了多个怀疑方向的排查后,终于排查到了真正的问题所在,最终是通过禁用scrollview的contentInsetAdjustmentBehavior 属性来解决问题: if
转发给新对象的个数不同 前者只能转发一个对象,后者可以连续转发给多个对象。...并且配合Runtime的消息转发机制就能实现一行代码在不同版本操作系统下采取不同的消息调用方式 UIScrollView+Forwarding.m #import "UIScrollView+Forwarding.h...不注释并导入UIScrollView+Forwarding类 ? 注释掉UIScrollView+Forwarding的功能代码 会如下图所示奔溃: ? 4....好,你说不支持多继承,那你有没有模拟多继承特性的办法? 转发和继承相似,可用于为OC编程添加一些多继承的效果,一个对象把消息转发出去,就好像他把另一个对象中放法接过来或者“继承”一样。...消息转发弥补了objc不支持多继承的性质,也避免了因为多继承导致单个类变得臃肿复杂。
scroll view 还处理缩放和平移手势,要实现缩放和平移,必须实现委托 viewForZoomingInScrollView:和scrollViewDidEndZooming:withView:atScale...1.3 内存重用 事件处理看过了,就要考虑scrollView如何重用内存的,下面写了一个例子模仿UITableView的重用的思想,这里只是模仿,至于苹果公司怎么实现这种重用的,他们应该有更好的方法...scroll view 还处理缩放和平移手势,要实现缩放和平移,必须实现委托 viewForZoomingInScrollView:和scrollViewDidEndZooming:withView:atScale...每一个默认的UIScrollView的实例,他的scrollsToTop属性默认为YES,所以要实现某一UIScrollView的实例点击设备状态栏返回顶部,则需要关闭其他的UIScrollView的实例的...很好理解:若多个scrollView响应返回顶部的事件,系统就不知道到底要将那个scrollView返回顶部了,因此也就不做任何操作了。