【问题标题】:Push direction changes after landscape rotation横向旋转后推送方向变化
【发布时间】:2014-02-09 18:30:04
【问题描述】:

我只有横向应用程序。导航效果很好:当我推送一个新视图时,它会通过从左向右滑动来加载和显示。当它被卸载时,从右向左滑动。 但是,当我旋转设备时,情况发生了变化,现在推动是从右到左。 为了面对 iOS 7 中不处理旧式推送而不避免滑动视图奇怪的懒惰出现的错误,我使用此代码

- (void)pushViewControllerRetro:(UIViewController *)viewController {
    CATransition *transition = [CATransition animation];
    transition.duration = 0.3;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionPush;
    transition.subtype = kCATransitionFromBottom;
    [self.view.layer addAnimation:transition forKey:nil];

    [self pushViewController:viewController animated:NO];
}

- (void)popViewControllerRetro {
    CATransition *transition = [CATransition animation];
    transition.duration = 0.3;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionPush;
    transition.subtype = kCATransitionFromTop;
    [self.view.layer addAnimation:transition forKey:nil];

    [self popViewControllerAnimated:NO];
}

为什么?

【问题讨论】:

  • 你的意思是如果你旋转180度?

标签: ios landscape uinavigationcontroller


【解决方案1】:

当您将设备旋转 180 度时,您会从 LandscapeLeft 转到 LandscapeRight ... 左转右,反之亦然。使用 deviceRotation 来定义你的自定义转换

例如第一种情况

transition.type = [UIDevice currentDevice]. orientation == UIDeviceRotationLandscapeLeft ? kCATransitionFromRight : kCATransitionFromLeft;

【讨论】:

  • 好的,抱歉我抄错了代码。看我的编辑。你的解决方案(你的意思是 UIDeviceOrientationLandscapeLeft,你不是吗)禁用了推动的动画......
【解决方案2】:

这是正确的解决方案

- (void)pushViewControllerRetro:(UIViewController *)viewController {
    CATransition *transition = [CATransition animation];
    transition.duration = 0.3;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionPush;


     transition.subtype = [UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeRight ?kCATransitionFromBottom : kCATransitionFromTop;
    [self.view.layer addAnimation:transition forKey:nil];

    [self pushViewController:viewController animated:NO];

}

- (void)popViewControllerRetro {
    CATransition *transition = [CATransition animation];
    transition.duration = 0.3;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionPush;
    transition.subtype = [UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeRight ?kCATransitionFromTop : kCATransitionFromBottom;

    [self.view.layer addAnimation:transition forKey:nil];

    [self popViewControllerAnimated:NO];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多