我想在Swift中写this(我在步骤54)。在UICollectionViewLayout
类中,我有一个函数setup
函数
func setup() {
var percentage = 0.0
for i in 0...RotationCount - 1 {
var newPercentage = 0.0
do {
newPercentage = Double((arc4random() % 220) - 110) * 0.0001
println(newPercentage)
} while (fabs(percentage - newPercentage) < 0.006)
percentage = newPercentage
var angle = 2 * M_PI * (1 + percentage)
var transform = CATransform3DMakeRotation(CGFloat(angle), 0, 0, 1)
rotations.append(transform)
}
}
以下是教程
中描述setup
函数的方法
首先,我们创建一个我们添加对象的临时可变数组。然后 我们遍历循环,每次都创建一个旋转。我们创造了一个 随机百分比介于-1.1%和1.1%之间,然后用它来创建一个 调整了CATransform3D。我稍微嘲笑了一下并添加了一些逻辑 确保我们随机生成的旋转百分比最小 与预先生成的0.6%不同。这可以确保堆叠中的照片不会被所有旋转的不幸所困扰 同样的方式。完成转换后,我们将其添加到临时数组中 将其包裹在NSValue中,然后冲洗并重复。毕竟32 我们设置了私有数组属性。现在我们就是 需要投入使用。
当我运行应用程序时,while (fabs(percentage - newPercentage) < 0.006)
行出现运行时错误。
在setup
prepareLayout()
函数
override func prepareLayout() {
super.prepareLayout()
setup()
...
}
没有do..while
循环,应用运行正常。所以我想知道,为什么?
答案 0 :(得分:0)
原来我必须更加安全
newPercentage = Double(Int((arc4random() % 220)) - 110) * 0.0001
答案 1 :(得分:0)
这必须是一个Swift错误。该代码不应该在运行时崩溃。它应该在newPercentage =表达式上给出编译器错误,或者它应该像C一样正确地提升类型。