双击切换全屏幕动作

寻找一种方法来实现一个双屏幕“双屏幕”可逆的行动,但我没有成功!

更详细地说,有2个UIView: – topViewContainer – bottomViewContainer

当我双击超视图时,视图“bottomViewContainer”扩展为全屏,然后重新双击,视图恢复到原始大小。

它应该在纵向模式和横向模式下工作!

这是我迄今为止所做的:

-(void)handleDoubleTap:(UITapGestureRecognizer *)sender { if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeLeft || [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeRight) { if (sender.numberOfTapsRequired == 2){ NSLog(@"if gesture up - LS"); [UIView animateWithDuration:0.5 delay:0.1 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ topContainerView.frame = CGRectMake(0.0, -160.0, 480.0, 244.0); bottomContainerView.frame = CGRectMake(0.0, 0.0, 480.0, 300.0);} completion:^(BOOL finished){ NSLog(@"%f,%f",bottomContainerView.frame.size.width,bottomContainerView.frame.size.height); }]; } else if (sender.numberOfTapsRequired == 2) { NSLog(@"else if gesture down - LS"); [UIView animateWithDuration:0.5 delay:0.1 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ topContainerView.frame = CGRectMake(0.0, -160.0, 480.0, 244.0); bottomContainerView.frame = CGRectMake(0.0, 84.0, 480.0, 216.0);} completion:^(BOOL finished){ NSLog(@"%f,%f",bottomContainerView.frame.size.width,bottomContainerView.frame.size.height); }]; } } else if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortrait) { if (sender.numberOfTapsRequired == 2) { NSLog(@"if gesture down - PT"); [UIView animateWithDuration:0.5 delay:0.1 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ topContainerView.frame = CGRectMake(0.0, 0.0, 320.0, 244.0); bottomContainerView.frame = CGRectMake(0.0, 0.0, self.view.frame.size.width, 640.0); } completion:^(BOOL finished){ NSLog(@"%f,%f",bottomContainerView.frame.size.width,bottomContainerView.frame.size.height); }]; } else if (sender.numberOfTapsRequired == 2) { NSLog(@"else if gesture up - PT"); [UIView animateWithDuration:0.5 delay:0.1 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ topContainerView.frame = CGRectMake(0.0, 0.0, 320.0, 244.0); bottomContainerView.frame = CGRectMake(0.0, 244.0, self.view.frame.size.width, 216.0); } completion:^(BOOL finished){ NSLog(@"%f,%f",bottomContainerView.frame.size.width,bottomContainerView.frame.size.height); }]; } } 

}

试试这个代码:

 #import "ViewController.h" @interface ViewController (){ UIView *topContainerView; UIView *bottomContainerView; CGRect initialTopContainerView; CGRect initialBottomContainerView; BOOL isFullScreen; } @end @implementation ViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization CGSize result = [[UIScreen mainScreen] bounds].size; topContainerView = [[UIView alloc]initWithFrame:CGRectMake(0.0, 0.0, result.width, result.height/2)]; topContainerView.backgroundColor = [UIColor redColor]; topContainerView.tag = 1; [self.view addSubview:topContainerView]; bottomContainerView = [[UIView alloc]initWithFrame:CGRectMake(0.0, result.height/2, result.width, result.height/2)]; bottomContainerView.backgroundColor = [UIColor blueColor]; bottomContainerView.tag = 2; [self.view addSubview:bottomContainerView]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleDoubleTap:)]; tap.numberOfTapsRequired = 2; [bottomContainerView addGestureRecognizer:tap]; UITapGestureRecognizer *tap2 = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleDoubleTap:)]; tap2.numberOfTapsRequired = 2; [topContainerView addGestureRecognizer:tap2]; initialTopContainerView = bottomContainerView.frame; initialBottomContainerView = topContainerView.frame; isFullScreen = false; } return self; } -(void)handleDoubleTap:(UITapGestureRecognizer *)sender { CGSize result = [[UIScreen mainScreen] bounds].size; int heightSreen = result.height; int widthSreen = result.width; if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeLeft || [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeRight) { heightSreen = result.width; widthSreen = result.height; } if (sender.numberOfTapsRequired == 2) { CGRect newFrameTop; CGRect newFrameBottom; isFullScreen = !isFullScreen; if (isFullScreen) { if (sender.view.tag == 1) { newFrameTop = CGRectMake(0, 0, widthSreen, heightSreen); newFrameBottom = CGRectMake(0, heightSreen, widthSreen, 0); }else{ newFrameTop = CGRectMake(0, 0, widthSreen, 0); newFrameBottom = CGRectMake(0, 0, widthSreen, heightSreen); } [UIView animateWithDuration:0.5 delay:0.1 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ topContainerView.frame = newFrameTop; bottomContainerView.frame = newFrameBottom; }completion:nil]; }else{ [UIView animateWithDuration:0.5 delay:0.1 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ topContainerView.frame = CGRectMake(0.0, 0.0, widthSreen, heightSreen/2); bottomContainerView.frame = CGRectMake(0.0, heightSreen/2, widthSreen, heightSreen/2); }completion:nil]; } } } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end