我最近开始学习编码。我正在尝试使用旋转轮盘制作一个应用程序,并在网上找到它。我可以使轮盘旋转,但每次旋转时它都会在相同的确切位置结束,因此我希望它在每次新旋转时都在随机的位置结束。我希望有人可以帮忙。预先感谢!
UIView.animate(withDuration: 5, delay: 0, options: [UIView.AnimationOptions.curveEaseOut], animations: {
for _ in 0..<10 {
self.ruleRut.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi * 1))
self.ruleRut.transform = CGAffineTransform(rotationAngle: 0)
}
})
答案 0 :(得分:1)
这里有几个问题。首先,这是一个涉及几个问题的问题,其中Swift最不重要。让我们分解一下样本中发生的事情:
UIView.animate(withDuration: 5, delay: 0, options:
[UIView.AnimationOptions.curveEaseOut], animations:
在这里,您使用的是UIKit(不是Swift特有的)动画助手,它将在5秒钟内以最终状态运行。在结束语中,您定义结束状态是什么,它将使用ease-out
曲线(减速)以动画形式到达终点。
{
for _ in 0..<10 {
self.ruleRut.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi * 1))
self.ruleRut.transform = CGAffineTransform(rotationAngle: 0)
}
})
在这里,这有点令人困惑。您正在告诉UIKit,由于这个for循环,您希望ruleRut
旋转pi
弧度(180度),然后从0旋转到9度(从0旋转到9度),所以含义有点丢失。这可能有效,但希望它能成为黑客。
关于为什么它总是停在同一位置的问题,您正在以180度的增量调用旋转变换,并且以偶数的旋转数结束总是从起点开始。您需要将旋转的弧度随机化以达到所需的终点。您还必须处理视图旋转的方向,这超出了此答案的范围,但基本上涉及使用更复杂的显式动画,或确保动画发生在小于180度的位置。无论如何,最好的选择可能是从以下主题的Apple文档开始,然后链接到该文档,然后跟随Ray Wenderlich这样的人讲授有关iOS动画的教程。
可以在here
中找到有关UIView动画的Apple文档。Ray Wenderlich动画教程可以找到here
希望这会有所帮助,欢迎来到iOS世界!