0

我计划实现类似于 Facebook 的东西,在左侧点击一个三横条按钮,将视图向右滑动一半以上,以在其下方显示另一个视图,以在“朋友”、“消息”等各种选项之间进行选择, “新闻提要”等

我们应该如何实现那个动画。对一些示例代码的任何引用都会很好。

我正在附上我正在使用的图标。

在此处输入图像描述

4

1 回答 1

0

假设您希望您的行为与 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 方法只是将顶视图定位为完全打开或完全关闭的动画块。

于 2013-06-24T05:44:52.753 回答