Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为UISplitViewController的主细节控制器的可见性设置动画_Ios_Objective C_Uikit_Uisplitviewcontroller - Fatal编程技术网

Ios 为UISplitViewController的主细节控制器的可见性设置动画

Ios 为UISplitViewController的主细节控制器的可见性设置动画,ios,objective-c,uikit,uisplitviewcontroller,Ios,Objective C,Uikit,Uisplitviewcontroller,在我的UISplitViewController中,我希望主视图控制器仅允许在纵向或局部视图控制器未显示控制器类型时显示,MyFullScreenViewController。我已经实现了UISplitViewControllerDelegate来适当地指出这一点 -(BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc

在我的UISplitViewController中,我希望主视图控制器仅允许在纵向或局部视图控制器未显示控制器类型时显示,
MyFullScreenViewController
。我已经实现了UISplitViewControllerDelegate来适当地指出这一点

-(BOOL)splitViewController:(UISplitViewController *)svc
  shouldHideViewController:(UIViewController *)vc
             inOrientation:(UIInterfaceOrientation)orientation
{
    if (UIInterfaceOrientationIsPortrait(orientation) ||
        [[self.navigationController topViewController] isKindOfClass:[MyFullScreenViewController class]])
    {
        return YES;
    }
    return NO;
}
但是,UISplitViewController仅在旋转期间调用委托。因此,
MyFullScreenViewController
实现了一个
视图将出现:动画
视图将消失:动画

- (void)viewWillAppear:(BOOL)animated
{
    [self fakeRotationOfSplitViewController];
    [super viewWillAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated
{
    [self fakeRotationOfSplitViewController];
    [super viewWillDisappear:animated];
}
-(void)fakeRotationOfSplitViewController
{
    UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];
    CGFloat duration = 1.0f;
    CGFloat fakeDuration = 0.0f;

    [UIView animateWithDuration:duration
                          delay:0.0f
                        options:UIViewAnimationOptionCurveEaseInOut
                     animations:^{
                         [[self splitViewController] willAnimateRotationToInterfaceOrientation:orientation
                                                                                      duration:fakeDuration];
                         [[self splitViewController] willRotateToInterfaceOrientation:orientation
                                                                             duration:fakeDuration];
                         [[self splitViewController] didRotateFromInterfaceOrientation:orientation];
                     } completion:^(BOOL finished) {

                     }];

}
除了动画,其他一切都正常。主视图控制器立即消失,并在推送对象之前和弹出动画之前重新出现


文档不清楚是否应在动画块内调用
willRotateToInterfaceOrientation:duration:
didRotateFromInterfaceOrientation:
,但我怀疑它们不应允许视图控制器根据消息对其更改设置动画。但是,如果它们落在动画块之外,主视图控制器有时会消失

动画不起作用,因为我在
didRotateFromInterfaceOrientation:
之后从未调用过
viewWillLayoutSubviews

[UIView animateWithDuration:duration
                          delay:0.0f
                        options:UIViewAnimationOptionCurveEaseInOut
                     animations:^{
                         [[self splitViewController] willAnimateRotationToInterfaceOrientation:orientation
                                                                                      duration:fakeDuration];
                         [[self splitViewController] willRotateToInterfaceOrientation:orientation
                                                                             duration:fakeDuration];
                         [[self splitViewController] didRotateFromInterfaceOrientation:orientation];
                         [[self splitViewController] viewWillLayoutSubviews];
                         [[[self splitViewController] view] layoutSubviews];
                     } completion:^(BOOL finished) {

                     }];

要获取当前方向,应使用UIInterfaceOrientation方向=[[UIApplication sharedApplication]statusBarOrientation],而不是[[UIDevice currentDevice]方向]