首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

IOS在同一屏幕上的子viewControllers之间转换

在 iOS 开发中,在同一屏幕上的子 ViewControllers 之间转换是一种常见的场景。以下是实现此功能的一些建议和步骤:

  1. 使用 UIViewControllerTransitionCoordinator

使用 UIViewControllerTransitionCoordinator 可以方便地在两个子 ViewControllers 之间实现动画过渡。以下是一个简单的例子:

代码语言:swift
复制
import UIKit

class FirstViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Customize the view accordingly
    }
}

class SecondViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Customize the view accordingly
    }
}

class ViewController: UIViewController, UIViewControllerTransitionCoordinator {
    let firstViewController = FirstViewController()
    let secondViewController = SecondViewController()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Add the first and second view controllers
        addChildViewController(firstViewController)
        addChildViewController(secondViewController)
        
        // Set the initial view controller
        setViewControllers([firstViewController], direction: .forward, animated: true, completion: nil)
    }
}
  1. 使用Storyboard

在 Storyboard 中,你可以使用 UIViewControllerTransitionCoordinator 实现 ViewController 之间的过渡效果。以下是一个例子:

代码语言:swift
复制
import UIKit

class FirstViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Customize the view accordingly
    }
}

class SecondViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Customize the view accordingly
    }
}

class ViewController: UIViewController {
    let firstViewController = FirstViewController()
    let secondViewController = SecondViewController()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Add the first and second view controllers
        addChildViewController(firstViewController)
        addChildViewController(secondViewController)
        
        // Set the initial view controller
        setViewControllers([secondViewController], direction: .forward, animated: true, completion: nil)
        
        // Add the first and second view controllers to the container view
        let containerView = UIView(frame: view.frame)
        addSubview(containerView)
        
        containerView.addSubview(firstViewController.view)
        containerView.addSubview(secondViewController.view)
    }
}
  1. 手动实现过渡效果

你还可以手动实现两个 ViewController 之间的过渡效果。例如,你可以创建一个新的 UIView,将其添加到屏幕顶部,并在其中播放两个 ViewController 之间的过渡动画。在 viewDidLoad 方法中添加以下代码:

代码语言:swift
复制

import UIKit

class FirstViewController: UIViewController {

代码语言:txt
复制
override func viewDidLoad() {
代码语言:txt
复制
    super.viewDidLoad()
代码语言:txt
复制
    // Customize the view accordingly
代码语言:txt
复制
}

}

class SecondViewController: UIViewController {

代码语言:txt
复制
override func viewDidLoad() {
代码语言:txt
复制
    super.viewDidLoad()
代码语言:txt
复制
    // Customize the view accordingly
代码语言:txt
复制
}

}

class ViewController: UIViewController {

代码语言:txt
复制
let firstViewController = FirstViewController()
代码语言:txt
复制
let secondViewController = SecondViewController()
代码语言:txt
复制
override func viewDidLoad() {
代码语言:txt
复制
    super.viewDidLoad()
代码语言:txt
复制
    // Add the first and second view controllers
代码语言:txt
复制
    addChildViewController(firstViewController)
代码语言:txt
复制
    addChildViewController(secondViewController)
代码语言:txt
复制
    // Set the initial view controller
代码语言:txt
复制
    setViewControllers([secondViewController], direction: .forward, animated: true, completion: nil)
代码语言:txt
复制
    // Add the first and second view controllers to the container view
代码语言:txt
复制
    let containerView = UIView(frame: view.frame)
代码语言:txt
复制
    addSubview(containerView)
代码语言:txt
复制
    containerView.addSubview(firstViewController.view)
代码语言:txt
复制
    containerView.addSubview(secondViewController.view)
代码语言:txt
复制
    // Add the custom transition view to the container view
代码语言:txt
复制
    let transitionView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
代码语言:txt
复制
    transitionView.backgroundColor = UIColor.red
代码语言:txt
复制
    containerView.addSubview(transitionView)
代码语言:txt
复制
    // Present the second view controller
代码语言:txt
复制
    secondViewController.view.frame = view.frame
代码语言:txt
复制
    secondViewController.view.alpha = 0
代码语言:txt
复制
    transitionView.frame = CGRect(
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS开发之使用Storyboard预览UI不同屏幕运行效果

公司做项目一直使用Storyboard,虽然有时会遇到团队合作Storyboard冲突问题,但是对于Storyboard开发效率之高还是比较划算。...言归正传,接下来就介绍一下如何使用Storyboard来预览UI不同那个分辨率屏幕运行效果,这就很好避免了每次调整约束都要Run一下才能看到不同平面上运行效果,今天博客就来详述一下如何使用Storyboard...一、创建工程添加测试使用UIImageView     创建一个测试工程,ViewController添加4个不同尺寸UIImageView, 并且添加上不同约束,最后添加上不同文艺小清新图片...,最终Storyboard控件和约束如下所示。...三、添加预览设备     1.双击上面加号按钮回出现预览窗口,预览窗口左下方有一个加号按钮,通过加号按钮你可以添加不同尺寸屏幕进行预览,从3.5到iPad应有尽有,添加是的截图如下所示。

2.2K80

iOS多控制器之UINavigationController&UITableBarController1. 多控制器2. UINavigationController3. UITableBarCont

第一次显示出来自控制器; 2,addChildViewController:此方法是UIViewController方法,可以用来添加控制器; 3,通过属性viewControllers进行设置...以栈形式保存控制器 @property(nonatomic,copy) NSArray *viewControllers; @property(nonatomic,readonly) NSArray...常见问题 导航条高度:44 UINavigationController保存控制起形式:栈 获取UINavigationController下面的所有的控制器:viewControllers /...UITabBarButtonUITabBar中得位置是均分,UITabBar高度为49。 UITabBar结构⼤大致如下图所示: ?...:c1]; tb.viewControllers=@[c1,c2,c3,c4]; 注意:展示顺序和添加顺序一致,和导航控制器中不同,展现在眼前是导航控制器根视图控制器也就是第一个添加到导航控制器视图

1.2K40

Cocoa编程中视图控制器与视图类详解

UIView是iPhone屏幕很多控件基础类。每个iPhone用户界面都是由显示UIWindow(这其实也是个特殊UIView)内众多UIView及其专门化子类构建。...UIActionSheet  所有控件(控件是将用户触摸转换为回调触发器屏幕对象。)...UIViewController实例负责设置视图外观和它显示视图。 UINavigationController类 1. 导航控制器使用内置动画在视图之间切换; 2....UITabBarController类       选项卡类允许用户多个视图控制器之间移动并在屏幕底部可定制该栏。...•管理视图上显示数据。 •设备方向变化,调整视图大小以适应屏幕。 •负责视图和模型之间数据及请示传递。 2.

5K50

iOS-可交互滑动TabBarController

1.先看一下效果 左右滑动交互TabBarController 2.iOS7.0以前,要实现这样效果,只有自定义TabBar了,但这很麻烦。...而在iOS7.0以后,苹果在UITabBarControllerDelegate中增加了下面两个代理方法: /** * 实现该代理,即可以实现自定义各界面切换时动画(如平推,缩放,淡入淡出等)...* fromVC:当前显示VC * toVC:将要切换到VC * 返回一个自定义切换动画,本例中,我自定义了一个平推效果动画 */ - (nullable id <UIViewControllerAnimatedTransitioning...NSArray *viewControllers = tabBarController.viewControllers; if ([viewControllers indexOfObject...- (CGFloat)percentForGesture:(UIPanGestureRecognizer *)gesture{ // 通过手势屏幕中滑动距离来判断当前执行百分比

1.7K40

Xcode:处理故事板更好方式 享受Interface Builder提示和技巧

另一方面,许多开发人员构建具有复杂导航功能大型多屏幕应用程序时仍然会遇到一些界面问题。 本文中,我将在您处理项目中故事板和笔尖时分享一些好做法。...如果在同一个Storyboard中有多个viewControllers,则必须使用instantiateViewController(withIdentifier:_) 现在,当你需要初始化这个viewController...但即使您在单个Storyboard中有多个viewControllers,使用seguesviewControllers之间导航也许不是一个好主意: 你需要为每个segue命名,仅此一个就容易出错。...从iOS 7开始,Interface Builder为您提供了“展开”导航堆栈方法。 Exit outlet in Storyboard Unwind segue允许您指定返回屏幕目的地。...在这种情况下,从按钮拖动到“退出”出口是期望代码已经项目中。 通常,当您为按钮创建动作插座时,它会将代码放在拥有该按钮同一个类中。

1.4K30

View Controller编程指南

每个ViewController管理你应用程序用户界面的一部分,以及该界面和底层数据之间交互。 ViewController也用于您用户界面的不同部分之间转换。...每个iOS应用程序都应该能够iPad运行,并且可以几种不同大小iPhone运行。...当涉及容器ViewController时,UIKit可能会修改链来简化您必须编写代码。不同演示风格对于它们屏幕显示方式有不同规则 - 例如,全屏显示总是覆盖整个屏幕。...UIDocument对象负责协调数据加载和保存,而UIViewController对象协调屏幕视图显示。...适配修改 应用程序可以各种iOS设备运行,并且ViewController被设计为适应这些设备不同大小屏幕

1.2K20

UINavigationController 导航控制器概念属性方法

概念 UINavigationController 继承于 UIViewController 包含:viewcontrollers、NavigationBar、Toolbar 导航控制器是一个堆栈结构,...(iOS7之后,导航中右划会进行pop操作,设置这个enable可以控制设置手势是否失效) @property(nullable, nonatomic, readonly) UIGestureRecognizer...*barHideOnSwipeGestureRecognizer; 10、屏幕滑动时候是否隐藏导航栏,常用于tableView,滑隐藏导航栏,下滑显示,带动画效果 @property (nonatomic...; 13、敲击屏幕可以隐藏与显示导航栏 @property (nonatomic, readwrite, assign) BOOL hidesBarsOnTap; 14、获取敲击屏幕手势 @property...)animated; 这个方法是为了iOS方法命名统一,导航中,其作用和push一样 - (void)showViewController:(UIViewController *)vc sender

2.1K60

兼容 - 纯代码完美适配 iPhoneX

landscape是风景模式,也就是横屏 看一下各种iPhone尺寸屏幕分辨率和宽高比 设备 屏幕尺寸 分辨率(pt) Reader 分辨率(px) 宽高比 iPhone 3GS 3.5吋 320x480...不做处理的话, iponeX上会出现变形,我们以宽缩放比为正比缩放比,这样不管以后屏幕高度如何变化,都不会出现变形情形。...]; }else{ self.automaticallyAdjustsScrollViewInsets = NO; } iPhone X push时候TabBar移 系统原生Tabbar...push时候会上移 UINavigationController基类重写pushViewController代理方法,Push时候修正一下TabBarframe @interface...定位 IOS11,未在plist文件中配置NSLocationAlwaysAndWhenInUseUsageDeion,系统框不会弹出。 <!

4.4K20

iOS开发UINavigation系列四——导航控制器UINavigationController

(NSArray *)viewControllers animated:(BOOL)animated; //压入新视图控制器 - (void)pushViewController...//iOS7之后,导航中右划会进行pop操作,设置这个enable可以控制设置手势是否失效 @property(nullable, nonatomic, readonly) UIGestureRecognizer... *interactivePopGestureRecognizer; 四、iOS8后导航新特性 //这个方法是为了iOS方法命名统一,导航中,其作用和push一样 - (void)showViewController...) BOOL hidesBarsWhenKeyboardAppears; //屏幕滑动时候隐藏导航栏,常用于tableView,滑隐藏导航栏,下滑显示,带动画效果 @property (nonatomic...; //敲击屏幕可以隐藏与显示导航栏 @property (nonatomic, readwrite, assign) BOOL hidesBarsOnTap; //敲击屏幕手势 @property

1.8K20

IOS开发基础系列】Storyboard专题

与传统 nib 文件不同,故事板文件有以下优点:     1、通过一个故事板文件,你能对所有的窗口以及它们之间关系一目了然。...因为所有的窗口设计一个故事板文件中,你会更容易把握每次改动带给每个窗口变化。     2、故事板中可以描述各个窗口之间转换。这种转换叫做 segue(连接)。...iOS5有个更酷特性是你可以写自己 ViewController 容器——本书后续教程中介绍。         ...如果你连接 cell 一个Label 到ViewController IBOutlet,那么会有多个Label 试图使用相同 IBOutlet。那就麻烦了。...你也可以通过下面的 wAny 和hAny 调整它大小,也可以通过调整 Attributes inspector 指定为具体某种屏幕大小。

77930

UINavigationControllersetViewControllers方法

iOS开发中,UINavigationController是很常用Controller,对它一般操作就像操作一个栈,push和pop。...但也经常会遇到pop和push无法优雅完成操作,比如退回到中间某个VC,或者第一个VC之前添加一个VC等,更甚者要重新构造整个VC顺序,这时候setViewControllers方法就排上用场了...,它使对VC栈操作不再局限于push和pop,而是构造整个VC栈并应用到当前UINavigationController中,这个方法支持iOS3.0+,放心使用。...#Sample NSMutableArray * viewControllers = [self.navigationController.viewControllers mutableCopy]; [...setViewControllers:viewControllers animated:YES]; // [viewControllers relase] // if non-arc 感谢 Allen

79120

阅读器多种翻页设计与实现

checkNullRect:方法是避免iOS9可能出现frame为CGRectNullcrash。...对前面两种翻页模式进行分析,我们可以发现一些共性,比如说以页(VC)为单位、实时获取界面VC和页面之间有先后顺序等。...效果分解: 1、当用户滑动过程,视图要跟随手指移动; 2、当用户往上滑然后松开时,视图要带有加速度往上滑动;(附加特性:滑动过程中用户可以通过重复这个行为加速滑动) 3、视图滑动过程中...B是我们创建第一个vc,大小和UIScrollViewsize一样大;当我们向下滑动时,我们创建vcA放在B上面; 当我们滑到vcA完全展示时候,vcB已经滑动到屏幕外面(红色为窗口大小);...A: 手动填充到满屏幕

3.1K10

iOS:分割控制器UISplitViewcontroller

分割控制器UISplitViewController 功能:它也是ipad一个新特性,屏幕可以同时显示两个控制器,左边一个,右边一个;左边为主控制器,右边为详细控制器,主控制器可以根据需要显示或隐藏...它对于iPhone虽然可以使用,但是不具备同时显示特点,iPhone样式,就是导航控制器切换模式。...介绍 Split View通常只是一个基本元素,它填满整个屏幕,不可能把Split View放到其他什么内部,一般情况下是提供给整个app。...基本样式截图为: 故事板布局样式截图为: 下面我们就通过纯代码方式创建如下: 1、创建两个控制器类,一个为主控制器类MasterViewController,一个为详细控制器类DetailViewController...strong,nonatomic)UISplitViewController *splitViewController; //声明分割控制器 @end 创建分割控制器、主控制器、详细控制器,并设置它们之间关系

1.8K30

iOS透明导航栏平滑过渡(进阶版)引实现过程结

引 如我传送门:iOS导航栏切换界面时隐藏和显示中所说,现在很多App个人中心模块都是不保留导航栏,会直接使导航栏透明,比如做很好QQ个人信息界面: 为什么说QQ做很好呢?...而很多App做法其实比较粗糙,类似于我传送门:iOS导航栏切换界面时隐藏和显示中做法,需要导航栏透明时,直接将导航栏隐藏起来。...设置导航栏背景透明度 导航栏应该是有很多view,我们要做是只让背景透明,而保留标题、返回按钮。iOS没有直接给我们提供对于导航栏背景view访问途径,那么我们只能自己来找了。...首先我们遍历打印出UINavigationBar所有视图,是所有,包括视图一层层视图,来看看到底导航栏都包含了哪些东西: 上面这张图就是导航栏UINavigationBar所包含所有view...了,序号和缩进表示了其层级归属关系,打印方法可以看这篇文章:传送门:iOS遍历打印所有视图 从这些view类名能够大概猜出他们都是导航栏什么,让我们大胆猜测一下,_UIBarBackground

2.9K40

如何把设计图自动转换iOS代码? 在线等,挺急!

这是一篇可能略显枯燥技术深度讨论与实践文章.如何把设计图自动转换为对应iOS代码?...这是一个可以节省 70% 工作量的话题 我觉得,如果真的能把一张设计图自动转换为代码,任何开发工程师都会感兴趣.单以 iOS 应用为例, 一个最常用MVC架构APP中,主要代码,无非就是集中于...我想我对编程本身确实是感兴趣,但是整天浪费时间 UI,真的感觉有点虚度光阴.所以说,本不充裕空闲里,我一直思考一个命题就是: 如何实现 UI 自动化与独立化....,也更快捷些.在此期间,我研究一个重要话题就是如何实现Xib之间嵌套复用,即在一个Xib如何直接嵌入另一个Xib.乍听起来很简单,但是亲身实践之后,才发现其难度.我不是来吐槽,个中曲折不再一一赘述...核心理论基础: AutoLayout中,如何唯一确定元素不同尺寸屏幕位置? 既定方案,必须基于AutoLayout,至于AutoLayout与Frame区别于优势,不做赘述.

1.3K60
领券