前言
; T. v0 \) ~; i9 _- y$ ? XXPagingScrollView 源于对最美创意的改版重构 由于对现在版本的UI不是太满意 加上想练习一下swift 所以决定用swift来重写最美创意第二版( T_T 因为设计的问题 暂已搁置 跪求惺惺相惜的设计师好基友~~)
' y% t; x D$ ] 界面暂时由我自己来设计 首页的风格我参考了Tinder 所以就有了XXPagingScrollView* h$ n% b6 H' T4 d m
分析
0 j! i$ i S8 O; J( L
* Z$ u) b% Q% j& ?2 k& M XXPagingScrollView
7 j9 S2 d- F/ |) z 通过演示图可以看到 XXPagingScrollView 就是可以自定义paging size的ScrollView 但是UIScrollView仅仅只有一个pagingEnabled属性 并不能指定paging size 这就是说UIScrollView的paging size大小就是其本身的大小 这是不符合我们的要求的) n: h6 f- J( S4 Y7 u
那么怎样达到我们想要的效果呢?
& j) d% c G( q# D u, R9 S, b- g. V3 R; S! G) M4 U
方案1: 不使用pagingEnabled属性 而是手动的计算并设置滑动偏移
) r2 D) D2 \: K1 R" P; O; O( V3 q2 R: r$ e
方案2: 使用pagingEnabled属性 扩大scrollview的显示范围即可(我采用的就是这种方法)! |) C9 D5 S; U+ R7 J0 B% f* |( D
方案1的计算相对麻烦一些 这里不赘述 我们来说说方案2到底是怎么回事
8 L- e" _* s; ^1 N: ]' o. M% ?% u 正常来说 我们使用UIScrollView是这样的$ q: N' T+ G0 P8 i8 z' e
& o6 b# c) H. q9 s
当我们滑动时 看到的内容是这样的
& ]) J3 X* [# d. v5 W& d: |) p, o* ^+ }
0 b6 k+ Q( h, N
但是实际上 我们现在想要看到的内容是这样的- `, y$ `5 ?4 G5 R/ H; d' [- K+ x, [
, Z. V" a* |. U: R6 c0 Z7 D
9 Z4 g, _* k6 X
那么 其实我们只要在原来的基础上 扩大UIScrollView的可显示范围就可以了* Y. E! B2 d( E- d/ f( h" Q8 K
% E0 L, m9 W4 Q
- W' w) I! i- g# j2 i { 扩大的显示范围后 我们看到的就是这个样子
* f$ j# F8 y. [: d9 }$ h5 E) c5 A
- L. _9 x) O2 g/ \% u' G2 B
8 q* \- Q2 X1 S$ l% O9 o 而为了达到这个目的 我们只需要把UIScrollView放入到另一个Container里面就可以了
: N* s7 @! h+ X3 T1 h
# @ Z: R: g; `1 w
' g( {( d5 u- \; V# ~ 到了这一步 我们就只要解决两个问题" Q p/ z, J; [
; }' B: @" _6 N: ~+ U
# a+ {& I3 O; Z9 e
让UIScrollView显示超出其本身范围的内容! S$ n: A5 k1 W, U) k9 {$ f
5 D: m6 j3 z; B" }. ]1 v4 `- ^$ A 让UIScrollView响应超出其本身范围的触摸事件
4 P! W+ d5 D6 ?% U) M 而这两个问题其实都容易解决
0 Q0 e0 A# K/ E1 X! o! i( \
; N; u' t1 ^: Y/ o clipsToBounds 就是用来干这个事情的
$ s9 ~" c. J# F- X$ R
0 t6 {, a4 c5 X6 v) k 重写UIView的pointInside事件就可以了5 x9 J3 f1 a, M
至此 一个支持自定义paging size的scrollview就产生了
( U+ P4 U9 A( o" Q% S l9 ? [color=rgb(0,]小结5 _. r$ T% _* ]7 N# p- r
其实根据这个思路写 代码非常的简单(总共不超过100行) 在这里分享只是因为这个解决办法相当的简单且巧妙(思路是google得来的) 且不对UIScrollView本身造成任何破坏
( {! }/ r; S) A. g. F 最近感觉国内的iOS圈造轮子的情绪相当的高涨 但是其实可以换一种思路来解决问题 |