iOS7 初体验

近日来由于iOS7的发布,引来业界的各种吐槽。

为了体验一把,我已经把iPhone5刷成了iOS7,也下载Xcode5-DP并进行了测试。我想说的是iOS7与Xcode5-DP中新增的几个不错设计及功能:

1、iOS7 Icon的设计,很精致,哪怕是一个像素。

2、手势发挥的更加淋漓尽致,系统自带的应用,只要涉及到返回操作,都可以按住iPhone屏幕左侧边缘处向右→滑动返回,方便的很呐。

3、状态栏与导航栏不在明显区分,更加的简洁清爽。

关于iOS7我就不说什么了,网上可以找到一大堆,感兴趣的同学可以去官网瞅瞅: http://www.apple.com/ios/ios7/design/

4、Xcode5-DP中最让我激动的就是单元测试了,有兴趣的同学推荐去 趣味苹果开发 的iOS7初体验(2)——单元测试中看看,写的不错~\(≧▽≦)/~。

5、Xcode5-DP中运行应用时,选择设备区域进行了分类,清晰明了。

6、Xcode5-DP中应用程序图标与启动页图片的大小更加的直观。

 
 
分类: iOS
标签: iOS7Xcode5-DP

iOS基础界面和导航详解

iOS基础界面就是通过UIViewController展示的。首先区分content controller和container controller的区别。content controlller就是展示我们当前页面的controller,而container controller就是一个管理content controller的容器,基本就是UINavigationController和UITabbarController,本身它也是继承UIViewController,一个UIViewController压栈就是把它加入到container controller的view上。

下面说一下UIViewController的生命周期:

1. -(void)loadView;  这里用来加载controller的view,一般我们都必须调用[super loadView]来完成对view的加载,当然如果不需要用self.view也可以。然后再对我们需要的子view进行生成和布局。

2.- (void)viewDidLoad; 这里代表view已经加载完成,一般用来处理数据model之类的。

3.- (void)viewWillAppear:(BOOL)animated; Controller将要被加入到当前window的回调,每次push或pop到当前controller就会回调这个函数,代表界面将要展示出来。

4.-(void)viewDidAppear:(BOOL)animated; Controller已经被加入到当前window,也就是push、present或pop的动画已经完成。

{可能被大多数人忽略的是,在每次调用viewWillAppear或viewDidAppear,系统都会调用一下两个函数:

(1)(void)viewWillLayoutSubviews 这个可能很多人忽略了,是5.0才增加的函数,界面将要对子view进行布局。当通话或录音状态中,状态栏下移,也会回调这个函数。

(2)-(void)viewDidLayoutSubviews 这个跟4对应,也是5.0增加的函数,对子view布局完成。

}

一般在上面4个函数,我们已经可以完成界面的展示。记得它们的先后顺序是必须的。至于收到内存警告,在6.0等不同版本controller的不同回调我之前已经介绍过了,就不再介绍了。

关于Container Controller:

这里就只说介绍UINavigationController,本身它就是继承UIViewController,所以它具有上面所说的生命周期。至于什么东西应该放在viewController,什么应该放在navgationController呢,这里说说我的理解。

因为navgationController就是管理controller的容器,所以它处理的应该就是controller的关系。并且在某种意义上,它里面的controller就相当于它的一个子view,所以在navgationController的操作就能控制它里面的每个controller。下面以现在比较流行的手势导航为例:(也就是在二级页面向右滑动就能返回)

@interface TestNavigationController ()

{

UIPanGestureRecognizer *_panGesture;   //手势导航的recognizer

CGPoint _panStartPoint;    //记录开始滑动的point,只有滑动到一定宽度才开启导航

}

@property(nonatomic,retain)UIPanGestureRecognizer *panGesture;

@end

@implementation TestNavigationController

@synthesize panGesture = _panGesture;

- (void)viewDidLoad

{

[super viewDidLoad];

//在navgationController的view添加手势,也就是为每个当前的controller添加了手势

[self.view removeGestureRecognizer:self.panGesture];

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizeralloc] initWithTarget:self

action:@selector(handlePanGesture:)];

panGesture.minimumNumberOfTouches = 1;

panGesture.maximumNumberOfTouches = 1;

panGesture.delegate = self;

self.panGesture = panGesture;

[panGesture release];

[self.view addGestureRecognizer:self.panGesture];

}

-(void)handlePanGesture:(UIPanGestureRecognizer*)pan

{

 //记录开始滑动的point

if(pan.state == UIGestureRecognizerStateBegan){

_panStartPoint = [pan locationInView:self.view];

}

//在滑动结束,判断滑动的距离是不是适合宽度,处理是否返回上级页面

if(pan.state == UIGestureRecognizerStateEnded)   {

CGPoint _endPoint = [pan locationInView:self.view];

if(_endPoint.x - _panStartPoint.x > 70.0f){

//二级页面就能滑动返回

if([self.viewControllers count] > 1){

[self popViewControllerAnimated:YES];

}

}

}

}

#pragma mark UIGestureRecognizerDelegate method    //手势的delegate,处理一些同时进行的手势操作

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

{

//一般情况下,如果上下滑动幅度太大,应该就是在滑动controller的tableview之类的,就不开启滑动导航

if (gestureRecognizer == self.panGesture) {

CGPoint translation = [(UIPanGestureRecognizer *)gestureRecognizertranslationInView:self.view];

return ((fabs(translation.x) / fabs(translation.y) > 5.0f) ? YES : NO);

}

return YES;

}

当我们把appDelegate的window.rootViewController设为TestNavigationController,就可以很方便快捷地实现滑动手势导航功能。

下面说一下静态视图modelViewController,通常我们就是用

- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion压入一个模态视图。其实静态的概念就是它入栈的方式和动画不同而已。需要注意的是,一个navgationController不可以push一个navgationController,但是可以present一个navgationController。另外,无论是一个viewController,还是navgationController,都可以present一个modelViewController,并且modelViewController并不加入到navgationController的导航栈中。

所以navgationController的topViewController和visibleViewController是不同概念的。topViewController就是导航栈stack的栈顶,也就是不包括modelViewController,而visibleViewController是当前展示的viewController,如果有模态视图就是模态视图,否则就是topViewController。

最后用一句话总结, A viewController is a set of views, A navgationcontroller is a set of viewControllers.

基本上基础UIViewController和NavgationController的介绍就到这里了。大家觉得还有其他重要的东西可以补充。谢谢指导。

 
 

iOS7 初体验的更多相关文章

  1. iOS7初体验(3)——图像资源Images Assets

    开始之前,首先回顾一下iOS7初体验(1)——第一个应用程序HelloWorld中的一张图,如下所示: 本文便分享一下Images.xcassets的体验~_~ 1. 打开此前使用过的HelloWor ...

  2. iOS7初体验(1)——第一个应用程序HelloWorld

    iOS7 Beta已经发布了,迫不及待地下载了iOS 7及Xcode 5并体验了一下.先做一个简单的Hello World看看都有哪些变化吧. 1. 启动Xcode5-DP: 2. 从菜单选择File ...

  3. iOS7初体验(2)——单元测试

    在Xcode 4.6及以前的版本,一直觉得单元测试这部分功能做得很鸡肋,用起来感觉很别扭.这一次Xcode 5.0默认就引入了单元测试,赶快来看看看相比以前的版本有什么提升吧!~_~ 1.     首 ...

  4. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  5. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  6. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  7. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  8. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

  9. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

随机推荐

  1. vector查找元素

    转自:http://hi.baidu.com/chain2008/blog/item/821744585e12c5c89c8204e8.html 今天又忘了怎么在vector中查找某一个值..唉..每 ...

  2. Modernizr

    Modernizr 目录 概述 CSS的新增class JavaScript侦测 加载器 参考链接 概述 随着HTML5和CSS3加入越来越多的模块,检查各种浏览器是否支持这些模块,成了一大难题.Mo ...

  3. codeforces #262 DIV2 C称号Present(二分法+贪婪)

    职务地址:http://codeforces.com/contest/460/problem/C 这个题是用二分枚举最小值.然后推断是否能在规定的次数内使得全部的数都达到这个值.推断的时候要用贪心的方 ...

  4. 微软宣布.NET开发环境将开源 支持Mac OS X和Linux

    微软宣布.NET开发环境将开源 支持Mac OS X和Linux 投递人 itwriter 发布于 2014-11-13 06:58 评论(55) 有4388人阅读  原文链接  [收藏]  « » ...

  5. Unity3D第三人称摄像机控制脚本

    好久没有敲Blog该.感谢您的留言.注意.私人信件和其他支持,但我似乎没有办法继续自己曾经写了一篇博客系列,因为我在网上找到有关unity3D太少的内容,U3D相关的文章!.. 第三人称视角 第三人称 ...

  6. bat批量目光声明

    写bat同一批次,盯着函数应使用.这个程序对可读性 在批处理,凝视节还有一种更常用的方法: goto start      = 能够是多行文本,能够是命令      = 能够包括重定向符号和其它特殊字 ...

  7. AngularJS+requireJS项目的目录结构设想

    AngularJS+requireJS项目的目录结构设想 准备用AngularJS + require.js 作为新项目的底层框架,以下目录结果只是一个初步设想: /default    放页面,不过 ...

  8. Android之LinkedHashMap实现LRU

    先看下LinkedHashMap的数据结构图 对于LinkedHashMap而言,它继承与HashMap.底层使用哈希表与双向链表来保存所有元素.其基本操作与父类HashMap相似,它通过重写父类相关 ...

  9. cygwin的安装使用

    Cygwin 是一个用于 Windows 的类 UNIX shell 环境. 它由两个组件组成:一个 UNIX API 库,它模拟 UNIX 操作系统提供的许多特性:以及 Bash shell 的改写 ...

  10. iOS基础 - 相片浏览器

    一.需求分析 点击照片从当前照片位置动画弹出新的视图控制器显示选中的照片,新的视图控制器为全屏显示,背景为黑色,再次点击照片动画缩小至当前选中的照片位置,双击放大照片,如果已经放大则缩小,在新的视图控 ...