Ios 非常基本的快速动画
我试图将视图从其在故事板上的位置向上移动100像素 如果随机生成的数字为1,则标签将更改为“他们尚未获胜” 如果随机生成的数字是2,则标签将更改为表示他们赢得了一次射击 我正在使用以下代码:Ios 非常基本的快速动画,ios,swift,animation,Ios,Swift,Animation,我试图将视图从其在故事板上的位置向上移动100像素 如果随机生成的数字为1,则标签将更改为“他们尚未获胜” 如果随机生成的数字是2,则标签将更改为表示他们赢得了一次射击 我正在使用以下代码: override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent?) { if motion == .MotionShake{ let randomNumber = arc
override func motionEnded(motion: UIEventSubtype,
withEvent event: UIEvent?) {
if motion == .MotionShake{
let randomNumber = arc4random_uniform(2) + 1
print(randomNumber)
if randomNumber == 1 {
labelOne.text = "Sorry!"
labelTwo.text = "You Have Not Won This Time"
labelThree.text = "Better Luck Tomorrow"
}
if randomNumber == 2 {
labelOne.text = "Winner!"
labelTwo.text = "1 x Shot Patron Cafe"
labelThree.text = "Show at the bar to claim."
}
let xPosition = stampView.frame.origin.x
//View will slide 20px up
let yPosition = stampView.frame.origin.y - 100
let height = stampView.frame.size.height
let width = stampView.frame.size.width
UIView.animateWithDuration(3.0, animations: {
self.stampView.frame = CGRectMake(xPosition, yPosition, height, width)
})
print("SHAKEN!")
}
}
我发现,有时当我摇晃设备时,动画从原始位置下方的100px开始,然后移回原始位置,其他时候,动画将从最后一个位置向上移动额外的100px
如何确保它始终从故事板上的原始位置移动?确保某些内容保持在同一位置的最佳方法是在
Main.storyboard
文件中对其进行约束(首先要做的事情)。另外,作为额外的预防措施,您可以在viewDidLoad
中读取其帧值,然后在motionend
中再次设置它
var stampFrame : CGRect = CGRect(x: 0, y: 0, width: 0, height: 0) // This is stampFrame's initial value before being set in viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
stampFrame = stampView.frame // Here we store the frame value for usage later
// If you would like, you can also set this in a method like viewWillAppear or viewDidAppear, but I'd just keep it in viewDidLoad
}
override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent?) {
stampView.frame = stampFrame
if motion == .MotionShake{
let randomNumber = arc4random_uniform(2) + 1
print(randomNumber)
if randomNumber == 1 {
labelOne.text = "Sorry!"
labelTwo.text = "You Have Not Won This Time"
labelThree.text = "Better Luck Tomorrow"
}
if randomNumber == 2 {
labelOne.text = "Winner!"
labelTwo.text = "1 x Shot Patron Cafe"
labelThree.text = "Show at the bar to claim."
}
// let xPosition = stampView.frame.origin.x
// View will slide 20px up
// let yPosition = stampView.frame.origin.y - 100
// let height = stampView.frame.size.height
// let width = stampView.frame.size.width
// The code above is redundant, we can just do it all in the UIView.animate
UIView.animate(withDuration: 3.0, animations: {
self.stampView.frame.origin.y -= 100
// This moves stampView's position up 100pts from its current location
})
print("SHAKEN!")
}
不管怎样,我希望这会有帮助,如果您还有任何问题,欢迎您提问。您使用自动布局吗?您好,不,我发现如果我将文本更改移出函数,它似乎可以非常愉快地工作。不知道为什么!可能是在后台线程上执行的“motionEnded”。正在尝试将代码包装到主队列中。如果有效,请告诉我。