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 (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

Reply via email to