滑动以从屏幕外移动容器视图控制器

 万超英先生 发布于 2023-02-13 21:59

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

我已经尝试了各种方法来实现这一点,我找不到解决方案!特别是因为我希望新的视图控制器来自屏幕外,我正在使用故事板.

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

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

有谁知道如何实现这一目标?我不知道使用容器是否正确,但这只是我想出来的最佳方式.

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

    现在,从容器视图中控制拖动到父视图控制器的头文件中,以创建IBOutlet.

    将容器视图拖出屏幕右侧.您还可以使用大小检查器来增加子视图的X坐标,直到它只是在屏幕外.

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

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

    (或者,您可以使用平移手势识别器作为另一个海报建议,并在用户拖动时移动容器视图.如果您这样做,则必须添加仅将容器视图移动到右侧而不是向上/向下移动的代码/ left,一旦到达最终位置,就停止移动它.)

    自动布局更新:


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

    您将创建一个约束,将视图放置在您想要的位置,并从该约束控制拖动到您的代码中,以便为它创建一个出口.

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

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

    Objective-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()
        }
    }
    

    2023-02-13 22:07 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有