Iphone 如何将页面模式从双模式设置为单模式

Iphone 如何将页面模式从双模式设置为单模式,iphone,objective-c,ipad,uipageviewcontroller,Iphone,Objective C,Ipad,Uipageviewcontroller,我们可以在不改变方向的情况下改变脊椎位置吗。与某些视图一样,它设置为max,而对于某些视图,它应设置为mid。是否可以激活此功能 这是我正在使用的代码,但不知道在其中修改什么,以便在不更改方向的情况下,我可以将脊椎位置设置为最大,并设置一页模式而不是两页模式。实际上,当应用程序运行时,它是以两页模式启动的,但后来它需要移动到单页模式,这是不可能的,它会给出错误,您提供的是一个视图,但不是两个必需的视图。 谁能给我指点一下吗 -(id)initWithViewControllers:(NSMuta

我们可以在不改变方向的情况下改变脊椎位置吗。与某些视图一样,它设置为max,而对于某些视图,它应设置为mid。是否可以激活此功能

这是我正在使用的代码,但不知道在其中修改什么,以便在不更改方向的情况下,我可以将脊椎位置设置为最大,并设置一页模式而不是两页模式。实际上,当应用程序运行时,它是以两页模式启动的,但后来它需要移动到单页模式,这是不可能的,它会给出错误,您提供的是一个视图,但不是两个必需的视图。 谁能给我指点一下吗

-(id)initWithViewControllers:(NSMutableArray *)Controllers
{
self = [super initWithNibName:nil bundle:nil];
if(self)
{
    self.VControllers =  Controllers;

    pageController = [[UIPageViewController alloc]initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation: UIPageViewControllerNavigationOrientationHorizontal options:nil];

    self.pageController.view.frame = CGRectMake(12.0f, 10.0f, 748.0f, 985.0f);
    self.pageController.delegate = self;
    self.pageController.dataSource = self;
    [self.pageController setViewControllers:[NSArray arrayWithObject:[VControllers objectAtIndex:0] ] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:^(BOOL finished)
     {
     }];

    [self addChildViewController:self.pageController];
    [self.view addSubview:self.pageController.view];
    check=YES;
}

return self;
}


 - (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController
               spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation
{
 if(UIInterfaceOrientationIsPortrait(orientation))

{

 //Set the array with only 1 view controller
    UIViewController *currentViewController = [self.pageController.viewControllers objectAtIndex:0];
    NSArray *viewControllers = [NSArray arrayWithObject:currentViewController];
    [self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];

    //Important- Set the doubleSided property to NO.
    self.pageController.doubleSided = NO;
    //Return the spine location
    return UIPageViewControllerSpineLocationMax;

 }

else
{
NSArray *viewControllers = nil;

    exampleViewController *currentViewController = [self.pageController.viewControllers objectAtIndex:0];

    NSUInteger currentIndex = [self.VControllers indexOfObject:currentViewController];

    if(currentIndex == 0 || currentIndex %2 == 0)
    {
        UIViewController *nextViewController = [self pageViewController:self.pageController viewControllerAfterViewController:currentViewController];
        viewControllers = [NSArray arrayWithObjects:currentViewController, nextViewController, nil];
    }
    else
    {
        UIViewController *previousViewController = [self pageViewController:self.pageController viewControllerBeforeViewController:currentViewController];
        viewControllers = [NSArray arrayWithObjects:previousViewController, currentViewController, nil];
    }
    //Now, set the viewControllers property of UIPageViewController
    [self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];

    return UIPageViewControllerSpineLocationMid;
}
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
int index = [self.VControllers indexOfObject:viewController];
i=index;
//[self checkViewControllers];
if (index - 1 >= 0)
{
    ind = index;
    return [self.VControllers objectAtIndex:index - 1];
}
return nil;
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
int index = [self.VControllers indexOfObject:viewController];
i=index;

if (index + 1 < [self.VControllers count])
{
    ind = index;
    return [self.VControllers objectAtIndex:index + 1];
}

if (ind1 + 1 < [self.VControllers count])
{
    ind = index;
    return [self.VControllers objectAtIndex:index + 1];
}
return nil;
}
-(id)initWithViewController:(NSMutableArray*)控制器
{
self=[super initWithNibName:nil bundle:nil];
如果(自我)
{
self.vcontroller=控制器;
pageController=[[UIPageViewController alloc]initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl导航方向:UIPageViewControllerNavigationOrientation:UIPageViewControllerNavigationOrientation水平选项:nil];
self.pageController.view.frame=CGRectMake(12.0f、10.0f、748.0f、985.0f);
self.pageController.delegate=self;
self.pageController.dataSource=self;
[self.pageController setViewControllers:[NSArray arrayWithObject:[VControllers objectAtIndex:0]]方向:UIPageViewControllerNavigationDirectionForward动画:是完成:^(BOOL完成)
{
}];
[self addChildViewController:self.pageController];
[self.view addSubview:self.pageController.view];
检查=是;
}
回归自我;
}
-(UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController*)pageViewController
spineLocationForInterfaceOrientation:(UIInterfaceOrientation)方向
{
if(UIInterfaceOrientationSportRait(方向))
{
//仅使用1个视图控制器设置阵列
UIViewController*currentViewController=[self.pageController.ViewController对象索引:0];
NSArray*ViewController=[NSArray arrayWithObject:currentViewController];
[self.pageController setViewControllers:viewcontrollerdirection:UIPageViewControllerNavigationDirectionForward动画:是完成:NULL];
//重要信息-将双面属性设置为“否”。
self.pageController.doubleside=否;
//返回脊椎位置
返回UIPageViewControllerSpineLocationMax;
}
其他的
{
NSArray*视图控制器=零;
示例ViewController*currentViewController=[self.pageController.ViewController对象索引:0];
NSUInteger currentIndex=[self.vController索引对象:currentViewController];
如果(currentIndex==0 | | currentIndex%2==0)
{
UIViewController*nextViewController=[self-pageViewController:self.pageController viewControllerAfterViewController:currentViewController];
viewControllers=[NSArray arrayWithObjects:currentViewController,nextViewController,nil];
}
其他的
{
UIViewController*previousViewController=[self-pageViewController:self.pageController-viewControllerBeforeViewController:currentViewController];
viewControllers=[NSArray arrayWithObjects:previousViewController,currentViewController,nil];
}
//现在,设置UIPageViewController的ViewController属性
[self.pageController setViewControllers:viewcontrollerdirection:UIPageViewControllerNavigationDirectionForward动画:是完成:NULL];
返回UIPageViewControllerSpineLocationMid;
}
}
-(UIViewController*)页面视图控制器:(UIPageViewController*)页面视图控制器视图控制器预览控制器:(UIViewController*)视图控制器
{
int index=[self.VControllers indexOfObject:viewController];
i=指数;
//[自检视图控制器];
如果(索引-1>=0)
{
ind=指数;
返回[self.vController对象索引:索引-1];
}
返回零;
}
-(UIViewController*)pageViewController:(UIPageViewController*)pageViewController viewControllerAfterViewController:(UIViewController*)viewController
{
int index=[self.VControllers indexOfObject:viewController];
i=指数;
如果(索引+1<[self.vController计数])
{
ind=指数;
返回[self.vController对象索引:索引+1];
}
如果(ind1+1<[self.vController计数])
{
ind=指数;
返回[self.vController对象索引:索引+1];
}
返回零;
}

如果您想在UIPageViewController初始化后更改脊椎位置,我认为您可能需要使用新的脊椎位置创建一个新的脊椎位置,并用它替换旧的脊椎位置

我猜当前的实现只考虑在初始化或更改方向时设置脊椎位置


您可能会为苹果打开一个bug,以便他们在将来实现它。

您能更具体一点吗?您可以在景观中使用您想要的任何脊椎位置。但在肖像上,我认为你不能使用mid。虽然我认为你的问题比这更复杂。你在说什么?很高兴添加一些信息。。。我想这是关于pageViewControl或者类似的东西它是关于pageviewcontroller的。问题是只有当方向改变时,脊椎的位置才会改变。我不知道如何在不使用spine location方法的情况下更改它。但是如何关闭以前的页面视图控制器。您必须从UIPageViewController外部控制更改。要在两者之间转换,我会遵循这个问题的解决方案:你找到解决方案了吗??我也面临同样的问题