在Obj-c中使用truncatingRemainder()方法

时间:2019-05-23 15:44:06

标签: ios objective-c swift methods

我正在尝试在Objective-c中创建3D立方体动画,这是我想使用我的代码的一段代码。有人知道如何将这些方法转换为Objective-C吗?我没有在Apple文档中找到任何东西。

let hasCompletedPaging = (xOffset / scrollView.frame.width).truncatingRemainder(dividingBy: 1) == 0

2 个答案:

答案 0 :(得分:1)

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;

答案 1 :(得分:0)

基于Apple的 truncatingRemainder 文档,该函数的C风格版本如下所示:

CGFloat TruncatingReminder(CGFloat x, CGFloat dividingBy) {
  return x - dividingBy * floor(x / dividingBy);
}

P.S。我知道我的回答还很晚,但是可能对某些人有用。