我正在创建一个小的幻灯片菜单而不使用任何库。通过使用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语句,但我无法将其关闭。
请帮忙。
提前致谢
答案 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,则表示必须关闭它。如果它小于零,则表示你必须显示它。