现学习IOS开发,在看别人代码时看到别人使用UIView中的exchangeSubviewAtIndex方法进行了视图跳转。花了点时间仔细学习了一下UIView中的视图关系,可能对于很多人来说已经算是小儿科,但是希望能帮助到用到的人,下面把我学到的东西分享给大家。
exchangeSubviewAtIndex:withSubviewAtIndex: 首先必须的先看看官方文档,
Exchanges the subviews at the specified indices.结合着方法调用时需要传递
的参数可以这样很准确的翻译,在指定一个子view集合中,交换两个子view。
再看一下UIView的声明,NSArray *subviews;这样就不难理解了,对于UIView
就像一个大容器,里面可以承载很多东西,你可以通过addSubview方法向UIView
中添加子View(子View也可以是UIView),当然可以覆盖(后添加上来的视图盖
在先添加的视图上面),而大容器UIView对象就会把你添加进来的子view统一存放
在subviews里面进行管理,而子view也具有自己的索引index,IOS中索引也是从0
开始,第一个添加进来的view是index = 0;以后按照顺序逐渐增加。这样一想,对
于IOS开发中的视图关系一下子就清楚了。这样再去看
exchangeSubviewAtIndex:withSubviewAtIndex方法就变得好理解多了。
那么很多人使用exchangeSubviewAtIndex:withSubviewAtIndex方法是进
行视图跳转的,其实从上面分析的结果来看也很是简单了,在一个UIView
中添加视图1、视图2、视图3,当前显示的是视图3,向要跳转到视图1,
只需要调用方法,把视图1的索引和视图3的索引传入到方法中就可以完
成视图的跳转了。
有人会问了,子view的索引怎么得到,我在浏览帖子的时候发现有人说得
不到,易做图,子view都是统一在subviews里面管理的怎么可能得不到呢。
得到的方法很简单,subviews是NSArray对象,NSArray对象里有个方法
indexOfObject,把你想要得到索引的子view对象传过去就可以得到这个
view的索引了。子view视图怎么得到,定义成全局是一种方法,也可以
通过tag得到视图(UIView中的一个方法 viewWithTag,这个方法类似于
Android中的findViewByI'd),当然事先你得为子view设置tag了。
exchangeSubviewAtIndex:withSubviewAtIndex方法是完成视图跳转的没错
,其实大部分是完成那么有动画效果的视图跳转,就像以前学习Android时
对于IOS上的立体翻转动画效果很是崇拜,在IOS上很简单,废话不多说了。
上代码:
[UIViewbeginAnimations:@"animationID"context:nil];//开始一个动画块,第一个参数为动画块标识
[UIViewsetAnimationDuration:1.5f];//设置动画的持续时间
//设置动画块中的动画属性变化的曲线,此方法必须在beginAnimations方法和commitAnimations,默认即为UIViewAnimationCurveEaseInOut效果。详细请参见UIViewAnimationCurve
[UIViewsetAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIViewsetAnimationRepeatAutoreverses:NO];//设置是否自动反转当前的动画效果
//设置过渡的动画 效果,此处第一个参数可使用5种动画效果
[UIViewsetAnimationTransition:UIViewAnimationTransitionFlipFromLeftforView:self.viewcache:YES];
//设置完成后启动跳转方法
[self.viewexchangeSubviewAtIndex:1withSubviewAtIndex:2];
[UIViewcommitAnimations];//提交动画