What I would do is devise an animation between the collapsed state and the expanded state. (This might involve changing one view over time, or fading / moving between two different views, one in the collapsed state and the other in the expanded state.) Now drive the animation in accordance with the gesture, as I explain here:
https://stackoverflow.com/a/22677298/341994
Basically, you attach the animation to a layer, with its speed
set to 0 so that nothing actually happens. Then you track the gesture and keep changing the timeOffset
of the layer to change the "frame" of the animation to match.
(One can't help observing, in this connection, that this is what is already done for you by a custom transition animation - i.e., a transition between the views of two view controllers where you add your own interactive animation. So, if you are iOS 7 only, it might be simplest to actually use a custom transition animation. That actually is how the weekly-monthly transition in the Calendar app is achieved, which you so appositely mention in a comment - it's just a push/pop transition with a custom interaction animation.)