【问题标题】:Swipe to move a container view controller in from off screen滑动以将容器视图控制器从屏幕外移入
【发布时间】:2013-11-28 20:13:18
【问题描述】:

我有一个主视图控制器,在那个视图控制器上放着一点UIImageView。我希望能够滑动该图像视图并将包含的视图控制器滑动(动画)到屏幕上,有点像拉马尼拉文件夹的选项卡。

我已经尝试了各种方法来实现这一点,但我找不到解决方案!特别是因为我希望新的视图控制器来自屏幕外,并且我正在使用情节提要。

这是视图控制器的正常状态:

用户应该能够滑动图像视图,这会在屏幕上滑动一个新的视图控制器。幻灯片动画的结尾应如下所示:

有谁知道如何做到这一点?我不知道使用容器是否正确,但这只是我想出的最佳方法。

【问题讨论】:

    标签: ios uiviewcontroller uistoryboard gesture


    【解决方案1】:

    这应该很容易。创建一个容器视图控制器。创建子视图控制器并控制并从容器视图控制器中将嵌入 segue 拖动到子视图控制器。这将导致子视图控制器的视图在 viewDidLoad 期间安装在父视图中。

    现在从你的容器视图控制拖到你的父视图控制器的头文件中来创建一个 IBOutlet。

    将容器视图向右拖动到屏幕外。您还可以使用尺寸检查器来增加子视图的 X 坐标,直到它刚刚离开屏幕。

    现在将滑动手势识别器添加到您的父视图控制器的视图中,并将其连接到一个方法(我从手势识别器 IBActions 调用这些方法,即使它们不必是 IBActions。)

    在 action 方法中,使用 UIView 动画块将容器视图的框架的 X 坐标减小其宽度。这会将其动画化到屏幕上。

    (或者,您可以像其他海报建议的那样使用平移手势识别器,并在用户拖动时移动容器视图。如果这样做,您必须添加仅将容器视图向右移动的代码,而不是上/下/左,并在到达最终位置时停止移动。)

    自动布局更新:


    请注意,使用 AutoLayout 您应该真正使用约束来管理容器视图的位置。

    您将创建一个约束,将视图放置在您想要的位置,然后从该约束中控制拖动到您的代码中以创建一个出口。

    然后您将向约束添加一个恒定偏移量,足以将容器视图推离屏幕(如果容器视图与屏幕的右边缘齐平,那么您只需添加容器的宽度视图到约束常量,将视图向右移动它的宽度,就在屏幕外。

    当需要在屏幕上为视图设置动画时,您可以将约束常量设置回其原始值(可能为零),然后在动画块中调用 layoutIfNeeded。

    目标-C:

    IBOutlet NSLayoutConstraint *containerViewXConstraint;
    

    您更新后的 IBAction 方法可能如下所示:

    - (IBAction)slideView: (id) sender {
      containerViewXConstraint.constant = 0;  //Move the view on-screen
      [UIView animateWithDuration: 0.2
        animations: ^ {
          //animate the layout change
          [self.view layoutIfNeeded];
        }
      ]
    }
    

    在 Swift 3 中:

    @IBAction func slideView(_ sender: AnyObject) {
      containerViewXConstraint.constant = 0  //Move the view on-screen
      UIViewanimateWithDuration(0.2) {
          //animate the layout change
          self.view.layoutIfNeeded()
        }
    }
    

    【讨论】:

    • 非常感谢。这正是我所需要的。你是老板。
    • 试过了,没有 15 个代表,否则我会的!
    • @samuelb,我会支持你)谢谢你的回答!
    • @user3798602,请参阅我对 AutoLayout 的回答的更新,并提供 Objective-C 和 Swift 代码 sn-ps。
    【解决方案2】:

    您必须使用UIPanGestureRecognizer。您可以先让容器视图离开屏幕,然后跟踪用户的平移手势并相应地移动容器视图的 frame.origin.x。

    【讨论】:

      猜你喜欢
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多