提问人:kroko 提问时间:5/23/2019 更新时间:6/17/2020 访问量:412
在 Obj-c 中使用 truncatingRemainder() 方法
Use truncatingRemainder() method in Obj-c
问:
我正在尝试在 objective-c 中创建一个 3D 立方体动画。这是一段我想使用我的代码的代码。有人知道如何将这些方法转换为 objective-c 吗?我在 Apple 文档中没有找到任何内容。
let hasCompletedPaging = (xOffset / scrollView.frame.width).truncatingRemainder(dividingBy: 1) == 0
答:
1赞
rmaddy
5/24/2019
#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;
评论
2赞
Martin R
5/24/2019
或fmod(xOffset, scrollView.frame.width)
0赞
kroko
5/27/2019
@MartinR 如何转换var rightAnimationPercentComplete = hasCompletedPaging ?0 : 1 - (xOffset / scrollView.frame.width).truncatingRemainder(dividingBy: 1)
0赞
rmaddy
5/27/2019
@kroko .但是(在任何一种语言中)如果它是完整的,你为什么要 0%?double rightAnimationPercentComplete = hasCompletedPaging ? 0.0 : (1.0 - fmod(xOffset, scrollView.frame.width));
2赞
FirExpl
6/17/2020
#2
根据 Apple 的 truncatingRemainder 文档,此函数的 C 样式版本如下所示:
CGFloat TruncatingReminder(CGFloat x, CGFloat dividingBy) {
return x - dividingBy * floor(x / dividingBy);
}
P.S. 我知道我的回答已经很晚了,但可能对某些人有用。
评论