处理IPhone多个view切换是我们常遇到的问题,接下来有个比较实用的方法:
而且还附有创建空项目,内存告急处理和动画效果的实现!
具体步骤:
1.创建一个空的项目,然后添加一个ViewController,勾选上with xib文件,点击到xib文件看看File's Owner属性是否是当前的ViewController,如果不是,手动填写一下,并将他的view属性拖向当前的view,view如果改成UIController,那么该view就具备事件
2.修改AppDelegate.h
@class DXWViewController;
@property (strong, nonatomic) DXWViewController *viewController;
3.修改AppDelegate.m首先在dealloc中添加
[_viewController release];
接着是添加
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
self.viewController = [[[DXWViewController alloc] initWithNibName:@"DXWViewController" bundle:nil] autorelease];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
上面是讲从0开始创建一个启动项目,下面是做一个多视图切换的功能
4.截下来是创建三个ViewController,分别是RedViewController(主view),YellowViewController,BlueViewController
主view下面是一个toolbar控件,其他两个view下面是在属性ButtonBar选择ToolBar实现
5.在主view中编码实现
ViewController.h:
#import <UIKit/UIKit.h> #import "BlueViewController.h" #import "YellowViewController.h" @interface DXWViewController : UIViewController @property(retain,nonatomic) BlueViewController *blueViewController; @property(retain,nonatomic)YellowViewController *yellowViewController; - (IBAction)blueClick:(id)sender; - (IBAction)yellowClick:(id)sender; - (IBAction)redClick:(id)sender; - (IBAction)click:(id)sender; @end
#import "DXWViewController.h" @interface DXWViewController () @end @implementation DXWViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; } //如果内存警告,则调用这个方法,可以让你自己清掉一些不需要用的内存 - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; NSLog(@"内存告急"); //如果内存警告则释放无用资源 if (self.blueViewController.view.superview != nil) { [self.yellowViewController.view removeFromSuperview]; } else if(self.yellowViewController.view.superview != nil){ [self.blueViewController.view removeFromSuperview]; } } - (IBAction)click:(id)sender { // NSLog(@"hello"); [UIView beginAnimations:@"anim" context:nil]; //一个动画的持续时间 [UIView setAnimationDuration:1.5f]; //一个动画的运动随时间快慢曲线 [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; //动画方式 [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES]; //如果当前view的父view存在 if (self.blueViewController.view.superview != nil) { //如果没创建则创建 if (self.yellowViewController == nil) { self.yellowViewController = [[[YellowViewController alloc] initWithNibName:@"YellowViewController" bundle:nil] autorelease]; } [self.blueViewController.view removeFromSuperview]; [self.view insertSubview:self.yellowViewController.view atIndex:10]; } else if (self.yellowViewController.view.superview != nil) { [UIView beginAnimations:@"anim" context:nil]; //一个动画的持续时间 [UIView setAnimationDuration:2.5f]; //一个动画的运动随时间快慢曲线 [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; //动画方式 [UIView setAnimationTransition:UIViewAnimationOptionTransitionCurlUp forView:self.view cache:YES]; //如果没创建则创建 if (self.blueViewController == nil) { self.blueViewController = [[[BlueViewController alloc] initWithNibName:@"BlueViewController" bundle:nil] autorelease]; } [self.yellowViewController.view removeFromSuperview]; [self.view insertSubview:self.blueViewController.view atIndex:10]; [UIView commitAnimations]; } //动画效果启动 [UIView commitAnimations]; } - (IBAction)blueClick:(id)sender { NSLog(@"blue"); //[self.blueViewController.view removeFromSuperview]; self.blueViewController = [[[BlueViewController alloc] initWithNibName:@"BlueViewController" bundle:nil] autorelease]; [self.view insertSubview:self.blueViewController.view atIndex:10]; } - (IBAction)yellowClick:(id)sender { NSLog(@"yellow"); //加上这句就可以红黄蓝任意点击 //[self.yellowViewController.view removeFromSuperview]; self.yellowViewController = [[[BlueViewController alloc] initWithNibName:@"YellowViewController" bundle:nil] autorelease]; [self.view insertSubview:self.yellowViewController.view atIndex:10]; } //主视图控制器 - (IBAction)redClick:(id)sender { NSLog(@"red"); [self.yellowViewController.view removeFromSuperview]; [self.blueViewController.view removeFromSuperview]; } @end旋转效果