PDF 课件和源代码下载地址:
作者回复: 最早六月末 最晚七月中旬吧
作者回复: target中的self,以及delegate的self 都是指当前这个类,也就是UIViewController。UITapGestureRecognizer简单的理解,就是一个手势,当这个手势被系统检测到的时候,调用Target的action。所以你可以看到代码后面的@selector其实是在当前这个类中的,简单的说就是调用self的某一个selector,当然target可以是任何Object,只要能响应后面的selector就好。至于黄色的View,我们是将UITapGestureRecognizer加到它上面,所以它调用addGestureRecognizer方法,来增加手势。
作者回复: 整体的原因就是因为UIScrollViewContentInsetAdjustmentBehavior这个属性,在项目中我们为了简单演示UIScrollView的滚动属性,没有引入其他的复杂概念,所以没有设置。
具体的原因:默认系统会在addsubview之后,就是scrollView展示之前自动的调整Inset,导致了offset的变化,所以初始化的时候,其实整体的页面是下移的。设置了pagingEnabled,系统会自动的处理offset来实现分页的效果.所以对于垂直方向,所以这种自动处理在滑动时会导致之前变化的offset回滚到0。所以就有了上移,而不设置pagingEnabled时系统不会自动调整offset,完全由用户操作,所以就不会出现这种现象。
解决的办法:设置scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever。在开发过程中的frame布局的项目中,所有的scrollView也都建议设置这个属性。
作者回复: 整个点击的响应,是根据响应链传递的。在runloop中系统会默认接收事件,然后通过响应链传递给子View,选择合适的View来处理这个事件。而selector以及你说的runtime,则是View在接收到这个事件之后到处理,执行了这个selector的调用。我们传递的selector只是响应之后的业务逻辑,是不会影响响应手势的。