ee

来源:互联网 发布:以撒的结合mac版 编辑:程序博客网 时间:2024/05/17 07:23

//

//  WBPanoViewController.m

//  Pods

//

//  Created by niuxinghua on 16/9/18.

//

//


#import "WBPanoViewController.h"

#import <WBOpenUrlManager.h>

@interface WBPanoViewController ()<UIViewControllerTransitioningDelegate,UIViewControllerAnimatedTransitioning>{

    struct {

        unsignedint animatedDismissing: 1;

        unsignedint viewDisappeared: 1;

        unsignedint isNeedRotate: 1;

        unsignedint isPresentDone: 1;

    } _flags;

}

@property (nonatomic,weak) UIViewController *presentingController;

@property (nonatomic,weakUIView *transitionfromView;

@property (nonatomic,weakWBPanoView *transitionPanoView;

@property (nonatomic,assign) UIDeviceOrientation viewOrientation;

@property (nonatomic,assign) CGRect originalTransitionPanoViewFrame;

@property (nonatomic,assign) CGRect originalTransitionPanoViewFrameinwindow;

@property (nonatomic,assign) CGPoint originalTransitionPanoViewCenter;

@end


@implementation WBPanoViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view.

    self.view.backgroundColor=[UIColorclearColor];

   

}



#pragma mark--screen orientation


-(BOOL) shouldAutorotateToInterfaceOrientation:

(UIInterfaceOrientation)toInterfaceOrientation {

    return (toInterfaceOrientation ==UIInterfaceOrientationLandscapeRight || toInterfaceOrientation ==UIInterfaceOrientationLandscapeLeft);

}

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator

{

    self.viewOrientation = [UIDevicecurrentDevice].orientation;

    self.view.userInteractionEnabled =NO;

    [superviewWillTransitionToSize:size withTransitionCoordinator:coordinator];

       [UIViewanimateWithDuration:[coordinator transitionDuration] animations:^{

        self.transitionfromView.frame =CGRectMake(0,0, size.width, size.height);

    } completion:^(BOOL finished) {

        self.view.userInteractionEnabled =YES;

    }];

}


#pragma mark -present methods

- (void)presentFromViewController:(UIViewController *)controller timelinePanoView:(UIView*)panoView completion:(void (^)(void))completion

{

    [selfpresentFromViewController:controllertimelinePanoView:panoView animated:YEScompletion:completion];

}


- (void)presentFromViewController:(UIViewController *)controller timelinePanoView:(UIView*)panoView animated:(BOOL)animated completion:(void (^)(void))completion

{

    if (!controller) {

        controller = [[WBOpenUrlManagersharedManager] topModelViewController];

        if ([controllerisKindOfClass:[UINavigationControllerclass]]) {

            controller = [[(UINavigationController *)controllerviewControllers] lastObject] ? : controller;

        }

    }

    

    self.transitionfromView = panoView;

    for (UIView* viewin panoView.subviews) {

        if ([viewisKindOfClass:[WBPanoViewclass]]) {

            self.transitionPanoView = (WBPanoView*)view;

            _originalTransitionPanoViewCenter =  [viewconvertPoint:view.centertoView:controller.view.window];

            _originalTransitionPanoViewFrame = view.frame;

            _originalTransitionPanoViewFrameinwindow = [viewconvertRect:view.boundstoView:self.view];

            

            __weaktypeof(self) weakSelf =self;

            self.transitionPanoView.tapBlock = ^(){

                _flags.animatedDismissing =YES;

                [weakSelf dismissViewControllerAnimated:YEScompletion:^{

                    

                }];

            };

            break;

        }

    }

    UINavigationController * navigationController = [[UINavigationControlleralloc] initWithRootViewController:self];

    navigationController.transitioningDelegate =self;

    navigationController.navigationBar.hidden =YES;

    self.presentingController = controller;

    

    UIDeviceOrientation deviceOrientation = [UIDevicecurrentDevice].orientation;

    if (![[UIDevicecurrentDevice] wbt_isIPad] && deviceOrientation !=UIDeviceOrientationFaceUp && deviceOrientation !=UIDeviceOrientationFaceDown && deviceOrientation !=UIDeviceOrientationPortraitUpsideDown) {

        //  _flags.isNeedRotate = UIDeviceOrientationIsLandscape(self.videoPlayerController.currentOrientation);

    }

    

    self.transitionAnimated = animated;

    navigationController.view.userInteractionEnabled =YES;

    [controller presentViewController:navigationControlleranimated:YEScompletion:^{

        navigationController.view.userInteractionEnabled =YES;

        if (completion) {

            completion();

        }

    }];

}

#pragma mark --animated delegate

- (nullableid <UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source

{

    returnself;

}


- (nullableid <UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed

{

    _flags.animatedDismissing =YES;

    returnself;

}


- (NSTimeInterval)transitionDuration:(nullableid <UIViewControllerContextTransitioning>)transitionContext

{

    if (self.transitionAnimated) {

        return0.5;

    }

    return0.3;

}


- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext

{

    NSTimeInterval duration = [selftransitionDuration:transitionContext];

    if (_flags.animatedDismissing) {

         [selfanimateDismissTransition:transitionContextduration:duration];

    } else {

        [selfanimatePresentTransition:transitionContextduration:duration];

    }

}


- (void)animatePresentTransition:(id <UIViewControllerContextTransitioning>)transitionContext duration:(NSTimeInterval)duration

{

    UIViewController *fromViewController = [transitionContextviewControllerForKey:UITransitionContextFromViewControllerKey];

    UIViewController *toViewController = [transitionContextviewControllerForKey:UITransitionContextToViewControllerKey];

    

    UIView *fromView = fromViewController.view;

    UIView *toView = toViewController.view;

    UIView *containerView = [transitionContextcontainerView];

    

    if (WBAvalibleOS(8) && [transitionContextrespondsToSelector:@selector(viewForKey:)]) {

        fromView = [transitionContext viewForKey:UITransitionContextFromViewKey];

        toView = [transitionContext viewForKey:UITransitionContextToViewKey];

    }

    // [self hideStatusBarAnimated:NO];

    [containerView addSubview:toView];

    [self.transitionPanoViewremoveFromSuperview];

    self.transitionPanoView.frame =_originalTransitionPanoViewFrameinwindow;

    [toView addSubview:self.transitionPanoView];

    __weaktypeof(self) weakSelf =self;

    self.transitionPanoView.tapBlock = ^{

        _flags.animatedDismissing =YES;

        [weakSelf dismissViewControllerAnimated:YEScompletion:^{

            

        }];

    };

    self.transitionPanoView.userInteractionEnabled =YES;

    NSLog(@"%@frame - before",NSStringFromCGRect(self.transitionPanoView.frame));

    self.navigationController.view.frame = [UIScreen mainScreen].bounds;

    [UIViewanimateWithDuration:0.3animations:^{

        self.transitionPanoView.frame =self.view.bounds;

        self.transitionPanoView.center =self.view.center;//

        NSLog(@"%@frame--middle",NSStringFromCGRect(self.transitionPanoView.frame));

    } completion:^(BOOL finished) {

        NSLog(@"%@frame",NSStringFromCGRect(self.transitionPanoView.frame));

        [self.viewaddSubview:self.transitionPanoView];

        [transitionContext completeTransition:YES];

    }];

    

}

- (void)animateDismissTransition:(id <UIViewControllerContextTransitioning>)transitionContext duration:(NSTimeInterval)duration

{

    

    UIViewController *fromViewController = [transitionContextviewControllerForKey:UITransitionContextFromViewControllerKey];

    UIViewController *toViewController = [transitionContextviewControllerForKey:UITransitionContextToViewControllerKey];

    

    UIView *fromView = fromViewController.view;

    UIView *toView = toViewController.view;

    UIView *containerView = [transitionContextcontainerView];

    

    if (WBAvalibleOS(8) && [transitionContextrespondsToSelector:@selector(viewForKey:)]) {

        fromView = [transitionContext viewForKey:UITransitionContextFromViewKey];

        toView = [transitionContext viewForKey:UITransitionContextToViewKey];

    }

    

    toView.frame = containerView.bounds;

    [toView setNeedsLayout];

    [toView layoutIfNeeded];

    [self.transitionPanoViewremoveFromSuperview];

    self.transitionPanoView.frame = _o

    [containerView addSubview:self.transitionPanoView];

    [UIViewanimateWithDuration:0.3animations:^{

        self.transitionPanoView.frame =_originalTransitionPanoViewFrame;

        self.transitionPanoView.center =_originalTransitionPanoViewCenter;

        NSLog(@"%@frame--middle",NSStringFromCGRect(self.transitionPanoView.frame));

    } completion:^(BOOL finished) {

        [self.transitionfromViewaddSubview:self.transitionPanoView];

        self.transitionPanoView.center =CGPointMake(self.transitionfromView.bounds.size.width / 2, self.transitionfromView.bounds.size.height / 2);

        [transitionContext completeTransition:YES];

        NSLog(@"%@frame",NSStringFromCGRect(self.transitionPanoView.frame));

    }];

    fromView.backgroundColor = [UIColorclearColor];

    

}


- (void)hideStatusBarAnimated:(BOOL)animated

{

    [[UIApplicationsharedApplication] setStatusBarHidden:YESwithAnimation:animated ? UIStatusBarAnimationFade :UIStatusBarAnimationNone];

}


@end


0 0
原创粉丝点击