iOS从另一个视图的一侧滑动一个UIView(菜单)

Posted

技术标签:

【中文标题】iOS从另一个视图的一侧滑动一个UIView(菜单)【英文标题】:iOS Slide an UIView (Menu) from a side in another View 【发布时间】:2011-07-09 05:18:25 【问题描述】:

我想在按钮单击事件后从视图的一侧滑入菜单。在另一个 Buttonclick 之后,菜单应该从大视图中滑出...

我尝试过 CATransition 但我无法解决这个问题...

CATransition *animation = [CATransition animation];
[animation setDuration:1];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromBottom];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]] ;

[[menuView layer] addAnimation:animation forKey:@"@asdf"];        
[menuView setCenter:CGPointMake([menuView center].x, [menuView center].y + 450)];

它有点工作,但我不明白为什么.. :-/

【问题讨论】:

你应该发布你到目前为止所尝试的内容。 您所说的“有点用”是什么意思?它做了什么,与您想要的有何不同? 好的,“菜单”已滑入 - 没错,但有一个我不明白的 alpha 混合效果... 【参考方案1】:

如果您想自己实现它,一种方法是创建自定义视图并在视图控制器中为按钮添加按钮单击事件。

同时创建一个布尔变量来识别您的自定义视图是否可见。

单击时,如果菜单视图不可见,则执行以下操作:

-(void)viewDidLoad

    ...

    // ---------------------------------------------
    // create the custom menu view off screen
    // ---------------------------------------------
    menuView = [[MenuView alloc] initWithFrame:CGRectMake(-320, 0, 320, 480)];
    menuView.alpha = 0; // hide it so it doesn't show at the start, only show when slide in

    [self.view addSubview:menuView];

    ...


-(void)toggleMenu

    if(menuIsVisible)
    
        menuIsVisible = NO;

        [self hideMenu];
    
    else
    
        menuIsVisible = YES;

        [self showMenu];
    


-(void)hideMenu

    [UIView animateWithDuration:0.5 animations:^
        // note CGAffineTransforms doesn't use coordinates, they use offset
        // so an offset of (0,0) would bring the menuView back to the coordinate
        // when it was first instantiated, in our case, (-320, 0).
        menuView.transform = CGAffineTransformMakeTranslation(0,0);
     completion:^
        // hide the menu
        menuView.alpha = 0;
    ];


-(void)showMenu

    // show the menu
    menuView.alpha = 1;

    [UIView animateWithDuration:0.5 animations:^
        // note CGAffineTransforms doesn't use coordinates, they use offset
        // so an offset of (320,0) from coordinate (-320,0) would slide the
        // menuView out into view
        menuView.transform = CGAffineTransformMakeTranslation(320,0);
    ];

【讨论】:

【参考方案2】:

像ViewDeck 这样的控制器将使您能够做到这一点。

编辑: 版主,我不知道还有什么要补充的。它是开源代码,将添加一个由按钮控制的菜单,单击时将滑入,再次单击时滑出,类似于 Facebook 和 Path 的功能。您还可以通过幻灯片获得触摸事件。

这里的 github 页面上有一个如何使用它的示例:https://github.com/Inferis/ViewDeck#how-to-use-it 以及源代码中提供的几个示例项目。

【讨论】:

建议的代码有什么帮助?请扩展您的答案,使其不仅仅是一个链接,否则它可能会被删除。

以上是关于iOS从另一个视图的一侧滑动一个UIView(菜单)的主要内容,如果未能解决你的问题,请参考以下文章

iOS 让视图UIView 单独显示某一侧的边框线

iOS 让视图UIView 单独显示某一侧的边框线

iOS 上滑菜单

iOS Swift - 像Skype一样的底部菜单

iOS:以编程方式从另一个视图调用 onTapGesture

UIScrollView 后面如何与 UIView 交互