仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2510|回复: 20
打印 上一主题 下一主题

[学习教程] IOS编程:iOS 7 新特征:视图把持器切换API仓酷云

[复制链接]
冷月葬花魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:37:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
iPhoneSDK安装,然后最基本的是你要熟悉C语言,再来你得学习开发iPhone所使用的Objective-C语言,接著是Cocoa。如果你是Mac平台开发的入门用户iOS7对我来讲最冲动民气的特征就是新的视图把持器切换API(ViewControllerTransitioningAPI)。iOS7之前,ViewController之间切换,我必要创立自界说的transitions。并且这些办法都撑持不完全,让人头疼。在transitions中增添交互功效就更难了。
在入手下手这篇文章之前,我要提示一下:这是一个新的API,我们尽最年夜勉力让它能够有用,可是其实不能包管是最好。大概必要最少一个月后才干断定,这篇文章不是最好的有用计划,这里只是一个对新功效的探究。假如有更好的利用这个API的办法,请接洽我们,如许就能够修改这篇文章。
在入手下手先容这个API之前,我们必要晓得导航把持器的默许举动在iOS7下已改动了:导航把持器下,切换2个viewcontroller的动画有一点渺小的改动,变得更有交互性。比方,当你但愿弹出一个viewcontroller时,能够从屏幕右边入手下手拖动,把全部内容拖动到屏幕右侧。
让我们细心看一下这个API,我发明这个被重度利用的接口是协定并非一个实体。固然一下去看上往有一点怪,可是我喜好这个API,它给了我们更多的天真性。我们从复杂入手下手:用自界说动画取代原本的viewcontroller的push动画(这里是sampleproject在github)。我们起首必要完成这个新的UINavigationControllerDelegate办法:
1
2
3
4
5
6
7
8
9
10
11
-(id<UIViewControllerAnimatedTransitioning>)
navigationController:(UINavigationController*)navigationController
animationControllerForOperation:(UINavigationControllerOperation)operation
fromViewController:(UIViewController*)fromVC
toViewController:(UIViewController*)toVC
{
if(operation==UINavigationControllerOperationPush){
returnself.animator;
}
returnnil;
}

我们能够察看一下这类范例的操纵(push和pop)前往一个分歧的animator。假如我们分享代码的话,这个多是一个对象。我们大概必要把这个变量经由过程property保留上去。我们也能够为分歧的操纵创立分歧的对象,这里有很高的天真性。
让这个动画运转起来,我们创立一个自界说对象完成UIViewControllerContextTransitioning协定。
1
2
3
@interfaceAnimator:NSObject<UIViewControllerAnimatedTransitioning>
@end

这个协定请求我们完成2个办法,个中一个是形貌动画的实行工夫
1
2
3
4
-(NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext
{
return0.25;
}

另外一个是形貌动画的实行。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-(void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
UIViewController*toViewController=[transitionContextviewControllerForKey:UITransitionContextToViewControllerKey];
UIViewController*fromViewController=[transitionContextviewControllerForKey:UITransitionContextFromViewControllerKey];
[[transitionContextcontainerView]addSubview:toViewController.view];
toViewController.view.alpha=0;
[UIViewanimateWithDuration:[selftransitionDuration:transitionContext]animations:^{
fromViewController.view.transform=CGAffineTransformMakeScale(0.1,0.1);
toViewController.view.alpha=1;
}completion:^(BOOLfinished){
fromViewController.view.transform=CGAffineTransformIdentity;
[transitionContextcompleteTransition:![transitionContexttransitionWasCancelled]];
}];
}

这里你能够看到这个协定是怎样用的:没有供应实体的对象参数,而是经由过程这个范例id失掉transitionContext独一的最主要的工具就是在完成动画以后要挪用completeTransition这个告知transitionContext我们已完成动画而且响应的更新了viewcontroller的形态。其他代码是尺度的,我们经由过程transitionContext失掉2个UIViewController,然后利用复杂的UIView动画,这里我们很复杂的做了一个zooming的动画
注重,我们只是写了push的自界说动画,当viewcontrollerpop时,iOS体系仍是会利用默许的滑动动画。并且,完成这个办法后。导航栏也不克不及交互了(就是从左到右拖动完成popviewcontroller)。上面完美它
交互动画

让之前的动画变得可以交互起来十分复杂。我们必要完成另外一个UINavigationControllerDelegate
1
2
3
4
5
-(id<UIViewControllerInteractiveTransitioning>)navigationController:(UINavigationController*)navigationController
interactionControllerForAnimationController:(id<UIViewControllerAnimatedTransitioning>)animationController
{
returnself.interactionController;
}

注重,假如在一个不克不及交互的动画中,这里会前往nil。(译注:当不克不及交互时self.interactionController为nil)
interactionController是UIPercentDrivenInteractionTransition的实例,没有需要更多的设置。我们经由过程创立拖下手势(UIPanGestureRecognizer)来完成:
1
2
3
4
5
6
if(panGestureRecognizer.state==UIGestureRecognizerStateBegan){
if(location.x>CGRectGetMidX(view.bounds)){
navigationControllerDelegate.interactionController=[[UIPercentDrivenInteractiveTransitionalloc]init];
[selfperformSegueWithIdentifier:PushSegueIdentifiersender:self];
}
}

只要当用户在屏幕右侧操纵时,我们才设置动画是能够交互的(经由过程设置interactionController属性)。然后我们挪用performSegueWithIdentifier(或是不必storyboards,间接pushviewcontroller)在这个手势变更中,我们挪用interactionController的一个办法updateInteractiveTransition:
1
2
3
4
elseif(panGestureRecognizer.state==UIGestureRecognizerStateChanged){
CGFloatd=(translation.x/CGRectGetWidth(view.bounds))*-1;
[interactionControllerupdateInteractiveTransition:d];
}

这里依据拖动的间隔设置百分比,十分cool的事变是交互把持器(interactionController)和动画把持器(animationcontroller)互相合作。并且由于是一般的UIView动画,它把持着动画的历程。我们不必要处置他们之前的事变,一切的事变都在面前冷静的主动弄定了。
最初,当手势中断或是作废失落,我们必要挪用interactioncontroller响应的办法
<p>1
2
3
4
5
6
7
8
elseif(panGestureRecognizer.state==UIGestureRecognizerStateEnded){
if([panGestureRecognizervelocityInView:view].x<0){
[interactionControllerfinishInteractiveTransition];
}else{
[interactionControllercancelInteractiveTransition];
}
<p>
山那边是海 该用户已被删除
沙发
发表于 2015-1-21 11:18:52 | 只看该作者
每个行业都一样,想要一天学有所成是不可能的,一定要做好努力的准备,做ios不是简单的学会oc语言。不怕多走弯路,就怕不肯动手。
只想知道 该用户已被删除
板凳
发表于 2015-1-30 16:51:12 | 只看该作者
看完这个你就可以有多种选择来踏入做应用的阶段
精灵巫婆 该用户已被删除
地板
发表于 2015-2-2 22:04:17 | 只看该作者
AD: iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。
若相依 该用户已被删除
5#
发表于 2015-2-5 01:02:19 | 只看该作者
看《iPhone 4与iPad开发基础教程》,跟着一步步来
再见西城 该用户已被删除
6#
发表于 2015-2-11 00:17:46 | 只看该作者
要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。
第二个灵魂 该用户已被删除
7#
发表于 2015-3-1 18:42:12 | 只看该作者
其次学习方法和学习心态很重要,在学习当中应该保持一颗良好的心态。应该借鉴别人好的学习方法,大家互相帮助,取长补短。
透明 该用户已被删除
8#
发表于 2015-3-10 22:00:12 | 只看该作者
看《iPhone 4与iPad开发基础教程》,跟着一步步来
9#
发表于 2015-3-10 22:47:20 | 只看该作者
还有开发工具是用Xcode,是在Mac系统的,你多摸索一下就可以开发简单的应用了,建议你买一本iphone开发秘籍第二版看看,希望可以帮到你,谢谢。
飘灵儿 该用户已被删除
10#
发表于 2015-3-12 09:58:13 | 只看该作者
看完这个你就可以有多种选择来踏入做应用的阶段
海妖 该用户已被删除
11#
发表于 2015-3-13 03:09:53 | 只看该作者
特别是在校的学生,都存在一个小小的尴尬——虽然学习iOS开发的热情高涨,但由于没有多余的银子购买昂贵的Mac电脑而踟蹰不前。其实,针对初学者,如果想进入iOS开发的天地
小妖女 该用户已被删除
12#
发表于 2015-3-18 20:42:43 | 只看该作者
培训时可以选择安卓,iOS,Java,因为实习的时候我选了安卓,当时实习时间只有三周,学的晕头转向,而java我也没学过,iOS的基础是C语言,这个大学里还是学过的,于是选择了iOS。
愤怒的大鸟 该用户已被删除
13#
发表于 2015-3-26 13:51:35 | 只看该作者
边吃零食边看Stanford的视频教程
乐观 该用户已被删除
14#
发表于 2015-3-27 10:11:22 | 只看该作者
培训时可以选择安卓,iOS,Java,因为实习的时候我选了安卓,当时实习时间只有三周,学的晕头转向,而java我也没学过,iOS的基础是C语言,这个大学里还是学过的,于是选择了iOS。
admin 该用户已被删除
15#
发表于 2015-3-31 06:52:50 | 只看该作者
我也从简单的状态栏适配开始,先研究了下关于状态栏的适配,特总结如下,供广大网友一起讨论交流。
小魔女 该用户已被删除
16#
发表于 2015-4-1 08:25:50 | 只看该作者
开始的时候甚至想放弃,不过想想自己的未来,只能咬牙坚持,课下就不停的缠着老师。放学就补基础,这些基础的东西没有速成的,只有刻苦努力。我是后来发现的,转变自己的心态,不要读书看资料当成一种痛苦
简单生活 该用户已被删除
17#
发表于 2015-4-1 22:10:57 | 只看该作者
重要的是,放眼全球也的确找不到第二个如苹果iOS平台这样健壮、完整、先进而且为开发者带来真实收益的开发平台来。
若天明 该用户已被删除
18#
发表于 2015-4-6 20:11:11 | 只看该作者
看完这个你就可以有多种选择来踏入做应用的阶段
不帅 该用户已被删除
19#
发表于 2015-4-19 06:51:31 | 只看该作者
AD: iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。
活着的死人 该用户已被删除
20#
发表于 2015-4-20 11:26:43 | 只看该作者
我也从简单的状态栏适配开始,先研究了下关于状态栏的适配,特总结如下,供广大网友一起讨论交流。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 12:56

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表