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,weak) UIView *transitionfromView;
@property (nonatomic,weak) WBPanoView *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
- ee
- ee
- ee
- ee
- ee
- ee
- ee
- ee
- ee
- ee
- EE
- ee
- ee
- ee
- ee
- ee
- ee
- ee
- 关于C++ const全面总结
- iOS - 自定义红点
- 位运算符
- SSH 因图片 ftp上传 不完整导致图片打不开,图裂问题
- ViewPager+Fragment取消预加载、禁止滑动以及更新
- ee
- CSS 基础(019_导航栏)
- Android Studio2.0版怎么过滤logcat信息 Android Studio过滤logcat信息方法
- AngularJS 事件
- SVG使用
- Python glob(),os.chdir(),images.extend()方法
- Django1.10静态文件不能成功读取解决方案
- 将map转换为java对象
- 半自动批量下载IEEE文献