寻找实现"全屏"的方法双击可逆转,但我没有成功!
更详细的说,有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);
}];
}
}
}
答案 0 :(得分:2)
试试这段代码:
#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