实现半屏动画

时间:2012-09-20 21:35:12

标签: iphone objective-c ios cocoa-touch uianimation

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

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

我附上了我正在拍摄的图标。

enter image description here

1 个答案:

答案 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方法只是动画块,可以将顶视图完全打开或完全关闭。