IPhone多视图切换
处理IPhone多个view切换是我们常遇到的问题,接下来有个比较实用的方法:
而且还附有创建空项目,内存告急处理和动画效果的实现!
具体步骤:
1.创建一个空的项目,然后添加一个ViewController,勾选上with xib文件,点击到xib文件看看File's Owner属性是否是当前的ViewController,如果不是,手动填写一下,并将他的view属性拖向当前的view,view如果改成UIController,那么该view就具备事件
2.修改AppDelegate.h
@classDXWViewController;
@property (strong, nonatomic) DXWViewController *viewController;
3.修改AppDelegate.m
首先在dealloc中添加
[_viewControllerrelease];
接着是添加
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindowalloc] initWithFrame:[[UIScreenmainScreen] bounds]] autorelease];
self.viewController = [[[DXWViewControlleralloc] initWithNibName:@"DXWViewController"bundle:nil] autorelease];
self.window.rootViewController = self.viewController;
[self.windowmakeKeyAndVisible];
returnYES;
}
上面是讲从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
旋转效果
IPhone多视图切换的更多相关文章
- IOS 视图切换动画
我在网上找到的这个小方法,被我举一反三使用的屡试不爽.比如用在,当视图需要执行某一方法跳转到新的一个UIView上,从底层渐变浮到最上层.就是一个不错的视觉效果或者当需要类似keyboard的效果从底 ...
- iOS开发系列--视图切换
概述 在iOS开发中视图的切换是很频繁的,独立的视图应用在实际开发过程中并不常见,除非你的应用足够简单.在iOS开发中常用的视图切换有三种,今天我们将一一介绍: UITabBarController ...
- pushViewController addSubview presentModalViewController视图切换
1.pushViewController和popViewController来进行视图切换,首先要确保根视图是NavigationController,不然是不可以用的, pushViewContro ...
- UI3_视图切换
// // ViewController.m // UI3_视图切换 // // Created by zhangxueming on 15/7/3. // Copyright (c) 2015年 z ...
- UI2_视图切换ViewController
// // SubViewController.h // UI2_视图切换 // // Created by zhangxueming on 15/7/3. // Copyright (c) 2015 ...
- UI1_ViewController视图切换及Appdelegate
// // ThirdViewController.h // UI1_ViewController视图切换及Appdelegate // // Created by zhangxueming on 1 ...
- UI2_视图切换
// // ViewController.m // UI2_视图切换 // // Created by zhangxueming on 15/7/1. // Copyright (c) 2015年 z ...
- Tabbar视图切换,返回上一视图,添加item
前面有一篇博文iOS学习之Tab Bar的使用和视图切换 这是在AppDelegate里使用Tabbar,这样的程序打开就是TabbarView了,有时候我们需要给程序做一些帮助页面,或者登录页面,之 ...
- MFC视图切换大全总结
单纯视图之间的切换 单文档多视图切换是我在学习MFC中遇到的一个老大难问题,在今天总算是一一破解了.我觉得视图切换分为三个等级,第一是在未切分窗格的情况下切换视图类:第二是在分割窗格的一个窗格内实行视 ...
随机推荐
- ##DAY11 UITableView编辑
##DAY11 UITableView编辑 每一个视图控制器都有一个编辑按钮,因为项目中编辑的应用场景非常多,所以系统预留了一个编辑按钮供我们使用 self.navigationItem.leftBa ...
- Java socket字节流传输的示例
服务端server端: package com.yuan.socket; import java.io.*; import java.net.ServerSocket; import java.net ...
- BZOJ 3230: 相似子串( RMQ + 后缀数组 + 二分 )
二分查找求出k大串, 然后正反做后缀数组, RMQ求LCP, 时间复杂度O(NlogN+logN) -------------------------------------------------- ...
- Ie浏览器TextBox文本未居中
Ie浏览器TextBox文本未居中,而其他浏览器无问题时,可能原因是未设置垂直居中 vertical-align:middle
- RHEL4-Partition Image系统备份(软件版)
对于BBS,或Apache,PHP等相关网页的程序 备份: 1)/var/www/html目录,里面有PHP所写成的网页.此网页主要功能是从资料库中读取由信件存入的文章,或是使用者选择由网页输入资料时 ...
- MySQLD 配置
http://blog.163.com/sir_876/blog/static/11705223201372710303382/ http://www.kankanews.com/ICkengine/ ...
- hdu 4034 Graph(逆向floyd)
floyd的松弛部分是 g[i][j] = min(g[i][j], g[i][k] + g[k][j]);也就是说,g[i][j] <= g[i][k] + g[k][j] (存在i-> ...
- mysqldump 利用rr隔离实现一致性备份
mysqldump -p -S /data/mysqldata1/sock/mysql.sock --single-transaction --master-data=2 --database db1 ...
- cocos2dx 字体BMFont,Atlas
为了更加个性化,系统提供的字体,有时候没法满足我们的要求,所以cocos2dx提供了自定义字体控件. 分别是CCLabelBMFont和CCLabelAtlas,先看BMFont的效果 CCLabel ...
- Codeforces Round#2
A. Winner 题目大意:一些人在玩游戏,给出n次某人获得的分数,现在请计算出胜者,如果不止一个最高分,则取最先达到该分数的人. 题解:模拟得分过程,首先计算出最高分,然后获取先到达或超过最高分的 ...