请问我这样直接除下来和上面有什么不同的? 第一个算法是什么意思呢?

看到网上很多都是这样写的:

CGFloat pageWidth = self.scrollView.frame.size.width;int page = floor((self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;

但是我这样也可以:

self.scrollView.contentOffset.x/pageWidth


拉丁的传说
浏览 150回答 2
2回答

摇曳的蔷薇

举个例子吧一页的width为320用方法1的结果情况1:contentoffset小于320+160,即在第二页的左半部分,(self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth的结果是0.xxxx,floor结果为0,计算结果为1,即会回到第一页情况2:contentoffset大于320+160,即在第二页的右半部分,(self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth的结果是1.xxxx,floor结果为1,page计算结果为2,即会进入第二页 用方法2的结果self.scrollView.contentOffset.x/pageWidth计算结果都为1.xxx而page是int类型,系统根据四舍五入自动强制转型 以上为个人理解。

慕桂英3389331

先看表达式:(self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth由于pageWidth和contentOffset.x都是浮点数,所以做除法精度影响可以忽略,因此对表达式可以将除法拆开.令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所以最终结果就是 floor(self.scrollView.contentOffset.x/pageWidth - 0.5)+1+1是为了让下表从1开始floor是向上取整和-0.5放在一起的目的是为了四舍五入四舍五入是为了让交互更自然,就是用户如果滑过了pageWidth的一半,那么就滚动到下一页,否则就是当前页.真想不通写这么复杂干嘛.推荐一种不需要调函数的常用写法(int)(x/w+0.5)+1
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS