我因为不得不问这个问题而踢我自己...我可以通过一些简单的'if'语句解决这个问题,但我确信有一种更简单的方法!
我有一个分页控件,允许用户向左移动一页或向右移动一页。每个页面都有一个索引。页面循环,因此如果您有三个页面并且您继续向右移动,则用户会看到:
0 => 1 => 2 => 0 => 1 ...
我有当前页面索引和上一页索引。如何确定用户是向左还是向左分页?
谢谢!
答案 0 :(得分:3)
没有足够的信息来回答这个问题;并不总是可以判断用户是仅使用当前和之前的索引“向右”或“向左”移动。
例如,我们说current = 0
和previous = 1
。
用户是向左移动还是用户向右移动而且0
有溢出,因为只有两页?无法分辨。
如果你不知道页数,这里有一些粗略的解决方案:
// Doesn't handle wrap arounds properly.
bool movedRight = current == previous + 1;
// Assumes that being at the start point always means an overflow occurred.
bool movedRight = (current == previous + 1) || current == 0;
// Assumes that being at the start point always means an overflow occurred,
// except when we were previously at the second element.
bool movedRight = (current == previous + 1) || (current == 0 && previous != 1);
如果您知道页数,可能更直观:
// Can't disambiguate when numPages == 1 or 2
bool movedRight = current == (previous + 1) % numPages;
但仍然不足以告诉用户在只有一两页时所做的事情:在这些情况下,左右移动产生等效的“结果”。如果你必须在这些情况下左右区分,显而易见的解决方案是简单地存储用户单独分页的方向。您可能不应该尝试计算无法计算的东西。 :)
答案 1 :(得分:0)
dir = (current == ( previous + 1 ) % num_pages ) ? right : left
答案 2 :(得分:0)
一个if
应该足够了:
if(prev + 1 == current || (current == 0 && prev > 1))
// right
else
// left
如果页面循环播放,则第二组条件开始起作用。
答案 3 :(得分:-1)
bool movedRight = current > previous;