truncatingRemainder(dividingBy: 1)
дает только дробную часть результата. Таким образом, сравнение truncatingRemainder(dividingBy: 1)
с 0
аналогично проверке, является ли результат целым числом.
Одно простое преобразование может быть:
BOOL hasCompletedPaging = (xOffset / scrollView.frame.width) == round(xOffset / scrollView.frame.width);
Но это не идеально из-за неточности чисел с плавающей запятой.
Лучшей проверкой может быть:
BOOL hasCompletedPaging = fabs(xOffset / scrollView.frame.width - round(xOffset / scrollView.frame.width)) < 0.000001;
Но самое простое решение - использовать fmod
. Если результат равен нулю, это означает, что первое число является целым кратным второго:
BOOL hasCompletedPaging = fmod(xOffset, scrollView.frame.width) < 0.000001;