0

我想要一个在点击时切换元素位置的按钮。

我当前的代码:

-(IBAction)menuTouched{

// Push menu
UITableView * sideMenu = [[UITableView alloc] initWithFrame:CGRectMake(1060, 88, 63, 661)];
sideMenu.backgroundColor = [UIColor redColor];

[self.view addSubview:sideMenu];

// Animate
[UIView animateWithDuration:1.25 animations:^{
    sideMenu.frame = CGRectMake(960, 88, 63, 661);
}];
}

单击按钮时,它会像我想要的那样为 tableview 设置动画。但是现在我想通过按下完全相同的按钮来为 tableview 设置动画。所以简而言之,我希望按钮通过更改 X 位置来切换表格视图。什么是最好/最简单的方法?

提前致谢。

4

6 回答 6

0

您可以使用之前设置的不同帧执行相同的动画

sideMenu.frame = CGRectMake(1060, 88, 63, 661);

通过检查查看您是否将表切换到或切换到执行相应的操作。

希望这可以帮助。

于 2013-05-13T12:37:50.440 回答
0

您将需要一个 bool 来存储您所在的状态,但您可以使用 button.selected 状态来实现这一点。类似这样的东西:

- (IBAction)menuTouched:(id)sender
{
    sender.selected = !sender.selected;

    if (sender.selected)
    {
        // toggle on stuff
    }
    else
    {
        // toggle off stuff
    }
}
于 2013-05-13T12:36:14.737 回答
0

在你的.h file添加里面

UITableView * sideMenu;
 BOOL checkInOut;

在 .m 文件中添加

- (void)viewDidLoad
{
    [super viewDidLoad];
     checkInOut=False;
    // Push menu
    sideMenu = [[UITableView alloc] initWithFrame:CGRectMake(1060, 88, 63, 661)];
    sideMenu.backgroundColor = [UIColor redColor];

    [self.view addSubview:sideMenu];
}


-(IBAction)menuTouched
{
 checkInOut=!checkInOut
 if(checkInOut)
  {
   // Animate
   [UIView animateWithDuration:1.25 animations:^{
    sideMenu.frame = CGRectMake(960, 88, 63, 661);
   }];
 }
 else
  {
   [UIView animateWithDuration:1.25 animations:^{
    sideMenu.frame = CGRectMake(1060, 88, 63, 661);
   }];
  }
}
于 2013-05-13T12:36:59.163 回答
0

试试看....

 [UIView beginAnimations: nil context: nil];
 [UIView setAnimationBeginsFromCurrentState: YES];
 [UIView setAnimationDuration: 0.5];
 myButton.frame = CGRectMake(0,420,320,120);
 [UIView commitAnimations];

希望我有所帮助。

于 2013-05-13T12:37:21.790 回答
0

您必须作为 UIButton 参考而不是 id 接收

- (IBAction)menuTouched:(UIButton *)sender
    {
        sender.selected = !sender.selected;

        if (sender.selected)
        {
            [UIView animateWithDuration:1.25 animations:^
    {
       UITableView * sideMenu = [[UITableView alloc] initWithFrame:CGRectMake(1060, 88, 63, 661)];
         sideMenu.backgroundColor = [UIColor redColor];
        [self.view addSubview:sideMenu];
        sideMenu.frame = CGRectMake(960, 88, 63, 661);
       }];
        }
        else
        {
            [UIView animateWithDuration:1.25 animations:^{
        [sideMenu removeForSuperView];
       }];
        }
    }
于 2013-05-13T12:41:25.273 回答
0

1.设置一个标志位来表示UITableView的当前状态。该语句需要3个变量。

BOOL isShow;
UITableView *sideMenu;
CGFloat posX;

2.初始设置viewDidLoad

-(void)viewDidLoad {
    isShow=NO;
    //to do something...
    sideMenu = [[UITableView alloc] initWithFrame:CGRectMake(1060, 88, 63, 661)];
    sideMenu.backgroundColor = [UIColor redColor];
    [self.view addSubview:sideMenu];
}

3.UITableView显示的只是frame X坐标的变化。所以你可以根据toggles'state计算posX。注意不要每次点击都创建UITableView。把UITableView创建代码放在viewDidLoad函数上。

-(IBAction)menuTouched{
   posX=isShow ? 1060 : 960       
   // Animate
   [UIView animateWithDuration:1.25 animations:^{
       sideMenu.frame = CGRectMake(posX, 88, 63, 661);
   }];
   isShow=!isShow;  //boggle button
}
于 2013-05-14T06:12:05.757 回答