当前位置: 首页 > news >正文

建什么网站可以赚钱/河南网站建站推广

建什么网站可以赚钱,河南网站建站推广,怎么注册网页,网站设计需从哪些方面考虑在 iOS 5 之前,view controller 容器是 Apple 的特权。实际上,在 view controller 编程指南中还有一段申明,指出你不应该使用它们。Apple 对 view controllers 的总的建议曾经是“一个 view controller 管理一个全屏幕的内容”。这个建议后来…

在 iOS 5 之前,view controller 容器是 Apple 的特权。实际上,在 view controller 编程指南中还有一段申明,指出你不应该使用它们。Apple 对 view controllers 的总的建议曾经是“一个 view controller 管理一个全屏幕的内容”。这个建议后来被改为“一个 view controller 管理一个自包含的内容单元”。为什么 Apple 不想让我们构建自己的 tab bar controllers 和 navigation controllers?或者更确切地说,这段代码有什么问题:

[viewControllerA.view addSubView:viewControllerB.view]

Inconsistent view hierarchy

UIWindow 作为作为一个应用程序的根视图(root view),是旋转和初始布局消息等事件产生的来源。在上图中,child view controller 的 view 插入到 root view controller 的视图层级中,被排除在这些事件之外了。View 事件方法诸如 viewWillAppear:将不会被调用。

在 iOS 5 之前构建自定义的 view controller 容器时,要保存一个 child view controller 的引用,还要手动在 parent view controller 中转发所有 view 事件方法的调用,要做好非常困难。

一个例子

当你还是个孩子,在沙滩上玩时,你父母是否告诉过你,如果不停地用铲子挖,最后会到达美国?我父母就说过,我就做了个叫做Tunnel 的 demo 程序来验证这个说法。你可以 clone 这个 Github 代码库并运行这个程序,它有助于让你更容易理解示例代码。(剧透:从丹麦西部开始,挖穿地球,你会到达南太平洋的某个地方)

Tunnel screenshot

为了寻找对跖点,也称作相反的坐标,将拿着铲子的小孩四处移动,地图会告诉你对应的出口位置在哪里。点击雷达按钮,地图会翻转过来显示位置的名称。

屏幕上有两个 map view controllers。每个都需要控制地图的拖动,标注和更新。翻过来会显示两个新的 view controllers,用来检索地理位置。所有的 view controllers 都包含于一个 parent view controller 中,它持有它们的 views,并保证正确的布局和旋转行为。

Root view controller 有两个 container views。添加它们是为了让布局,以及 child view controllers 的 views 的动画做起来更容易,我们马上就可以看到。

- (void)viewDidLoad
{[super viewDidLoad];//Setup controllers_startMapViewController = [RGMapViewController new];[_startMapViewController setAnnotationImagePath:@"man"];[self addChildViewController:_startMapViewController];          //  1[topContainer addSubview:_startMapViewController.view];         //  2[_startMapViewController didMoveToParentViewController:self];   //  3[_startMapViewController addObserver:selfforKeyPath:@"currentLocation"options:NSKeyValueObservingOptionNewcontext:NULL];_startGeoViewController = [RGGeoInfoViewController new];        //  4
}

我们实例化了 _startMapViewController,用来显示起始位置,并设置了用于标注的图像。

  1. _startMapViewcontroller 被添加成 root view controller 的一个 child。这会自动在 child 上调用willMoveToParentViewController: 方法。
  2. child 的 view 被添加成 container view 的 subview。
  3. child 被通知到它现在有一个 parent view controller。
  4. 用来显示地理位置的 child view controller 被实例化了,但是还没有被插入到任何 view 或 controller 层级中。

布局

Root view controller 定义了两个 container views,它决定了 child view controller 的大小。Child view controllers 不知道会被添加到哪个容器中,因此必须适应大小。

- (void) loadView
{mapView = [MKMapView new];mapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;[mapView setDelegate:self];[mapView setMapType:MKMapTypeHybrid];self.view = mapView;
}

现在,它们就会用 super view 的 bounds 来进行布局。这样增加了 child view controller 的可复用性;如果我们把它 push 到 navigation controller 的栈中,它仍然会正确地布局。

过场动画

Apple 已经针对 view controller 容器做了细致的 API,我们可以构造我们能想到的任何容器场景的动画。Apple 还提供了一个基于 block 的便利方法,来切换屏幕上的两个 controller views。方法 transitionFromViewController:toViewController:(...)已经为我们考虑了很多细节。

- (void) flipFromViewController:(UIViewController*) fromControllertoViewController:(UIViewController*) toControllerwithDirection:(UIViewAnimationOptions) direction
{toController.view.frame = fromController.view.bounds;                           //  1[self addChildViewController:toController];                                     //[fromController willMoveToParentViewController:nil];                            //[self transitionFromViewController:fromControllertoViewController:toControllerduration:0.2options:direction | UIViewAnimationOptionCurveEaseInanimations:nilcompletion:^(BOOL finished) {[toController didMoveToParentViewController:self];  //  2[fromController removeFromParentViewController];    //  3}];
}
  1. 在开始动画之前,我们把 toController 作为一个 child 进行添加,并通知 fromController 它将被移除。如果fromController 的 view 是容器 view 层级的一部分,它的 viewWillDisapear: 方法就会被调用。
  2. toController 被告知它有一个新的 parent,并且适当的 view 事件方法将被调用。
  3. fromController 被移除了。

这个为 view controller 过场动画而准备的便捷方法会自动把老的 view controller 换成新的 view controller。然而,如果你想实现自己的过场动画,并且希望一次只显示一个 view,你需要在老的 view 上调用 removeFromSuperview,并为新的 view 调用addSubview:。错误的调用次序通常会导致 UIViewControllerHierarchyInconsistency 警告。例如:在添加 view 之前调用didMoveToParentViewController: 就触发这个警告。

为了能使用 UIViewAnimationOptionTransitionFlipFromTop 动画,我们必须把 children's view 添加到我们的 view containers 里面,而不是 root view controller 的 view。否则动画将导致整个 root view 都翻转。

通信

View controllers 应该是可复用的、自包含的实体。Child view controllers 也不能违背这个经验法则。为了达到目的,parent view controller 应该只关心两个任务:布局 child view controller 的 root view,以及与 child view controller 暴露出来的 API 通信。它绝不应该去直接修改 child view tree 或其他内部状态。

Child view controller 应该包含管理它们自己的 view 树的必要逻辑,而不是把它们看作单纯呆板的 views。这样,就有了更清晰的关注点分离和更好的可复用性。

在示例程序 Tunnel 中,parent view controller 观察了 map view controllers 上的一个叫 currentLocation 的属性。

[_startMapViewController addObserver:selfforKeyPath:@"currentLocation"options:NSKeyValueObservingOptionNewcontext:NULL];

当这个属性跟着拿着铲子的小孩的移动而改变时,parent view controller 将新坐标的对跖点传递给另一个地图:

[oppositeController updateAnnotationLocation:[newLocation antipode]];

类似地,当你点击雷达按钮,parent view controller 给新的 child view controllers 设置待检索的坐标。

[_startGeoViewController setLocation:_startMapViewController.currentLocation];
[_targetGeoViewController setLocation:_targetMapViewController.currentLocation];

我们想要达到的目标和你选择的手段无关,从 child 到 parent view controller 消息传递的技术,不论是采用 KVO,通知,或者是委托模式,child view controller 都应该独立和可复用。在我们的例子中,我们可以将某个 child view controller 推入到一个 navigation 栈中,它仍然能够通过相同的 API 进行通信。

转自:http://objccn.io/issue-1-4/

转载于:https://www.cnblogs.com/zhengJason/p/3706045.html

http://www.lbrq.cn/news/1572967.html

相关文章:

  • 网站怎么做百度百科/网站友链查询接口
  • 广州网站建设找新际/企业网站推广方法实验报告
  • 网站添加qq在线客服/网站搜索引擎优化的基本内容
  • 给视频做特效的网站/网站运营及推广方案
  • 做的比较好的法律实务培训网站/百度推广销售员好做吗
  • 网站需要多少钱/如何自建网站?
  • 正规网站建设团队是什么/网站seo关键词优化
  • 个人网页设计作品简约/广州排前三的seo公司
  • java 就是做网站的吗/上海网站推广广告
  • 网站换了服务器/网站优化塔山双喜
  • 网站图片加载 优化/品牌营销平台
  • 自己做企业网站/找谁做百度关键词排名
  • 排名优化网站/搜索引擎营销的主要方式有
  • 网站开发原始数据/强力搜索引擎
  • 手机网站 wap/宁波网站快速优化
  • 赣州网上立案网址/上海关键词优化的技巧
  • 北京网站开发公司哪家好/互联网营销师有什么用
  • 邵阳做网站哪家好/百度电话怎么转人工
  • ddns做网站/新浪博客seo
  • 电商网站开发的项目描述/建站为应用技术
  • 出售网站建设群/今日热榜
  • 自己切片做网站/seo营销工具
  • wordpress搜索页面怎么仿/搜索引擎优化概述
  • 网站建设费无形资产摊销/百度软件
  • WordPress5更改logo/seo排名优化联系13火星软件
  • 北京移动端网站建设/seo关键词排名优
  • 为什么要学电商网站建设/百度新闻头条新闻
  • 深圳市人民政府网站/google 浏览器
  • 我做网站了/日照seo优化
  • phpcms v9网站建设入门/网络设计
  • 《Python学习之基础语法1:从零开始的编程之旅》
  • 从钢板内部应力视角,重新认识护栏板矫平机
  • AuthController类讲解
  • 升级 Docker,避免执行 docker compose 时报错
  • Java 大视界 -- Java 大数据在智能教育学习效果评估指标体系构建与精准评估中的应用(394)
  • 京东方 DV133FHM-NN1 FHD13.3寸 工业液晶模组技术档案