PDF 课件和源代码下载地址:
作者回复: 整体的原因就是因为UIScrollViewContentInsetAdjustmentBehavior这个属性,在项目中我们为了简单演示UIScrollView的滚动属性,没有引入其他的复杂概念,所以没有讲解到这个具体的属性设置。 具体的原因:默认系统会在addsubview之后,就是scrollView展示之前自动的调整Inset,导致了offset的变化,所以初始化的时候,其实整体的页面是下移的。设置了pagingEnabled,系统会自动的处理offset来实现分页的效果.所以对于垂直方向,所以这种自动处理在滑动时会导致之前变化的offset回滚到0。所以就有了上移,而不设置pagingEnabled时系统不会自动调整offset,完全由用户操作,所以就不会出现这种现象。 解决的办法:设置scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever。在开发过程中的frame布局的项目中,所有的scrollView也都建议设置这个属性。
作者回复: target中的self,以及delegate的self 都是指当前这个类,也就是UIViewController。UITapGestureRecognizer简单的理解,就是一个手势,当这个手势被系统检测到的时候,调用Target的action。所以你可以看到代码后面的@selector其实是在当前这个类中的,简单的说就是调用self的某一个selector,当然target可以是任何Object,只要能响应后面的selector就好。至于黄色的View,我们是将UITapGestureRecognizer加到它上面,所以它调用addGestureRecognizer方法,来增加手势。
作者回复: 最早六月末 最晚七月中旬吧
作者回复: 加油!
作者回复: 这个是gcc的一种扩展,具体可见https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html 主要的作用就是优化代码结构,当在代码较多的时候,非常方便阅读。
作者回复: 说下我简单的理解哈,视图组件我个人认为就是一些UI视图组成的,可以复用的常用视图单元。我们把这些视图封装成组件的原因,就是为了划分功能边界,方便复用,提升开发效率。当然组件也可以脱离视图,比如iOS中说的组件化,都是业务逻辑维度的,但是也都是为了合理的区分功能进行解耦,方便复用,背后也是为了提升开发效率。所以组件更加想表达的是解耦和边界。而控件我感觉更想表达的是可以进行交互的视图组件,比如按钮、输入框、复选框等等。当然这些‘术语’并不是标准和规范的,我们也大可不必过分的纠结其意义和使用场景,比如你想实现一个类似的输入框的小功能,然后说封装成了组件,或者封装成了控件,应该都是可以接受的。
作者回复: 整体的原因就是因为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只是响应之后的业务逻辑,是不会影响响应手势的。