UIViewController 可以理解为 App 的界面,负责管理 UIView 中显示的内容和用户的交互,主要有以下作用:
实例化的时候使用TestView:TestView *view2 = [[TestView alloc] init];
在iOS开发过程中,我们经常性会需要获取当前页面的ViewController,然后利用ViewController进行一些操作,例如在最顶层的ViewController上展示一个UIAlertController,或者在最顶层的ViewController上present另一个ViewController,或者进行其他操作。 1 实现思路 通过最底层的ViewController依次向上寻找,直到找到最顶层的ViewController,也就是从UIApplication的keyWindow的r
之前写过一篇关于iOS 组件化之CTMediator的文章,小项目中使用起来还是不怎么方便,改进了下,取名为DRouter吧,目录结构是这样的
2》假设view在内存中,则直接载入。相反,假设不存在。则UIViewController调用loadView方法。
概念 UINavigationController 继承于 UIViewController 包含:viewcontrollers、NavigationBar、Toolbar 导航控制器是一个堆栈结构,只是其中管理的对象是controller,通过push与pop进行controller的切换,UINavigationController是将这些控件(UINavigationBar,UINavigationItem和UIToolBar)和UIViewController紧密的结合了起来 总结: Naviga
在前面的博客中,我么你介绍了UINavigationBar,UINavigationItem和UIToolBar,UINavigationController是将这些控件和UIViewController紧密的结合了起来,使用导航,我们的应用程序层次会更加分明,对controller的管理也更加方便。前几篇博客地址如下:
作为MVC设计模式中的C,Controller一直扮演着项目开发中最重要的角色,它是视图和数据的桥梁,通过它的管理,将数据有条有理的展示在我们的View层上。iOS中的UIViewController是UIKit框架中最基本的一个类。从第一个UI视图到复杂完整项目,都离不开UIViewController作为基础。基于UIViewController的封装和扩展,也能够出色的完成各种复杂界面逻辑。这篇博客,旨在讨论UIViewController的生命周期和属性方法,在最基础的东西上,往往会得到意想不到的惊喜。
新建CMWebViewController,让其继承UIViewController,即:
本文将讲述在iOS开发中如何根据某个UIView来获取所属的UIViewController
Assuming you have storyboard, go to storyboard and give your VC an identifier (inspector), then do: UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; UIViewController *vc = [storyboard instantiateViewControllerWithI
前言 由于公司要开发一款小说类阅读APP,其中体验上非常重要的一点便是翻页效果。为了实现翻页效果,我查询了很多资料后选择使用了UIPageViewController。原因很简单,使用方便,功能强大,
- (UIViewController *)getCurrentVC { UIViewController *result = nil; UIWindow * window = [[UIApplication sharedApplication] keyWindow]; if (window.windowLevel != UIWindowLevelNormal) { NSArray *windows = [[UIApplication sharedApplicatio
然后在解析了从服务器返回的信息后,直接new了UIAlertView对象,准备弹窗提示,这时候控制台打印了一串异常的信息:
关于动画在iOS开发中的应用,曾经整理过一系列的博客进行总结。包括简单的UIView层的动画,CALayer层的动画,Autolayout自动布局动画以及CoreAnimation核心动画框架等。本篇博客主要深入讨论视图控制器、导航控制器来进行界面跳转时的专场动画相关内容。之前的动画相关博客列举如下:
iOS 是由苹果公司开发的移动操作系统 。苹果公司最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统(最初叫 iPhone runs OS X)。该系统最初是设计给 iPhone 使用的(所以后来曾命名为 iPhone OS),之后陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上(所以在 WWDC 2010 上最终宣布更名为 iOS)。
话说 *** Assertion failure in UITraitCollection * _Nonnull _UIGetCurrentFallbackTraitCollection(void)(), /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKitCore_Sim/UIKit-3899.13.13/_UIFallbackEnvironment.m:91
本文介绍了一种用于iOS的交互式转场实现方案,通过使用UIKit Dynamics和UIKit Layout实现自定义转场效果。具体实现包括两个部分:一是交互式转场动画的实现,通过CGAffineTransformAnimation结合UIView.animateWithDuration()方法实现;二是交互式转场交互的实现,通过监听UIViewControllerTransitionCoordinator方法实现。该方案适用于界面之间的复杂转场交互场景,可以自定义转场动画和交互逻辑,实现更加顺滑、自然的界面转场效果。
使用 storyboard 的时候,我们经常会写出下面这样的代码,用来跳转到其他页面
页面跳转啊页面间传值啊,这是每个项目几乎都要用到的东西。近年来苹果一直都在推Storyboard,页面跳转可以直接在Storyboard上拉线,然后用segue或者unwind来做一些传值的操作,非常方便,这里就不细说了。
WWDC 2013 session 218: Custom Transitions Using View Controllers
学习移动app开发,我们常常从讲解基本的控件开始,如UILabel、UISearchBar、UIButton、UITextField等等。在实现一个简单的ios 应用之前,我们首先来看ios开发中一些基本的概念。 视图控制器(View Controllers) 视图控制器是MVC(Modl-View-Controller)模式的逻辑部分。按照字面意思,这个控制器能够控制某个视图。 UIViewController 苹果极力推崇MVC这种开发模式,并且帮我们实现了一个叫做UIViewController的控制
UIKit提供UIPageViewController可以很方便实现平移的页面切换效果,使用流程: 1、创建UIPageViewController;
1、创建一个遵循<UIViewControllerAnimatedTransitioning>协议的动画过渡管理对象,并实现如下两个方法:
创建一个Super父类,并继承SPPageMenuDelegate ,UIScrollViewDelegate
横向.gif 纵向.gif 上面的效果主要是用到了UIPageViewController,http://www.jianshu.com/p/a676899d9b70 这篇文章讲的挺细的 ,对于中间的图片嵌入效果想了解的可以查看我以前写的内容http://www.jianshu.com/p/a75c1a07cd51 /* UIPageViewController 为我们提供了2种翻页样式,一种是拟真,一种是滚动 UIPageViewControllerTransitionSty
屏幕截图 使用UIPageViewController去实现这种滚动分页的控制,我们可以忽略比如view的复用,scroll的各种计算,我们只需要少量的代码就可以实现一个高性能的分页控件 我们只需要实现UIPageViewController的两个数据源代理即可 func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController)
难道这是另一篇烦人的博客文章,模仿了 MVC 并提供了一种替代的“super-duper pattern”,而实际上只留下了更多的问题?这就是我看到另一篇有关 iOS 架构的文章时的想法。MVC,MVP,VIPER,RIBLET,Clean Swift等。这样的文章有很多,它们的观点和架构截然不同。
UIViewController采用懒加载的方式,也就是说第一次访问到view属性时才会加载或创建它。由于视图由视图控制器管理,所以讨论视图的加载方式时,主要讨论视图控制器的加载方式。
有时候,我们可能需要统一工程中的返回按钮样式,比如都是 箭头+返回 或者都是 箭头。 方案有两种:
大约6个月前,笔者写了一个基于url-block的路由跳转框架,命名为WSRouter。这是一个轻量级框架,仅包含4个.m文件共400多行代码。虽然这个框架很轻,但并不代表其功能不完备,相反,这个框架的功能完全可以应付我们日常的开发需要。无论是对于项目使用还是学习参考,WSRouter都是一个不错的选择。 目前路由跳转方案有很多,有基于Target-action的跳转方案,有基于protocol-class的跳转方案,有基于url-Controller的跳转方案,还有本文所说的基于URL-Block的跳转方案。本文不对这些方案的优缺点进行对比,仅对WSRouter的基本功能和实现做一些简介,欢迎大家使用或star。为了便于陈述,基于URL-Controller和URL-Block统称为基于URL的跳转方案。
APP中经常有根据标签来切换页面的需求,如果切换的页面只是刷新一下数据也就罢了,但是如果每个标签切换页面的数据和内容、结构完全不同你会怎么样做?(例如:图1-1) 图1-1 个人觉得理想的做法就是每个
在使用view的缩放的时候,layer.border.width随着view的放大,会出现锯齿化的问题,解决这个问题需要设置这个属性。
自定义转场动画集锦.gif 本文记录分享下自定义转场动画的实现方法,具体到动画效果:新浪微博图集浏览转场效果、手势过渡动画、网易音乐启动屏转场动画、开关门动画、全屏侧滑返回效果 的代码可以到Github WSLTransferAnimation下载查看,注释还算清晰。 模态化present和dismiss 自定义转场 1、创建一个遵循<UIViewControllerAnimatedTransitioning>协议的动画过渡管理对象,并实现如下两个方法: //返回动画事件 - (NSTimeInter
在 iOS 15 中 Apple 推出了 UISheetPresentationController,通过它可以控制 Modal 出来的 UIViewController 的显示大小,且可以通过手势在不同大小之间进行切换。在 iOS 16 中,Modal 出来的 UIViewController 可以自定义显示的大小。
为了良好的交互体验,相信大家在对待scrollView无数据时的提示页都会使用一些第三方来定制,最典型的就是使用DZNEmptyDataSet。但是每个界面都写一堆与DZNEmptyDataSetDelegate,DZNEmptyDataSetSource相关的代码就不太好,那一般情况下自然的就会采用继承的方式来避免。而Swift除了可以面向对象编程,它还可以面向协议编程。那可不可以也用协议来解决情况呢?嘿嘿,这个可以有,那我们接下来就来试试怎么通过协议的方式来避免上述情况,并且实现一行代码添加空白页功能
UIPageViewController是iOS中少见的动画视图控制器之一,通过它既可以创建类似UIScrollView与UIPageControl结合的滚屏视图,也可以创建类似图书效果的炫酷翻页视图。UIPageViewController类似一个视图容器,其中每个具体的视图由各自的ViewController进行维护管理,UIPageViewController只进行协调与动画布置。下图可以很好的展现出UIPageViewControlelr的使用结构:
在UIViewController中,view(黑体的view指的是controller的view属性)有两个循环:加载和卸载循环。当程序的一部分向controller请求view的指针且view不在内存中时,view会进入加载循环,controller会将view加载入内存。
1、iOS上的页面展示和逻辑 1.1 iOS的MVC设计模式 在介绍iOS的页面展示之前,我们需要先知道iOS应用的运行逻辑和设计模式。MVC即Model,View,Controller(模型,视图,控制器)。 View上展示的东西,由Model来定义 View上展示的逻辑,由Controller来控制 Controller同样负责初始化Model,和传递Model的信息给View 用户在View层中所进行的创建或修改数据的操作,通过Controller对象传达出去,最
页面加载时间指的页面从创建到可见的时间。严格意义上来说页面加载时间测试,更应该是页面的冷加载,不包含接口返回数据时间。
自定义转场动画主要有以下步骤 自定义导航栏 自定义交互动画 通过UIPercentDrivenInteractiveTransition协议实现交互 自定义导航栏 自定义导航栏需要遵守<UINavigationControllerDelegate>协议,该协议主要有两个协议方法: // 该方法返回导航跳转时的动画,如果返回nil,则是系统默认的跳转动画,并且通过operation来判断当前执行push还是pop -(id<UIViewControllerAnimatedTransitioning>)navi
像商品详情这种有各种各样的cell,cell里面又有各种不同的按钮事件等。cell里面可能还有几层UI,如何将这种层级很多很复杂的UI页面的事件传递到Controller中进行处理。一般的做法是用Block一层一层往外传,要不就是用Delegate一层层往外传。层级多的时候是很麻烦的。
实现思路 自定义转场动画时需要做以下几步 以下内容假设是从A–>B添加的segue 添加两个segue(一个是用于正向转场 ,一个是新页面推出时的反向转场动画) 从原view向目标view右键拖动 这是segue的可选项中就会有新添加的两个segue 选择正向的那个转场,也可以选择custom 然后设置segue对应的class 反向转场相对就要麻烦些了 反向转场是B–>A 首先在A中重写返回A时调用的方法(不是B中)方法中设置转场调用的动画 详细实现 正向转场的实现类 // // PushSegue.s
在目前阶段,SwiftUI 很难独立开发一款功能强大的 App,还是需要与 UIKit 一起合作,借助 UIKit 成熟完善的知识体系,二者相互嵌套形成混合开发。
简书部分流程图看不到,可移步 应用启动的主要流程 st=>start: AppDelegate islogin=>condition: isLogin? login=>operation: http登
得到view的控制器 /** view 获取它的控制器 */ public func viewController()->UIViewController? {
说道抽屉效果在iOS中比较有名的第三方类库就是PPRevealSideViewController。一说到第三方类库就自然而然的想到我们的CocoaPods,今天的博客中用CocoaPods引入PPRevealSideViewController,然后在我们的工程中以代码结合storyboard来做出抽屉效果。 一.在工程中用CocoaPods引入第三方插件PPRevealSideViewController. (1).在终端中搜索PPRevealSideViewController的版本
前言 本文是我学习了onevcat的这篇转场入门做的一点笔记。 今天我们来实现一个简单的自定义转场,我们先来看看这篇文章将要实现的一个效果图吧: 过程详解 热身准备 我们先创建一个工程,首先
UIDeviceOrientation,表示设备朝向,可以通过[UIDevice currentDevice] orientation]获取,取值有:
在展示 app 启动广告等情况下,我们可能需要在界面上叠加一个 UIWindow,但是实测情况下发现,由于 UIWindow 会被系统引用导致延迟释放,在 customWindow 实例被使用完之后,单纯
领取专属 10元无门槛券
手把手带您无忧上云