首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

View Controller编程指南

UIKit期望您规定的方式使用ViewController。 维护正确的ViewController关系可确保自动行为在需要时传递给正确的ViewController。...容器型ViewController一个或多个子ViewController的内容与可选的自定义View混合在一起,创建其最终界面。...容器型ViewController通常作为root ViewController安装在窗口中(如图所示),但它们也可以模态方式呈现,或者作为其他容器的子项安装。容器负责适当地定位其子视图。...在图中容器并排放置两个子视图。虽然它取决于容器接口,但子ViewController可能对容器和任何同级ViewController有最少的了解。...仅Root View用作其他View的容器ViewController的RootView用作其余内容的容器

1.2K20

iPad Safari多窗口视图分析和实现思路

这里还有一点小细节,因为捏合过程双指还可以移动,我们实测 Safari 选择最终放大的页面还会根据捏合手势结束之后哪个视图占据目前口面积较多、距离口中心最近来决定,和前述标题的变化无关。...我们常用的 UITabBarController、UINavigationController 都是这样的容器控制器(还有一个在 iPad 分屏展示会用到的 UISplitViewController)...- (void) displayContentController: (UIViewController*) content { [self addChildViewController:content...通过截图这个障眼法来操作可以避免 ScrollView 的交互和子视图中的交互发生冲突。...从 Safari 的表现来看它极有可能也是采用截图的方式,我们实测网页中动态播放的视频到了大纲视图并不会继续动态播放,此外 Safari 在进程被杀后重启,大纲视图里仍有之前的截图,可以推测是通过静态截图的并落地的方式实现

3.9K30

iOS 无侵入埋点组件总结

方案选择 通常业务都需要埋点统计事件,但在每个业务类里埋点会导致每个页面内耦合了大量的无关业务的埋点代码使得代码不够整洁,所以放弃了代码埋点。...结合AOP的核心思想:应用程序中的业务逻辑同对其提供支持的通用服务进行分离,最后采用了第2种方案。...在此引入 AOP 编程,AOP(Aspect-Oriented-Programming) 即面向切面编程的思想,基于 Runtime 的 Method Swizzling 能力,来 hook 相应的方法...和 UIViewController 生命周期埋点不同的是,一个类中可能有许多不同的 UIButton 子类,相同的 UIButton 子类在不同的视图中的埋点也要区分出来,所以我们通过 NSStringFromClass...([target class]) + NSStringFromSelector(action) 来区别,即类名方法名的格式作为唯一标识。

2.8K31

OpenGLES(一)- GLKit以及常见API

但是只要是固定的就会有限制,无法进行自定义编程(顶点着色器,片元着色器) GLKit包含功能: 1. Math libraries 提供高性能的数学运算:提供常用的向量,四元数和矩阵运算。 2....GLKController 是GLKView的容器,继承自UIViewController。用于绘制视图内容的管理与呈现。 ios12以后苹果大大废弃了GLKit,使用了Metal。...图形通过观察者、口转为2D图形。...GLTextureLoader工具类:从各种资源文件中加载纹理 初始化 //初始化⼀个新的纹理加载到纹理对象中 - initWithSharegroup: - initWithShareContext...// ⽴即重绘视图内容 - display // 绘制视图内容并将其作为新图像对象返回 UIImage *snapshot; GLKViewDelegate //GLKViewDelegate代理方式

1.2K30

iOS14开发-入门知识

Storyboard介绍 容器概念。 is Initial View Controller(箭头移动)。...UIView添加到UIViewController的View.png UIView的容器概念 UIView 中可以放其他的 UIView。 UIView 的层次关系(平级与包含)。...removeFromSuperview:视图从父视图中移除(需提前讲解触摸方法)。 viewWithTag:根据 tag 值获取视图。 insertSubview:在指定视图的上/下面插入视图。...exchangeSubviewAtIndex:2个位置的视图互换。 演示UIView与UIViewController Storyboard 注意左侧面板的视图层次结构。...目前有两种方式: 通过 tag 属性:一旦视图多了,或者忘了设置 tag,亦或者设置了相同的 tag,都会出现问题。 通过 subviews 属性:一旦视图多了很难通过数组准确获取某个 View。

2.8K40

iOS的MVC框架之控制层的构建(下)

简化控制器中的视图构建 视图的构建有两种方式:一种是通过Storyboard或者XIB可视化的方式来构建;一种是通过程序代码的方式来完成构建。两种方法各有优劣。...1.定义视图属性接口和视图布局类 //定义一个控制器名开头View的协议和实现类。...子控制器的引入除了能够视图布局进行拆分而且能够对处理逻辑进行拆分。在这种情况下我们把父视图控制器称为容器控制器。...更新一个UITableViewCell要做的事情其实就是数据模型的变化反馈到视图中去,这里面同时涉及了视图和模型之间的耦合性问题。...我们还可以这部分更新的逻辑提取出来让他即不在视图中处理也不在视图控制器中处理而是提供一个新的数据绑定类来解决这个问题。

4.4K30

【IOS开发基础系列】UIViewController专题

出现unbalanced calls to begin/end appearance transitions for uiviewcontroller这样的log,其原因就是在容器类的UIViewController...UITabBarController 4. addChildViewController(一般用于自定义的继承于 UIViewController容器子类) iOS5,调用- (void)transitionFromViewController...,开发者应该切出的view移除,切入的view加入到该view容器中。...而在这个操作过程中,我们甚至可以撤销我们的手势,取消这次VC转移。...动画,但是难以重用,可以说是和containerVC完全耦合在一起的;而自定义切换并不改变VC的组织结构,只是负责提供view的效果,因为VC切换动画部分、动画驱动部分都使用接口的方式给出,因此重用性非常优秀

32030

设计师应该了解的iOS应用开发基础知识

本文的目的就是帮助各位设计师在最短的时间内,实战的方式探索iOS应用开发工具及相关的基础知识。我们一同了解应用开发流程中的一些重要环节,包括理论讲解及方法演示,即使你没什么编程经验也没问题。...图片向视图中添加图片和文字要通过Interface Builder向视图当中添加图片和文字,我们首先需要创建一些对应着不同类型内容的“容器”,也就是“Image View”与“Text View”。...接下来一行(@interface)的作用是ContactViewController声明为UIViewController的一个子类。...这是面向对象编程语言的一种公约,即“类的命名大写字母开头,属性(变量)和方法(函数)的命名小写字母开头”。我们之前演示的“拖动+自动生成代码”的方法是很方便的。...这个实例自身就是一个模态界面,它会“翻转(flip)”的动画效果出现,并将bigImage作为具体的图片放到其imageFrame容器当中。

80830

UI篇-UIResponder之事件传递和响应精析

UIResponder是所有响应者对象的基类,它不仅为事件处理,而且也为常见的响应者行为定义编程接口。...响应者链:由一系列“下一个响应者”组成 其顺序如下: 1.iOS系统在处理事件时,通过UIApplication对象和每个UIWindow对象的sendEvent:方法事件消息的形式分发给具体处理此事件的第一响应者...如果第一响应者没有进行处理,第一响应者事件处理事件的责任传递给下一个,更高级的对象,即当前responder对象的nextResponder。...4.最上层的容器视图事件传递给UIWindow对象。 5.UIWindow对象事件传递给UIApplication单件对象。 6.如果应用程序找不到能够处理事件的响应者对象,则丢弃该事件。...巧妙利用nextResponder获得当前页面的控制容器 @implementation UIView (ParentController) -(UIViewController*)parentController

2.4K30

iOS 面向协议方式封装空白页功能

而Swift除了可以面向对象编程,它还可以面向协议编程。那可不可以也用协议来解决情况呢?...嘿嘿,这个可以有,那我们接下来就来试试怎么通过协议的方式来避免上述情况,并且实现一行代码添加空白页功能 前言 如果对面向协议有疑问的同学可以看下我之前的两篇文章 iOS - Swift 面向协议编程...where Self : UIViewController { // 3、的实现的方法写在这里 } 3、定义功能方法 scrollView传递进来,让我们定义的方法来暗地里做些操作 func...scrollView.emptyDataSetDelegate = self scrollView.emptyDataSetSource = self } } 4、使用定制属性字典 这里返回提示图片的方法为例吧...可以使用Cocoapods的方式来安装使用 pod 'LXFProtocolTool' 我也 iOS - Swift 面向协议编程(二) 中提及的通过协议便捷加载xib的功能也集成了进来。

1.4K50

玩转iOS转场动画 原

iOS动画开发之一——UIViewAnimation动画的使用:https://my.oschina.net/u/2340880/blog/484457 iOS动画开发之二——UIView动画执行的另一种方式...2340880/blog/484538 iOS动画开发之三——UIView的转场切换:https://my.oschina.net/u/2340880/blog/484669 iOS动画开发之四——核心动画编程...动画开发之五——炫酷的粒子效果:https://my.oschina.net/u/2340880/blog/485095 iOS开发CoreAnimation解读之一——初识CoreAnimation核心动画编程...下面我们来分析下transitionContext这个对象,这个对象实际上是一个转场上下文,使用它来进行动画的定义和执行: //容器视图 用来表现动画 @property(nonatomic, readonly...我们在使用系统的导航控制器时,右划返回效果对用户体验十分友好,我们下面就来试着视图控制器的模态跳转设计成类似导航可交互的。

1.3K50

iOS - Swift 面向协议编程(一)

OC无法做到面向协议开发,而Swift可以,因为Swift可以做到协议方法的具体实现,而OC不行 面向对象开发 传统的面向对象开发思维方式类中实现的相似方法抽取出来,接着放入一个Base类,然后继承于...比如:一个Person类,一个Dog类,它们都拥有方法eat,那么就可以新建一个Animal类,eat方法抽取出来放入其中,然后Person类和Dog类都继承于Animal。...至此,我们就可以通过面向协议的方式给类定制不同的功能,也就是模块化。...可以发现Swift的面向协议编程跟c++的多继承很相似 约束 现在的这个Eatable协议是可以被�任意遵守的,如果我们�有这么个需求,我们创建的协议只是被UIViewController遵守,那我们该怎么做呢...面向协议编程(二)

62850

面向协议编程与 Cocoa 的邂逅 (上)

这和我们熟知的面向对象的构建方式很不一样。...这其实就是 OOP 的核心思想 - 使用封装和继承,一系列相关的内容放到一起。 我们的前辈们为了能够对真实世界的对象进行建模,发展出了面向对象编程的概念,但是这套理念有一些缺陷。...所以最近大家越来越发现面向对象很多时候其实不能很好地对事物进行抽象,我们可能需要寻找另一种更好的方式。 2.3 面向对象编程的困境 2.3.1 横切关注点 我们再来看一个例子。...: UIViewController { // 继承 // view, isFirstResponder()... // 新 func myMethod()...面向对象是一种不错的抽象方式,但是肯定不是最好的方式。它无法描述两个不同事物具有某个相同特性这一点。在这里,特性的组合要比继承更贴切事物的本质。

56220

学姐叫我看 CSS 新出的容器查询,然后把公共组件重构成响应式的!

我们一般使用CSS媒体查询来检测口宽度或高度,然后根据该模式改变设计。 这就是在过去10年中设计Web布局的方式。...在这种情况下,要么我们将有一个空的空间,要么项目扩展填满可用的空间。考虑下图: 在第一种情况下(Case 1),文章太宽,会导致封面变形。...当我们在设计UI时这种心态思考时,我们可以开始考虑组件的不同变体,这些组件依赖于它们的父宽度。 在下面的图中,请注意文章组件的每个变化是如何以特定的宽度开始的。...注意我是如何每个变体映射到一个特定的上下文,而不是一个口。为了进一步证明这一点,我们配合 CSS网格一起使用时,组件的行为会有何不同。...我们可以使用CSS容器查询来实现它。 当有足够的空间时,清单展开并显示每个用户的名称。聊天列表的父元素可以是动态调整大小的元素(例如:使用CSS口单元,或CSS比较函数)。

2.1K30

unity3d自学教程_3D技巧

脚本编程基于Mono技术,可使用JavaScript、C#或Boo语言编写,用来对基于可视化编辑界面的基础开发方式进行功能扩展。 2....预制件放置在场景中,即对其进行了实例化。修改预制件的属性影响它的所有实例,而修改其单个实例的属性仅影响该实例。预制件蓝色字体显示。...层级面板(Hierarchy):列出当前场景视图中的所有游戏对象(GameObject)。一旦游戏对象在场景视图中被添加或删除,在层级视图中也将同步更新。...口坐标(ViewPort Space):坐标点被归一化,并且相对于相机建立坐标系。相机左下角为(0,0)点,右上角为(1,1)点,Z轴使用相机的世界坐标单位。...屏幕左下角为(0,0)点,右上角为(pixelWidth,pixelHeight)点,Z轴使用相机的世界坐标单位。其各轴方向与口坐标相同。

3.3K20

你可能不知道的「 CSS 容器查询 」

正文 什么是 CSS 容器查询 简单来说: 容器查询允许开发者根据容器元素的大小来设置元素的样式。 它类似于 @media查询,不同之处在于它根据容器的大小而不是口的大小进行判断。...上图中的左右两个组件,是同一个组件,功能上是完全一样的,只是要展示不同的布局。...目前而言, 我们可以通过某种方式识别该组件,比如通过添加一个类或使用其他选择器来定位元素,该选择器可以查看它在文档结构中的位置。 但是,这并不能完全实现媒体查询在整个布局中的作用。...但是,就可用空间而言,很可能是在大屏幕上,侧边栏中的对象具有足够的空间来并排布局显示。 容器查询解决这种情况。 除了查看视口的大小,我们还可以查看容器的大小,并根据容器中的空间进行布局调整。...我们列定义为: 该维度中,空间的百分比或分数。 因此,容器查询仅允许通过在一维中指示大小来扩展包含属性,这被描述为单轴遏制。

1.6K30
领券