I have a rectangular, menu-style view (view 1) laid across the window approx 100 px down (i.e. there is space above it in the window), and need to animate drop-down content (view 2) appearing lower down the screen from view 1. I need the animation to start at the bottom boundary of view 1 – much as with the iOS 5 notification pull-down, except from a specific point further down the screen.
I can’t simply slide view 2 in from off screen, since for various reasons I can’t overlay a UIView that would hide its motion until it reached the lower edge of view 1.
I’ve checked out this answer – Programmatically reveal a UIView – but I don’t believe it’s appropriate since I want the menu to slide, not be revealed from a static start point. And, as pointed out, I can’t “hide” the sliding view with another view.
How do I slide down view 2 so that it is revealed as it emerges from the lower boundary of another view, similar to the io5 notification pull-down?
Contain both subviews in a superview with it’s bounds clipped. So you’d have your superview (let’s say app window), and within that a view (with bounds clipped). Let’s call this a container view. This container would originate at whatever Y coordinate your current inserted/always visible view does, but it’s height would extend tall enough to encompass the fully-expanded “sliding” third subview.
So within your container view, you’d place your first always visible view (view 1) at coordinates 0x 0y, and then you’d insert your sliding view (view 2) beneath that, with the frame y offset for view 2 set accordingly and at sufficient negative value to hide it completely by means of the over-layed view 1 and the clipped bounds of the container view.
As the user drags (or whatever means you use to disclose your ‘sliding’ view), the 3rd view slides down from below the always present view, but always stays within the overarching clipped view. Viola.