【问题标题】:Slider view for iOSiOS 的滑块视图
【发布时间】:2012-06-11 18:55:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: uiview uibutton uilabel xib uiviewanimation


    【解决方案1】:

    声明一个 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) {
    
                             }
                         }];
    }
    

    【讨论】:

      【解决方案2】:

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

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

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

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

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

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

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

      现在写一个IBAction方法slideDrawer:

      - (IBAction) slideDrawer: (id) sender;
      

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

      - (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;
      }
      

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • sunrize920,我希望视图在同一个窗口(RootView)中打开和关闭。所以这无济于事
        • 如果你删除了过渡动画,就好像它是同一个视图,使用的代码类似于 [self presentModalViewController:vc animated:NO];所以基本上使两个视图相同,除了向 view2 添加任何其他内容。在过渡中没有动画,它会使事情看起来似乎出现。我就是这样做的……但如果你坚持要在同一个窗口中显示一个 uiview,那就完全不同了
        • 感谢你的日出,但我相信它可以在同一个视图中做到这一点
        猜你喜欢
        • 2022-01-15
        • 1970-01-01
        • 1970-01-01
        • 2013-05-11
        • 2010-12-17
        • 1970-01-01
        • 2014-02-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多