如何设置scrollview的contentoffset却不触发DidScroll方法

由于项目需要自定义一个日历,后来在GitHub上找到了FSCalendar跟我们的项目需求很相似,就想拿过来改一下,看了看代码,作者逻辑代码能力挺强悍的(最起码我看代码饶了很长时间还没有完全看懂)。我们的需求就是要把FS日历的hearder换成中间显示月份两边是两个button可以点击向左向右切换月份,由于作者所有切换日历的逻辑都写在Scrollview的代理方法scrollViewDidScroll里面,所以在我的button点击事件里面设置Scrollview的contentoffset的时候,系统会自动调用ScrollviewDidScroll方法,所以除了执行点击事件里面我设置的更换日历相关逻辑,还会自动调用ScrollviewDidScroll方法中实现的逻辑,导致混乱。最终还是受作者的代码启发,使用bounds代替contentoffset,同样实现切换Scrollview显示的位置但是不会触发ScrollviewDidScroll方法,核心代码如下:

_scrollView.bounds = CGRectOffset(_scrollView.bounds, self.flowOffset.x, self.flowOffset.y);

其实bounds的x,y值也是可以不为0的,不为0时代表相对于自身坐标系的位置偏移,和contentoffset作用相似,做个笔记,如有错误,敬请指出!

时间: 2024-11-03 14:00:24

如何设置scrollview的contentoffset却不触发DidScroll方法的相关文章

视图加载过程中会触发的方法(loadView/viewDidLoad/didReceiveMemoryWarning)

1.loadView 这是视图控制器用来加载根视图的方法; 如果需要将自定义的视图作为根视图,则不需要调用父类对该方法的实现([super loadView]);直接将自定义视图通过self.view定义为视图控制器的根视图; 自定义视图中的简单响应事件也应由视图控制器来进行处理,写在此方法内; 2.viewDIdLoad 当视图控制器的根视图加载完成之后触发该方法;(也就是loadView调用完成之后会立即调用该方法); 需要调用父类对该方法的实现; 该方法可以对根视图进行简单的一些设置,比如

关于调用系统的固定方法后会自动触发某些方法的小结

涂层 当调用 setNeedsDisplay 后会调用 drawInContext:   这个方法  进行图层的绘制 调用setNeedsLayOut后会自动调用  绘制frame 的那个方法 这里有个问题需要记一下,待日后完善: 为啥要调用a方法来触发b方法?直接调用b也可以达到效果,那么直接调用b方法有啥坏处? 未完待续

mouseover和mouseout多次触发解决方法(兼容ie和firefox)(转)

在用到mouseover和mouseout事件来作为事件触发的条件,但是如果我们用做触发的元素内部有其他的元素的时候当鼠标移上的时候会反复的触发mouseover和mouseout事件,如导致菜单闪烁等问题.因为内部元素在鼠标移上的时候会向它的父对象派发事件,所以外面元素相当于也触发了mouseover 事件. 为了阻止mouseover和mouseout的反复触发,这里要用到event对象的一个属性relatedTarget,这个属性就是用来判断 mouseover和mouseout事件目标节

kali 设置 合上笔记本盖子 不自动休眠方法

kali 设置 合上笔记本盖子 不自动休眠方法 1.首先需要安装gnome工具,gonome-tweak-tool 2.找到安装位置,然后运行它,./usr/bin/gnome-tweak-tool 3.在advanced settings 修改 laptop lid close action on battery /when on AC 改为 nothing 大功告成---

Dynamics AX 2012 R2 窗体系列 - 在窗体上修改字段时所触发的方法及其顺序

    在这个系列里,Reinhard将和大家一起探索在AX的窗体上执行操作时,都会触发窗体.窗体数据源和表上的哪些方法,并且是以怎样的顺序触发的.     这次,我们来看看在窗体上修改或录入数据的情况.图中所示的流程,是在理想情况下的完整触发过程.如果窗体控件.窗体数据源字段或表的验证方法返回False,也可能会提前结束流程. 用户在窗体上修改或录入数据后,首先触发了该字段的Form.Control.Validate()方法,如果该方法返回的是False,流程到此结束,用户修改或录入数据失败

ajax请求获取到数据,但是仍然不能触发success方法

这个问题消耗了我的很多时间. 原来是因为.php文件中的 echo echo json_encode($k);  后面少加了个exit; 因为echo echo json_encode($k); 之后还是有其他内容的,所以ajax获取到除了json格式以外的数据. 这个时候会触发error方法: error: function(XMLHttpRequest, textStatus, errorThrown){ alert(XMLHttpRequest.status); alert(XMLHttp

Dynamics AX R2 通过数据源保存记录时触发的方法

    我们都知道,在窗体上保存记录时,会像在表上保存时一样,触发很多方法.这里Reinhard找到了一个流程图,看看都触发了哪些方法,并且这些方法是以怎样的顺序被触发的. 窗体上数据源的Validate()方法被调用. 当Validate()方法里的Super()被调用时,该表的ValideField()  方法会被每个字段调用. Vlidate()方法里,Super()下面的代码被调用. 窗体上数据源的ValidateWrite()方法被调用. 当ValidateWrite()方法中的Sup

设置savepanel或openpanel的默认打开路径方法

NSSavePanel *fileDialog = [NSSavePanel savePanel];[fileDialog setAllowedFileTypes:[NSArray arrayWithObject:@"rar"]];//允许保存的文件后缀名 [fileDialog setDirectoryURL:[NSURL fileURLWithPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Desktop&

设置Weblogic的线程数有两种方法

使用Weblogic版本:Weblogic 11g(10.3.6) 设置Weblogic的线程数有两种方法, 第一种,通过启动参数设置: 1 -Dweblogic.threadpool.MinPoolSize=1000 -Dweblogic.threadpool.MaxPoolSize=1000 可以加在setDomainEnv.sh文件JAVA_OPTIONS下面: 第二种,通过config.xml配置文件: 1 2 3 4 5 <server> <name>AdminServe