2 回答
TA貢獻1793條經(jīng)驗 獲得超6個贊
舉個例子吧
一頁的width為320
用方法1的結(jié)果
情況1:
contentoffset小于320+160,即在第二頁的左半部分,(self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth的結(jié)果是0.xxxx,floor結(jié)果為0,計算結(jié)果為1,即會回到第一頁
情況2:
contentoffset大于320+160,即在第二頁的右半部分,(self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth的結(jié)果是1.xxxx,floor結(jié)果為1,page計算結(jié)果為2,即會進入第二頁
用方法2的結(jié)果
self.scrollView.contentOffset.x/pageWidth計算結(jié)果都為1.xxx
而page是int類型,系統(tǒng)根據(jù)四舍五入自動強制轉(zhuǎn)型
以上為個人理解。
TA貢獻2036條經(jīng)驗 獲得超8個贊
先看表達式:(self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth
由于pageWidth和contentOffset.x都是浮點數(shù),所以做除法精度影響可以忽略,因此對表達式可以將除法拆開.
令self.scrollView.contentOffset.x=x, pageWidth=w則:
(x-w/2)/w => x/w - w/2/w => x/w - 0.5, 所以最終表達式為:
floor(x/w - 0.5)+1
所以最終結(jié)果就是 floor(self.scrollView.contentOffset.x/pageWidth - 0.5)+1
+1是為了讓下表從1開始
floor是向上取整和-0.5放在一起的目的是為了四舍五入
四舍五入是為了讓交互更自然,就是用戶如果滑過了pageWidth的一半,那么就滾動到下一頁,否則就是當前頁.
真想不通寫這么復(fù)雜干嘛.
推薦一種不需要調(diào)函數(shù)的常用寫法(int)(x/w+0.5)+1
- 2 回答
- 0 關(guān)注
- 455 瀏覽
添加回答
舉報
