I have a constraint-based NSView layout which I can flip between states by
adjusting the constraint priorities and/or constants, and/or removing and
replacing some constraints. At the same time I make some views invisible or
visible again. All that stuff say is in a method on the view ..
-(void)updateConstraintsAndVariousViewPropertiesForState:(BOOL)state;
With the fairly straightforward UIView on iOS I’m used to doing this
[ myUIView layoutIfNeeded ]
[ myUIView animateWithDuration:duration animations:^{
[ myUIView
updateConstraintsAndVariousViewPropertiesForState:state ];
[ myUIView layoutIfNeeded ];
} ];
The view properties change, the second layoutIfNeeded re-evaluates the
constraints and fixed up all the frames and bounds etc and the whole thing
animates smoothly to the new state.
How do I do this with an *NSView*?
Doing some docs diving I found animator proxies, get the proxy, call the method
on the proxy and it should animate. So I tried
[ myNSView layoutSubtreeIfNeeded ];
[ myNSView updateConstraintsAndVariousViewPropertiesForState:state ];
[ [ myNSView animator ] layoutSubtreeIfNeeded ];
no animation, layout change, but no animation, just jumps. I put it in an
NSAnimationContext beginGrouping/endGrouping box … that didn’t help. Changing
some alpha properties in the same block did animate, but it seems the
layoutSubtreeIfNeeded doesn’t work with animator proxies. I tried just setting
constraint priorities using their animator proxies, that didn’t work either,
still just jumped. Looks like the only animator proxy able thing on a
constraint is the constant. So it looks like animator proxies aren’t going to
fly.
Where do I go next? I see a few comments about layer-backed views, but examples
are few, do I need to back myself with a layer for this?
_______________________________________________
Cocoa-dev mailing list ([email protected])
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 [email protected]