I am trying to get a view
to animate from the centre of the screen, to leave the screen after 1 second when the view loads.
The problem I am having is that after a millisecond of the view
being in the original (correct) position upon loading, it then snaps to the new position and animates back to the original position.
I have the following code in viewDidLoad
override func viewDidAppear(animated: Bool) {
UIView.animateWithDuration(0.7, delay: 1, options: .CurveEaseOut, animations: {
var loadingViewFrame = self.loadingView.frame
loadingViewFrame.origin.y += 600
self.loadingView.frame = loadingViewFrame
}, completion: { finished in
print("moved")
})
}
I have tried putting this code in a button
action and it works fine, so is there some other method I should be using when animating on viewWillAppear
or is there something else I have missed?
I have removed all autolayout constraints because I read that they may cause some problems.
I also have other code in viewDidAppear
as well as viewWillAppear
and viewDidLoad
which I could show here if you think it is useful, but I have commented out all of this code to leave with only the basic code and the same error is still occurring.
Thanks a lot for your help.
Edit 1
I have moved the code to viewDidLayoutSubviews
and have used dispatch_once
to ensure it is only done once. The image still animates from the new position to the original position, but now the image is not located in the original position for a millisecond upon loading.
This is the code I have added
var token: dispatch_once_t = 0
override func viewDidLayoutSubviews() {
dispatch_once(&token) {
UIView.animateWithDuration(0.7, delay: 1, options: .CurveEaseOut, animations: {
var loadingViewFrame = self.loadingView.frame
loadingViewFrame.origin.x += 600
self.loadingView.frame = loadingViewFrame
}, completion: { finished in
print("moved")
})
}
}