美文网首页开发文档iOS Developer
ios 动画竖屏切换到横屏

ios 动画竖屏切换到横屏

作者: 百省 | 来源:发表于2017-01-20 15:13 被阅读733次

    在iOS APP中有个别页面需要从竖屏切换到横屏,网上有很多切屏方法,但最后大多是要调用私有API实现,强制改变设备的orientation,其方法如下:

    SEL selector = NSSelectorFromString(@"setOrientation:");
    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
    [invocation setSelector:selector];
    [invocation setTarget:[UIDevice currentDevice]];
    [invocation setArgument:&orientation atIndex:2];
    [invocation invoke];
    

    我所在公司的所有APP都在用这种强行改变设备orientation的方式,目前这样是能通过appStore的审核,但总觉得这种方式不是很安全,保不准那天就被苹果干掉了。观察了市面上主流视频播放APP,其竖屏切换到横屏时大多是采用动画的形式,所以猜测了下动画转屏的实现方式。

    要实现动画转屏,必须先观察竖屏时APP画面状态,画面在旋转前的frame状态和旋转后的状态,三种状态如下所示:

    转屏前、后状态

    上图中有APP处于竖屏播放状态,点击全屏按钮后重设播放页面frame、以及旋转到横屏播放状态的示意图。视图旋转是以中心点进行的,所以旋转前的frame按上图中间的方式计算。

    知道如何计算横屏状态view的frame,接下来就好办了,直接旋转M_PI_2即可。

    self.originFrame = self.view.frame;
        CGFloat height = [[UIScreen mainScreen] bounds].size.width;
        CGFloat width = [[UIScreen mainScreen] bounds].size.height;
    
        CGRect frame = CGRectMake((height - width) / 2, (width - height) / 2, width, height);
    
        self.frame = frame;
    
        [UIView animateWithDuration:0.3f animations:^{
            self.frame = frame;
            [self.view setTransform:CGAffineTransformMakeRotation(M_PI_2)];
        } completion:^(BOOL finished) {        
        }];
    

    动画转屏时,设备的原点依然是左上角。

    相关文章

      网友评论

        本文标题:ios 动画竖屏切换到横屏

        本文链接:https://www.haomeiwen.com/subject/qcnwbttx.html