I wanted to resize an UIView, my code works perfect in iOS 7.1 but when I run it in iOS 8 it didn't work properly (I will explain below).
I have my UIView int the storyboard with values (0,67,511,320), I want to resize to full screen on iPad, so I added the following code:
[UIView animateWithDuration:0.5 animations:^{
CGRect frame = containerView.frame;
frame.origin.x = 0;
frame.origin.y = 67;
frame.size.height = 643;
frame.size.width = 1024;
containerView.frame = frame;
...
}completion:^(BOOL finished) {
...
}];
I wanted something like:
_________________________________
| | |
| | |
| A | |
|___________| |
| |
| BACKGROUND |
| |
| |
|_________________________________|
|
V
_________________________________
| |
| |
| |
| A |
| |
| |
| |
| |
|_________________________________|
But it starts the animation like (0,67,0,0) to (0,67,511,320)
Any clue about what is happening? Or alternative?
An object that manages the content for a rectangular area on the screen. iOS 2.0+ iPadOS 2.0+ Mac Catalyst 13.1+ tvOS 9.0+
You don't need to use [weak self] in static function UIView. animate() You need to use weak when retain cycle is possible and animations block is not retained by self.
The contents of your block are performed on the main thread regardless of where you call [UIView animateWithDuration:animations:] . It's best to let the OS run your animations; the animation thread does not block the main thread -- only the animation block itself.
To be exact, whenever you want to animate the view, you actually call layoutIfNeeded on the superview of that view. Try this instead: UIView. animate(withDuration: 0.1, delay: 0.1, options: UIViewAnimationOptions.
You should disable pregenerated constraints. The most simple way is to use autoresizing masks instead of constraints for animating view.
containerView.translatesAutoresizingMaskIntoConstraints = YES;
You can put this code to your -viewDidLoad
method or just above [UIView animateWithDuration:...
is autolayout enabled? maybe in iOS 8 some additional constrains are adding during build time
try to call [self.view layoutIfNeeded];
in animatin block, after animation code itself
UPDATE
__block CGRect frame = containerView.frame;
frame.origin.x = 0;
frame.origin.y = 67;
frame.size.height = 643;
frame.size.width = 1024;
[UIView animateWithDuration:0.5 animations:^{
containerView.frame = frame;
...
}completion:^(BOOL finished) {
...
}];
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With