代码很精短...书上介绍的也不多。愣是整整干了一天才完成...holy shit,
不过还是学到了很多新东西.
当时看书的时候,书上介绍这个的篇幅加上代码总共才1页两面...加上之前源代码下好了,按照惯例把源代码打开看看应用效果啊,xib文件啊,对类的应用啊等等,然后发现就那么一点东西,基本上所有代码都集中在了RootViewController中了...觉得木有什么,差一点就看看而过去了...后来还是觉得手写一下比较好,这nm写了发现各种坑爹啊...
短短的几行代码各种问题...
一
首先这个程序采用一个主viewController控制整个视图的切换,各个分视图只是随便给背景涂了个颜色就完了,甚至分视图重要用的navigationBar啊,infoButton之类的都没有拖拽到单个分视图里面去,而是直接以全局变量的形式写进了主viewController中...
二
接着说下值得注意的地方...
self.secondViewController=[[SecondViewControlleralloc] initWithNibName:@"SecondViewController"bundle:nil];
譬如这里,虽然这个以前就知道,但是很少去使用,这也是一种初始化的方法,通过在程序中创建单独的View、ViewController等,然后在主viewController中用initWithNibName方法对这些单独的viewController进行初始化------嗯,NibName的形式~
三
navigationBar在代码中的使用方法
self.navigationBar=[[UINavigationBaralloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)];
self.navigationBar.barStyle=UIBarStyleBlackOpaque;
UIBarButtonItem *button=[[UIBarButtonItemalloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDonetarget:selfaction:@selector(toggleView:)];
UINavigationItem *navigationItem=[[UINavigationItemalloc] initWithTitle:@"SecondView"];
navigationItem.rightBarButtonItem=button;
[self.navigationBar pushNavigationItem:navigationItem animated:NO];
[button release];
[navigationItem release];
正如代码中写的一样,对bar、item、button(这里是navigationBar中使用的button,需要使用UIBarButtonItem)初始化,然后把button加入item中,navigationItem.rightBarButtonItem=button;当然还有left、back的barbutton,可以在action中选择按钮对应的消息,最后把item push 到navigationBar中去就可以啦, [self.navigationBar pushNavigationItem:navigationItem animated:NO];
四
insertSubview:aboveSubview: 和 insertSubview:belowSubview:这两个函数的使用问题,当时自己是蒙着源代码,照着app效果一步步写的,然后就愣是想不懂,怎么不在把类似于button、navigationBar这样的小控件加入到一个单独的ViewController的 情况下同时把view和ctrl同时显示在一个页面中,会不会有覆盖的问题呢。。。
然后看了源代码就发现了insertSubview:belowSubview:这个函数,当然,当时以为只有这一个。。。以为下面那个aboveSubview也是belowSubview。就没注意这一对的两个函数。。。然后尝试性的调换了下两个参数的位置,悲剧就发生了。。。就觉得这个很神奇啊。。
上网学习了UIView的结构以及其中的函数消息。终于弄懂了,说白了这个函数就是调节子视图之间的上下层次关系,要注意的就是,不论使用哪个函数,above/belowSubview这个的参数是一定要被已经初始化了的,即存在了的,而insertSubview的参数是可以不存在的,就相当与是,现在已经知道A跟B了,然后我把C插到B的上面或下面,这是木有问题的,而如果只知道A,不知道B,然后我说把C插到B的上面或下面,这就明显不允许了~都不知道B在哪还搞个毛啊
下面是实战的部分的代码
if([firstView superview]!=nil)
{
[firstViewControllerviewWillDisappear:YES];
[secondViewControllerviewWillAppear:YES];
[infoButtonremoveFromSuperview];
[firstView removeFromSuperview];
[self.view addSubview:secondView];
[self.viewinsertSubview:navigationBaraboveSubview:secondView];
[secondViewControllerviewDidAppear:YES];
[firstViewControllerviewDidDisappear:YES];
}else
{
[secondViewControllerviewWillDisappear:YES];
[firstViewControllerviewWillAppear:YES];
[navigationBarremoveFromSuperview];
[secondView removeFromSuperview];
[self.view addSubview:firstView];
[self.viewinsertSubview:infoButtonaboveSubview:firstView];
[firstViewControllerviewDidAppear:YES];
[secondViewControllerviewDidDisappear:YES];;
}
以及
self.firstViewController=[[FirstViewControlleralloc] initWithNibName:@"FirstViewController"bundle:nil];
[self.viewaddSubview:firstViewController.view];
[self.viewinsertSubview:firstViewController.viewbelowSubview:infoButton];
另外,上网看了下addSubview和insertSubview的区别
直接贴过来好了~
{
addSubview 是将view加到所有层的最顶层
相当于将insertSubview的atIndex参数设置成view.subviews count
即
[view addSubview:oneview] == [view insertSubview:oneview atIndex:view.subviews count]
insertSubview是加到指定的位置
五
事实上,这个我现在只是知道是什么效果,却还没有深入研究这里面的东西
这里是两个UIView的切换动画的效果,包括翻转方向,翻转速度等
[UIViewbeginAnimations:nilcontext:NULL];
[UIViewsetAnimationDuration:1];
[UIViewsetAnimationTransition:([firstView superview]?UIViewAnimationTransitionFlipFromRight:UIViewAnimationTransitionFlipFromLeft) forView:self.viewcache:YES];
if([firstView superview]!=nil)
{
[firstViewControllerviewWillDisappear:YES];
[secondViewControllerviewWillAppear:YES];
............................
[secondViewControllerviewDidAppear:YES];
[firstViewControllerviewDidDisappear:YES];
}else
{
[secondViewControllerviewWillDisappear:YES];
[firstViewControllerviewWillAppear:YES];
............................
[firstViewControllerviewDidAppear:YES];
[secondViewControllerviewDidDisappear:YES];;
}
[UIViewcommitAnimations];
注意结尾一定要有个 [UIViewcommitAnimations];
开始跟结尾的两段代码是动画的设置部分
中间部分是自己的代码~
以后这个动画也要回过头来再研究下~
虽然小小的一点东西,其实还是有很多东西的,看的仔细,现在多花时间,以后才不会被这些小细节整的焦头烂额~
浙公网安备 33010602011771号