s
Appdalagate.h方法中
#import "AppDelegate.h"
#import "CurtainViewController.h"
@implementation AppDelegate
@synthesize window=_window;
- (void)dealloc
{
[_window release];
[super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
//简介的设置了初始化,和对界面的权限的
self.window.rootViewController=[[CurtainViewController alloc]init];
// CurtainViewController *curtainViewcontroler=[[CurtainViewController alloc]initWithNibName:CurtainViewController bundle:nil];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
在CurtainViewController.h类中实现方法
#import "CurtainViewController.h"
#import "DemoViewControler.h"
#import "UIViewController+RECurtainViewController.h"
//类别 类似是(要继承的类名 和新生成的类名)
@interface CurtainViewController ()
@end
@implementation CurtainViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
//对背景的设置 如果是真为 设置为11.jpg 假为其他的颜色
self.view.backgroundColor=UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPhone?
[UIColor colorWithPatternImage:[UIImage imageNamed:@"11.jpg"]]:[UIColor grayColor];
//按钮的位置的设置 点击事件 和显示
UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame=CGRectMake((self.view.frame.size.width-200)/2,self.view.frame.size.height/2-30,200,44);
[button setTitle:@"水平" forState:UIControlStateNormal];
[button addTarget:self action:@selector(dismisshorizontalPressed) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
//水平 的方法的
button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake((self.view.frame.size.width - 200) / 2, self.view.frame.size.height / 2 + 30, 200, 44);
[button setTitle:@"Dismiss Vertical" forState:UIControlStateNormal];
[button addTarget:self action:@selector(dismissVerticalPressed) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}
return self;
}
//事件发生 要调用的界面初始化 和调用重构的方法
-(void)dismisshorizontalPressed{
DemoViewControler *test=[[DemoViewControler alloc]init];
[self curtainRevealViewController:test transitionStyle:RECurtainTransitionHorizontal];
}
- (void)dismissVerticalPressed
//水平的方法的事件处理
{
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:[[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped]];
[self curtainRevealViewController:nav transitionStyle:RECurtainTransitionVertical];
}
在DemoViewControler.m 中实现的方法
#import "DemoViewControler.h"
#import "CurtainViewController.h"
#import "UIViewController+RECurtainViewController.h"
@interface DemoViewControler ()
@end
@implementation DemoViewControler
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
//初始化进入第二个界面的背景和按钮的设置 按钮的点击事件
UIImageView *backgroundimage=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"22.jpg"]];
[self.view addSubview:backgroundimage];
UIButton *button
=[UIButton buttonWithType:UIButtonTypeRoundedRect ];
button.frame=CGRectMake((self.view.frame.size.width-200)/2, self.view.frame.size.height/2-20, 200, 44);
[button setTitle:@"Test Button" forState:UIControlStateNormal];
[button addTarget:self action:@selector(pressbutton) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
// Custom initialization
}
return self;
}
-(void)pressbutton{
//按钮的点击的事件 第二界面的初始化 并调用重构的方法
CurtainViewController *test = [[CurtainViewController alloc] init];
[self curtainRevealViewController:test transitionStyle:RECurtainTransitionHorizontal];
}
//屏幕是否可以旋转'
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
在类中 实现的协议 -----UIViewController (RECurtainViewController)
#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
//用枚举的方法来判断水平还是垂直方向
typedef enum _RECurtainTransitionStyle {
RECurtainTransitionHorizontal = 0,
RECurtainTransitionVertical = 1
} RECurtainTransitionStyle;
@interface UIViewController (RECurtainViewController)
//界面的跳转用到的重构方法
- (void)curtainRevealViewController:(UIViewController *)viewControllerToReveal transitionStyle:(RECurtainTransitionStyle)transitionStyle;
#import "UIViewController+RECurtainViewController.h"
#import "AppDelegate.h"
@implementation UIViewController (RECurtainViewController)
- (UIImage *)imageWithView:(UIView *)view
{//
//选择不否是透明的图形
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
//重构的方法
- (void)curtainRevealViewController:(UIViewController *)viewControllerToReveal transitionStyle:(RECurtainTransitionStyle)transitionStyle
{
AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
UIImage *selfPortrait = [self imageWithView:appDelegate.window];
UIImage *controllerScreenshot = [self imageWithView:viewControllerToReveal.view];
//初始化
UIView *coverView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, selfPortrait.size.width, selfPortrait.size.height)];
coverView.backgroundColor = [UIColor blackColor];
[appDelegate.window addSubview:coverView];//用代理来显示当期的图像
int offset = 20;
if (controllerScreenshot.size.height == [UIScreen mainScreen].bounds.size.height) {
offset = 0;
}
float padding = [UIScreen mainScreen].bounds.size.width * 0.1;
//初始化了一个图像的对象
UIImageView *fadedView = [[UIImageView alloc] initWithFrame:CGRectMake(padding, padding + offset, controllerScreenshot.size.width - padding * 2, controllerScreenshot.size.height - padding * 2 - 20)];
fadedView.image = controllerScreenshot;
fadedView.alpha = 0.4;
[coverView addSubview:fadedView];
UIImageView *leftCurtain = [[UIImageView alloc] initWithFrame:CGRectNull];
leftCurtain.image = selfPortrait;
leftCurtain.clipsToBounds = YES;
UIImageView *rightCurtain = [[UIImageView alloc] initWithFrame:CGRectNull];
rightCurtain.image = selfPortrait;
rightCurtain.clipsToBounds = YES;
if (transitionStyle == RECurtainTransitionHorizontal) {
leftCurtain.contentMode = UIViewContentModeLeft;
leftCurtain.frame = CGRectMake(0, 0, selfPortrait.size.width / 2, selfPortrait.size.height);
rightCurtain.contentMode = UIViewContentModeRight;
rightCurtain.frame = CGRectMake(selfPortrait.size.width / 2, 0, selfPortrait.size.width / 2, selfPortrait.size.height);
} else {
leftCurtain.contentMode = UIViewContentModeTop;
leftCurtain.frame = CGRectMake(0, 0, selfPortrait.size.width, selfPortrait.size.height / 2);
rightCurtain.contentMode = UIViewContentModeBottom;
rightCurtain.frame = CGRectMake(0, selfPortrait.size.height / 2, selfPortrait.size.width, selfPortrait.size.height / 2);
}
[coverView addSubview:leftCurtain];
[coverView addSubview:rightCurtain];
[UIView animateWithDuration:0.7 delay:0 options:UIViewAnimationCurveEaseIn animations:^{
if (transitionStyle == RECurtainTransitionHorizontal) {
leftCurtain.frame = CGRectMake(- selfPortrait.size.width / 2, 0, selfPortrait.size.width / 2, selfPortrait.size.height);
rightCurtain.frame = CGRectMake(selfPortrait.size.width, 0, selfPortrait.size.width / 2, selfPortrait.size.height);
} else {
leftCurtain.frame = CGRectMake(0, - selfPortrait.size.height / 2, selfPortrait.size.width, selfPortrait.size.height / 2);
rightCurtain.frame = CGRectMake(0, selfPortrait.size.height, selfPortrait.size.width, selfPortrait.size.height / 2);
}
} completion:nil];
[UIView animateWithDuration:0.3 delay:0.5 options:UIViewAnimationCurveEaseIn animations:^{
fadedView.frame = CGRectMake(0, offset, controllerScreenshot.size.width, controllerScreenshot.size.height);
fadedView.alpha = 1;
} completion:^(BOOL finished){
AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
appDelegate.window.rootViewController = viewControllerToReveal;
[leftCurtain removeFromSuperview];
[rightCurtain removeFromSuperview];
[fadedView removeFromSuperview];
[coverView removeFromSuperview];
}];
}