3

----window1----- ----window2----- 有人可以帮我解决这个问题吗?

*有一个按钮,当点击它时,滑动打开一个 UIView,点击的按钮仍然在它的左边。

*再次点击此按钮时,会使 UIView 向后滑动。

4

3 回答 3

5

你描述的很简单。我们称从右侧滑入的视图为抽屉(“drawerView”)。将抽屉视图设置为视图控制器主视图的子视图。

使那个“抽屉”视图成为容器视图。把你想要的东西都放进去。(您的文本视图、按钮等)还将您的按钮放在此视图中。将该按钮连接到视图控制器中的操作“slideDrawer”。

然后确保“剪辑子视图”为假,并使用左箭头键将按钮从抽屉视图的左边缘移开。在 IB 中它会消失,但不要担心。IB 不像您正在运行的程序那样尊重“剪辑子视图”标志。

为您的抽屉视图创建一个出口并将其链接到您的代码。

一旦您的抽屉视图看起来完全符合您的要求,请注意它在“尺寸检查器”中的 x 坐标。让我们将该值称为 kVisibleX。然后将该视图向右拖动,直到它离开屏幕。该按钮在 IB 中不可见,但在运行时仅在窗口边缘可见。(就像你在第一张图片中展示的那样)

注意抽屉视图在屏幕外时的 x 坐标。让我们将该值称为 kOffscreenX

将布尔实例变量“drawerIsShowing”添加到您的视图控制器。

现在写一个IBAction方法slideDrawer:

- (IBAction) slideDrawer: (id) sender;

在该方法中,检查抽屉IsShowing 以查看抽屉当前是否可见。如果是,请将其滑出屏幕。如果不是,请在屏幕上滑动它。

- (IBAction) slideDrawer: (id) sender;
{
  CGFloat newX;
  if (drawerIsShowing)
    newX = kOffscreenX;
  else
    newX = kVisibleX;
  [UIView animateWithDuration: .25
  animations: 
  ^{
    CGRect drawerFrame = drawerView.frame;
    drawerFrame.origin.x = newX;
    drawerView.frame = drawerFrame;
  }
drawerIsShowing = !drawerIsShowing;
}
于 2012-06-11T00:33:58.840 回答
0

我会让窗口 1 是 view1,窗口 2 是 view2。用视图中需要的任何内容填充这些视图中的每一个。如果您希望相同的按钮出现在两个视图中,请在具有相同文本的每个视图中放置一个按钮。对用户来说,它是同一个按钮。将视图 1 上的按钮操作推到视图 2。视图 2 将使用您告诉它的任何内容进行初始化。按下视图 2 中的按钮将弹出视图并将其返回到视图 1...

我希望这会有所帮助。如果您需要更具体的帮助,请提供更多信息,我应该能够进一步帮助您。

于 2012-06-07T17:21:24.653 回答
0

声明一个 BOOL 来检查视图是否隐藏。

在.h

BOOL _isContentVisible;

在.m

-(IBAction)showHideContentView:(id)sender
{
    //BOOL isContentVisible= CGRectIntersectsRect(self.view.bounds, _sideContentScrollView.frame);

    [UIView animateWithDuration:1.0f
                          delay:0
                        options:UIViewAnimationOptionBeginFromCurrentState
                     animations:^{
                         //hide if visible else show
                         if (_isContentVisible) { // Hide
                             _isContentVisible = NO;
                             [_sideContentView setFrame:CGRectMake(-320, 0, 360, 748)];// 40 is assumed to button size
                         }
                         else { // Show
                             _isContentVisible = YES;
                             [_sideContentView setFrame:CGRectMake(0, 0, 360, 748)];
                         }
                     }
                     completion:^(BOOL finished) {
                         if (finished) {

                         }
                     }];
}
于 2013-08-12T12:29:37.947 回答