zoukankan      html  css  js  c++  java
  • 仿QQ视频全屏界面旋转实现

    // 实现效果:界面支持系统自动转屏和点击转屏
    //  ViewController.m
    //  rotatoTest
    
    //  Copyright © 2016年 yaoyao. All rights reserved.
    //  1.关闭系统自动转屏
    //  2.获取设备方向,设置转屏,
    //  3.点击按钮,设置转屏
    
    #import "ViewController.h"
    #import <UIKit/UIKit.h>
    #import <CoreGraphics/CoreGraphics.h>
    
    @interface ViewController ()
    {
        float width;
        float height;
    
    }
    @property (nonatomic,retain)UIImageView *imageView;
    
    
    @end
    
    @implementation ViewController
    
    
    - (void)viewDidLoad {
     
        
        /**
         * UIImage 对象
         */
        UIImage *image = [UIImage imageNamed:@"000.jpg"];
        self.imageView.image = image;
        
        // 设置图片范围
        CGFloat imageH = image.size.height;
        CGFloat imageW = image.size.width;
        CGFloat imageX = 0;
        CGFloat imageY = 0;
        self.imageView.frame = CGRectMake(imageX, imageY, width, 100);
        self.imageView.userInteractionEnabled = YES;
        [self.view addSubview:self.imageView];
        
        
        //相当于qq视频上面的全屏按钮
        UIButton *btnL = [UIButton buttonWithType:UIButtonTypeCustom];
        btnL.frame = CGRectMake(20, 20,150, 20);
        [btnL setTitle:@"点击向左横屏" forState:UIControlStateNormal];
        btnL.backgroundColor = [UIColor blueColor];
        [btnL addTarget:self action:@selector(btnLClick) forControlEvents:UIControlEventTouchUpInside];
        [self.imageView addSubview:btnL];
        
        //相当于qq视频全屏界面上的返回按钮
        UIButton *btnP = [UIButton buttonWithType:UIButtonTypeCustom];
        btnP.frame = CGRectMake(200, 20,100, 20);
        [btnP setTitle:@"点击竖屏" forState:UIControlStateNormal];
        btnP.backgroundColor = [UIColor blueColor];
        [btnP addTarget:self action:@selector(btnPClick) forControlEvents:UIControlEventTouchUpInside];
        [self.imageView addSubview:btnP];
        
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    //支持旋转(当手动转屏时关闭自动转屏)
    -(BOOL)shouldAutorotate
    {
        return NO;
    }
    
    
    //支持的方向(亲测:当上个方法返回no时,这个方法依然调用)
    - (UIInterfaceOrientationMask)supportedInterfaceOrientations
    {
        NSLog(@"supportedInterfaceOrientations调用了");
        return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
        
    }
    
    -(void)btnLClick
    {
        [[UIApplication sharedApplication]setStatusBarOrientation:UIDeviceOrientationLandscapeLeft animated:YES];
        CGFloat duration = [UIApplication sharedApplication].statusBarOrientationAnimationDuration;
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:duration];
        //在这里设置view.transform需要匹配的旋转角度的大小就可以了。
        self.imageView.transform = CGAffineTransformIdentity;
        self.imageView.transform = CGAffineTransformMakeRotation(M_PI/2.0);
        self.imageView.frame = CGRectMake(0, 0, width, height);
        [UIView commitAnimations];
    
    }
    
    //点击返回竖屏
    -(void)btnPClick
    {
        [[UIApplication sharedApplication]setStatusBarOrientation:UIDeviceOrientationPortrait   animated:YES];
        CGFloat duration = [UIApplication sharedApplication].statusBarOrientationAnimationDuration;
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:duration];
        //在这里设置view.transform需要匹配的旋转角度的大小就可以了。
        self.imageView.transform = CGAffineTransformIdentity;
        self.imageView.transform = CGAffineTransformMakeRotation(0);
        self.imageView.frame = CGRectMake(0, 0, width, 100);
        [UIView commitAnimations];
        
    }
    
    
    
    - (void)handleDeviceOrientationDidChange:(UIInterfaceOrientation)interfaceOrientation
    {
        //1.获取 当前设备 实例
        UIDevice *device = [UIDevice currentDevice] ;
        
        /**
         *  2.取得当前Device的方向,Device的方向类型为Integer
         *
         *  必须调用beginGeneratingDeviceOrientationNotifications方法后,此orientation属性才有效,否则一直是0。orientation用于判断设备的朝向,与应用UI方向无关
         *
         *  @param device.orientation
         *
         */
        
        switch (device.orientation) {
            case UIDeviceOrientationFaceUp:
            {
                NSLog(@"屏幕朝上平躺");
                
            }
                
                break;
                
            case UIDeviceOrientationFaceDown:
                NSLog(@"屏幕朝下平躺");
                break;
                
                //系統無法判斷目前Device的方向,有可能是斜置
            case UIDeviceOrientationUnknown:
                NSLog(@"未知方向");
                break;
                
            case UIDeviceOrientationLandscapeLeft:
            {
                NSLog(@"屏幕向左横置");
                [[UIApplication sharedApplication]setStatusBarOrientation:UIDeviceOrientationLandscapeLeft animated:YES];
                CGFloat duration = [UIApplication sharedApplication].statusBarOrientationAnimationDuration;
                [UIView beginAnimations:nil context:nil];
                [UIView setAnimationDuration:duration];
                //在这里设置view.transform需要匹配的旋转角度的大小就可以了。
                self.imageView.transform = CGAffineTransformIdentity;
                self.imageView.transform = CGAffineTransformMakeRotation(M_PI/2.0);
                self.imageView.frame = CGRectMake(0, 0, width, height);
                [UIView commitAnimations];
                
            }
                
                break;
                
            case UIDeviceOrientationLandscapeRight:
            {
                NSLog(@"屏幕向右橫置");
                [[UIApplication sharedApplication]setStatusBarOrientation:UIDeviceOrientationLandscapeRight animated:YES];
                CGFloat duration = [UIApplication sharedApplication].statusBarOrientationAnimationDuration;
                [UIView beginAnimations:nil context:nil];
                [UIView setAnimationDuration:duration];
                //在这里设置view.transform需要匹配的旋转角度的大小就可以了。
                self.imageView.transform = CGAffineTransformIdentity;
                self.imageView.transform = CGAffineTransformMakeRotation(-M_PI/2.0);
                self.imageView.frame = CGRectMake(0, 0, width, height);
                [UIView commitAnimations];
            }
                break;
                
            case UIDeviceOrientationPortrait:
            {
                NSLog(@"屏幕直立");
                [[UIApplication sharedApplication]setStatusBarOrientation:UIDeviceOrientationPortrait animated:YES];
                CGFloat duration = [UIApplication sharedApplication].statusBarOrientationAnimationDuration;
                [UIView beginAnimations:nil context:nil];
                [UIView setAnimationDuration:duration];
                //在这里设置view.transform需要匹配的旋转角度的大小就可以了。
                self.imageView.transform = CGAffineTransformIdentity;
                self.imageView.transform = CGAffineTransformMakeRotation(0);
                self.imageView.frame = CGRectMake(0, 0, width, 100);
                [UIView commitAnimations];
                
            }
                break;
                
            case UIDeviceOrientationPortraitUpsideDown:
                NSLog(@"屏幕直立,上下顛倒");
                break;
                
            default:
                NSLog(@"无法辨识");
                break;
        }
        
    }
    
    
    -(void)viewDidAppear:(BOOL)animated
    {
        
        /**
         *  开始生成 设备旋转 通知
         */
        [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
        
        
        /**
         *  添加 设备旋转 通知
         *
         *  @param handleDeviceOrientationDidChange: handleDeviceOrientationDidChange: description
         *
         *  @return return value description
         */
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(handleDeviceOrientationDidChange:)
                                                     name:UIDeviceOrientationDidChangeNotification
                                                   object:nil
         ];
        
    }
    
    
    
    -(void)viewDidDisappear:(BOOL)animated
    {
        /**
         *  销毁 设备旋转 通知
         *
         *  @return return value description
         */
        [[NSNotificationCenter defaultCenter] removeObserver:self
                                                        name:UIDeviceOrientationDidChangeNotification
                                                      object:nil
         ];
        
        
        /**
         *  结束 设备旋转通知
         *
         *  @return return value description
         */
        [[UIDevice currentDevice]endGeneratingDeviceOrientationNotifications];
        
    }
    
    
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    #pragma 懒加载
    
    - (UIImageView *)imageView
    {
        if (!_imageView) {
            _imageView = [[UIImageView alloc] init];
        }
        return _imageView;
    }
    
    
    
    @end
    爱code的妖妖
  • 相关阅读:
    dfa最小化,终于完成了。
    nfa转dfa,正式完成
    正则转nfa:完成
    正则转nfa:bug消除
    myeclipse集成jad反编译步骤
    CSS声明 列表样式 显示方式 鼠标形状
    CSS声明2 定位
    CSS声明1
    CSS基础知识简介
    lol简介/html
  • 原文地址:https://www.cnblogs.com/yaoyao0110/p/5258087.html
Copyright © 2011-2022 走看看