我计划实现类似于Facebook的东西,左侧有一个三横条按钮,可以将视图向右滑动一半以上,以显示其下方的另一个视图,以选择各种选项,如“朋友”,“消息“,”新闻提要“等。
我们应该如何实现那个动画呢。对某些示例代码的任何引用都会很好。
我附上了我正在拍摄的图标。
答案 0 :(得分:0)
假设您希望您的行为与Facebook的行为完全相同,我将按以下方式实施。 - 首先以正确的顺序在视图控制器上添加您的视图(应首先添加底部的视图)。例如,首先添加下面的tableview,然后将顶部“滑动”的内容添加到视图控制器视图的第二个
- 然后将UIPanGestureRecognizer添加到幻灯片顶部的视图中。此手势的处理程序应采用手势的x组件并相应地更新顶部的视图。添加结束案例,以便限制视图在特定范围内的移动。
- 最后,当平移手势结束以完全“打开”顶部视图或完全“关闭”顶部视图时触发例程。这将只是在另一个动画块中。这是pan的处理程序的示例实现:
- (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];
}
}
}
}
这里的“topview”是顶部滑动的视图。 openSlider和closeSlider方法只是动画块,可以将顶视图完全打开或完全关闭。