I have always put the thing that I'm animating into the animation block: - (IBAction)animateIt:(id)sender { static BOOL small = NO;
small = !small; CGFloat newWidth = small ? self.view.frame.size.width / 2 : self.view.frame.size.width; [UIView animateWithDuration:1 animations: ^{ self.containerWidthConstraint.constant = newWidth; [self.view layoutIfNeeded]; }]; } > On Dec 28, 2016, at 4:14 PM, Doug Hill <cocoa...@breaqz.com> wrote: > > Hi Ken, > > I uploaded a sample project here: > > https://github.com/djfitz/TestAutolayoutAnimations > > I tried to strip this down to what is needed to show the behavior I see. > > My code to actually do the animation is this: > > - (IBAction)animateIt:(id)sender > { > static BOOL small = NO; > > if( small ) > { > [self.view layoutIfNeeded]; > > self.containerWidthConstraint.constant = > self.view.frame.size.width; > > [UIView animateWithDuration:1 animations: > ^{ > [self.view layoutIfNeeded]; > }]; > } > else > { > [self.view layoutIfNeeded]; > > self.containerWidthConstraint.constant = > self.view.frame.size.width / 2; > > [UIView animateWithDuration:1 animations: > ^{ > [self.view layoutIfNeeded]; > }]; > } > > small = !small; > } > > 'container view' has one subview which is a UILabel. The label is pinned to > the superview edges via autolayout constraints. (e.g. trailing, leading, top, > bottom edges all pinned to superview edges.) > > I tried a few different variations, including leaving out the first > layoutIfNeeded (which some people say should be done, others not). > > The exact behavior is that the label will resize to the new size immediately > and reflow the text, then the container view will animate it's size change. > It would be nice if both the label and the container view animate at the same > time. > Also, as I mentioned, a button will exhibit the same behavior, probably > because it has a UILabel inside it to show the button text. > > Thanks again for any ideas. > > Doug Hill > > >> On Dec 28, 2016, at 12:50 PM, Ken Thomases <k...@codeweavers.com> wrote: >> >> On Dec 28, 2016, at 1:55 PM, Doug Hill <cocoa...@breaqz.com> wrote: >>> >>> I can now animate my constraint changes but I notice that subviews aren't >>> animated. For example, I have a single view with a width constraint, and >>> this view has a label as a subview that expands to the size of it's parent >>> view via edge constraints. >>> I can change the width constraint constant of the parent view at runtime >>> and it animates very well. However, the subviews jump into place >>> immediately then the parent view animates into place. I see the same >>> behavior with a button as a subview. >> >> Show exactly how you're animating the constraint changes. Are you really >> animating the change of the constraint or are you doing a layoutIfNeeded >> within an animation context? Even if the former, are you calling any >> methods that force layout (layoutIfNeeded or similar)? If so, where/when? >> >> Regards, >> Ken _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com