IOS旋转设备没有旋转动画

Posted

技术标签:

【中文标题】IOS旋转设备没有旋转动画【英文标题】:IOS rotate device without rotation animation 【发布时间】:2011-09-17 20:24:11 【问题描述】:

实现类似于 iPhone 的标准 iPod 应用程序中的效果的正确方法是什么 - 当设备旋转到横向模式时,视图变为覆盖流,但过渡类型是淡入淡出和不是旋转屏幕?

这就是我加载模态视图的方式:

- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
    if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) 
        carouselView.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
        [self presentModalViewController:carouselView animated:YES];
    

谢谢!

安德鲁斯

【问题讨论】:

【参考方案1】:

后来发现用这个方案比较稳定:

在父视图控制器(在我的情况下是标签视图控制器)viewdidload 方法中添加:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];

然后添加这个方法:

- (void) didRotate:(NSNotification *)notification      

    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
    if (UIInterfaceOrientationIsLandscape(orientation) && !self.modalViewController) 
        [self presentModalViewController:carouselView animated:YES];
        [Globals sharedGlobals].startedAtLandscape = YES;
    

    if (UIInterfaceOrientationIsPortrait(orientation) && self.modalViewController) 
        [self dismissModalViewControllerAnimated:YES];    
        [Globals sharedGlobals].startedAtLandscape = NO;
    

最后如果你想阻止旋转动画,修改这个方法如下:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

    if(UIInterfaceOrientationIsLandscape(interfaceOrientation)) 
        return NO;
    
    return YES;

【讨论】:

presentModalViewController 已弃用。

以上是关于IOS旋转设备没有旋转动画的主要内容,如果未能解决你的问题,请参考以下文章

旋转设备时,动画 uiview 切换回其原始状态

iOS核心动画之图片旋转、脉冲动画、水波纹动画

设备旋转时是不是有动画自动布局(约束)?

为啥绘图路径的笔画会随着设备旋转动画而变形

设备旋转后动画点重新定位

动画后的iOS旋转手势