我计划实现类似于 Facebook 的东西,在左侧点击一个三横条按钮,将视图向右滑动一半以上,以在其下方显示另一个视图,以在“朋友”、“消息”等各种选项之间进行选择, “新闻提要”等
我们应该如何实现那个动画。对一些示例代码的任何引用都会很好。
我正在附上我正在使用的图标。
我计划实现类似于 Facebook 的东西,在左侧点击一个三横条按钮,将视图向右滑动一半以上,以在其下方显示另一个视图,以在“朋友”、“消息”等各种选项之间进行选择, “新闻提要”等
我们应该如何实现那个动画。对一些示例代码的任何引用都会很好。
我正在附上我正在使用的图标。
假设您希望您的行为与 Facebook 完全相同,我将通过以下方式实现它。- 首先以正确的顺序在视图控制器上添加您的视图(应首先添加底部的视图)。比如下面的tableview会先添加,然后上面“滑动”的内容会第二个添加到view controller的view中
- 然后将 UIPanGestureRecognizer 添加到幻灯片顶部的视图中。此手势的处理程序应采用手势的 x 组件并相应地更新顶部的视图。添加终端案例,以便将视图的移动限制在一定范围内。
-最后,当平移手势结束时触发例程以完全“打开”顶部视图或完全“关闭”顶部视图。这将只是在另一个动画块中。这是平底锅处理程序的示例实现:
- (void)pan:(UIPanGestureRecognizer *)gesture
{
float translation = [gesture translationInView:self.view].x;
//don't allow for moving topview further left than screen
if (self.sliderOpen == NO && translation < 0) {
translation = 0;
} else if (self.sliderOpen == YES && translation < -OPEN_POS) {
translation = -OPEN_POS;
}
[self.topView setFrame:CGRectMake(self.sliderOpen == YES ? OPEN_POS + translation : translation, self.topView.frame.origin.y, self.topView.frame.size.width, self.topView.frame.size.height)];
if (gesture.state == UIGestureRecognizerStateEnded) {
//get position, then set slide to open or closed
float endPosition = self.topView.frame.origin.x;
//set transition sensitivity based on open/closed state
if (self.sliderOpen == NO) {
//here sensitivity causes more likely open state
if (endPosition > OPEN_POS/3) {
[self openSlider];
} else {
if (endPosition != 0) {
[self closeSlider];
}
}
} else {
//here sensitivity causes more likely closed state
if (endPosition > 2*OPEN_POS/3) {
if (endPosition > OPEN_POS) {
[self reOpenSlider];
} else {
[self openSlider];
}
} else {
[self closeSlider];
}
}
}
}
这里的“顶视图”是在顶部滑动的视图。openSlider 和 closeSlider 方法只是将顶视图定位为完全打开或完全关闭的动画块。