IPhone多视图切换

处理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

ViewController.m:

#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

旋转效果

时间: 2024-09-20 00:17:14

IPhone多视图切换的相关文章

MFC框架下 单文档视图中多视图切换问题

问题描述 MFC框架下 单文档视图中多视图切换问题 在MainFrm.cpp 里对主视图进行了切分 BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs CCreateContext* pContext){ // TODO: Add your specialized code here and/or call the base class // CRect rc; // 获取框架窗口客户区的CRect对象 GetClientRect(&rc);

Access如何查询SQL视图切换

  单纯的SQL语言所包括的句子并不多,但在运用的过程中需求很多输入各种表.查询和字段的姓名.这样当你树立一个触及很多字段的查询时,就需求输入很多文字,与用查询规划视图树立查询比较,就费事多了. 所以我在树立查询的时分也都是先在查询规划视图将根本的查询功用都完结了,最终再切换到SQL视图经过编写SQL句子完结一些特别的查询.下面咱们就介绍一些在ACCESS运用中常常会用到的一些SQL语言. 我们说过在建立查询的时候可以切换到SQL视图去,下面来看看是怎么切换的: 当你打开一个查询以后,单击"新建

AngularJS入门教程之多视图切换用法示例_AngularJS

本文实例讲述了AngularJS多视图切换用法.分享给大家供大家参考,具体如下: 在AngularJS应用中,我们可以將html碎片写在一个单独的文件中,然后在其他页面中將该段碎片加载进来.如果有多个碎片文件,我们还可以在控制器中根据用户的操作动态的加载不同的碎片,从而达到切换视图的效果. 先来看看笔者写好的一个案例吧: 这两首词实际上是两个html碎片,分别写在page1.html和page2.html.下面是这两个文件的内容: <!--page1.html内容--> <div>

Android零基础入门第54节:视图切换组件ViewSwitcher

原文:Android零基础入门第54节:视图切换组件ViewSwitcher    前面三期学习了ProgressBar系列组件,那本期开始一起来学习ViewAnimator组件.     一.ViewAnimator组件概述       ViewAnimator是一个基类,它继承了 FrameLayout,因此它表现出FrameLayout的特征,可以将多个View组件叠在一起. ViewAnimator额外增加的功能正如它的名字所暗示的一样,ViewAnimator可以在View切换时表现出

iOS开发系列--视图切换

概述 在iOS开发中视图的切换是很频繁的,独立的视图应用在实际开发过程中并不常见,除非你的应用足够简单.在iOS开发中常用的视图切换有三种,今天我们将一一介绍: UITabBarController UINavigationController 模态窗口 UITabBarController iOS三种视图切换的原理各不相同: UITabBarController:以平行的方式管理视图,各个视图之间往往关系并不大,每个加入到UITabBarController的视图都会进行初始化即使当前不显示在

ios开发-iOS开发 视图切换的方法,怎么用

问题描述 iOS开发 视图切换的方法,怎么用 视图切换,有几种方法,我知道几个,但是不知道怎么用,求大神的有用资源,谢谢 解决方案 1.add/remove view. 2.模态弹出. 3.导航push/pop

java-Java ee 视图切换成Java后,什么都不显示

问题描述 Java ee 视图切换成Java后,什么都不显示 描述,如题:Java ee 视图切换成Java后,什么都不显示 解决方案 切换成java后,,就变成j2se视图了,, 解决方案二: 右键它,有一个reset,点击一下就行了~ 解决方案三: 可能是你把Java的某些常用视图给关闭了,重新打开就行了. 打开方法参考:http://ask.csdn.net/questions/238131这个问题的第一个回答的第一幅图片. 就是windows-show view这个菜单,打开常用的视图.

mapx vc-mapx视图切换问题,求高手解答

问题描述 mapx视图切换问题,求高手解答 工作需要,做一个程序,视图需要在mapx地图和视频之间切换,请问如何实现,切换视频时候如何隐藏地图 还可以切换回来

iOS开发之视图切换_IOS

一.视图切换 UITabBarController (分页控制器) - 平行管理视图 UINavigationController (导航控制器) - 压栈出栈管理视图 模态窗口 二.UITabBarController分页控制器 UITabBarController是为了利用 页签切换视图 设计的控制器 该控制器有一个UITabBar控件,用户通过点击UITabBar进行视图切换 UITabBarController本身会不显示任何视图,它只是一个 容器控制器 为了减少视图间的耦合,所有UIT