打开/关闭菜单条件

时间:2014-10-29 06:25:28

标签: iphone ios7 xcode5

我正在创建一个小的幻灯片菜单而不使用任何库。通过使用UIDynamics,我可以通过单击IBAction按钮来滑动打开菜单。

我想问一下如何通过点击相同的btn来关闭菜单。可以通过单击另一个btn来关闭菜单,例如"关闭"在菜单幻灯片中输入btn,但我也想点击打开它的同一菜单btn关闭它。

这是显示菜单的功能

-(BOOL)showMenu:(BOOL)yesNO{

    //cleaning the screen of any behaviors
    [self.animator removeAllBehaviors];

    //animation will go from side to side
    CGFloat graxityDirectionX = (yesNO) ? 0.1 : -1.0;

    //detecting the collision of the menu
    CGFloat collision = (yesNO) ? menuWidth : -menuWidth;

    //insitating the gravity and telling it work on the menu
    UIGravityBehavior *gravity = [[UIGravityBehavior alloc] initWithItems:@[self.menuView]];

    gravity.gravityDirection = CGVectorMake(graxityDirectionX, 0);

    //adding the animation
    [self.animator addBehavior:gravity];

    //instaniating the collision and telling the menu were to stop
    UICollisionBehavior *collisionMenu = [[UICollisionBehavior alloc] initWithItems:@[self.menuView]];

    //telling the menu where and what to collide it by using an invisible line
    [collisionMenu addBoundaryWithIdentifier:@"menuBoundry" fromPoint:CGPointMake(collision, 580) toPoint:CGPointMake(collision, 0)];

    //adding the collision
    [self.animator addBehavior:collisionMenu];

    //setting the bounce
    UIDynamicItemBehavior *menuBounce = [[UIDynamicItemBehavior alloc]initWithItems:@[self.menuView]];
    menuBounce.elasticity = 0;
    [self.animator addBehavior:menuBounce];

   return YES;
}

这就是我在IBAction中调用它的方式

- (IBAction)menuAction:(id)sender {
   [self showMenu:YES];
}

我尝试过不同类型的if语句,但我无法将其关闭。

请帮忙。

提前致谢

2 个答案:

答案 0 :(得分:5)

我误解了动态行为。好的,我建议使用BOOL。声明BOOL

BOOL isMenuVisible;

然后在IBAction中使用它

- (IBAction)menuAction:(id)sender {
    if(isMenuVisible == NO){
       self.isMenuVisible = YES;
       [self showMenu:self.isMenuVisible];
    }else{
       self.isMenuVisible = NO;
       [self showMenu:self.isMenuVisible];
    }
}

答案 1 :(得分:0)

永远不要在此任务中使用布尔值。因为你的方法有菜单宽度" showMenu"。获取类级属性指定菜单宽度。在您的方法中执行检查" menuAction"。如果菜单宽度大于0,则表示必须关闭它。如果它小于零,则表示你必须显示它。