2013-07-09 57 views
1

寻找一种实现“双全屏”动作的方式,双击即可,但我没有成功!切换双击全屏幕动作

更详细地说,有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

不能完全肯定你的意思。我的理解是,您希望能够双击并将全屏图像“返回”到其原始位置。其他一些细节包括弹出的视图,它显示的内容,是否动态等等。 – MZimmerman6

+0

还有一点需要注意的是,你的第一个'elseif语句'有'condition || NO',所以永远不会被调用,尤其是因为如果条件匹配elseif条件 – MZimmerman6

+0

您是否想为topContainerView或只有bottomContainerView产生相同的效果? – VivienCormier

回答

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 
+0

令人惊叹!恭喜,它工作完美!只需修复横向模式(它需要重置视图大小),但我认为我可以做到这一点!谢谢 – GilbertOOl