标签: uipageviewcontroller

UIPageViewController手势正在调用viewControllerAfter:但是没有动画

我对UIPageViewController有一个非常有趣的问题.

我的项目设置与示例基于页面的应用程序模板非常相似.偶尔(但在某种程度上可重现)某个平移手势会呼唤-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController.

我返回下一页的viewcontroller,但是从不运行页面翻转动画,我的委托方法永远不会被调用.

这是代码 viewControllerAfterViewController

-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    PageDisplayViewController *vc = (PageDisplayViewController *)viewController;
    NSUInteger index = [self.pageFetchController.fetchedObjects indexOfObject:vc.page];
    if(index == (self.pageFetchController.fetchedObjects.count - 1)) return nil;
    return [self getViewControllerForIndex:(++index)];
}
Run Code Online (Sandbox Code Playgroud)

这里是 getViewControllerForIndex:

-(PageDisplayViewController *)getViewControllerForIndex:(NSUInteger)index
{
    PageDisplayViewController *newVC = [self.storyboard instantiateViewControllerWithIdentifier:@"PageDisplayController"];
    newVC.page = [self.pageFetchController.fetchedObjects objectAtIndex:(index)];
    newVC.view.frame = CGRectMake(0, 0, 1024, 604);
    NSLog(@"%i", index);
    if(index == 0)
    {
        //We're moving to the first, animate the back button to be hidden.
        [UIView animateWithDuration:0.5 animations:^
        { …
Run Code Online (Sandbox Code Playgroud)

ios uipageviewcontroller

8
推荐指数
2
解决办法
8701
查看次数

在UIPageViewController中释放未使用的页面

我正在为基于图画书的每个基页使用单独的.h,.m.xib文件.每个页面都加载了动画,音乐等,并占用大约4MB的内存.在Instruments中,每个页面加载时,可用内存下降约4MB.翻页时,永远不会释放此内存.它最终会给出内存警告. 似乎保持每个页面在内存中实例化,并且不会卸载它.因此,当页面快速转动时,应用程序崩溃.UIViewControllerUIPageViewControllerUIPageViewController

我希望能够卸载除了UIPageViewController前一页,当前页和下一页所需的3页以外的所有页面.如何卸载不需要的页面,因为它们被实例化了UIPageViewController.

下面是UIPageViewController从中拉出的页面数组.所有页面(Page1,Page2等)基本上只是加载图像文件,提供基本动画和音乐.

    //ARRAY OF PAGES    
pageArray = [[NSArray alloc] initWithObjects:
        (id)[[Page1 alloc] initWithNibName:nil bundle:nil],
            [[Page2 alloc] initWithNibName:nil bundle:nil],    
            [[Page3 alloc] initWithNibName:nil bundle:nil],    
            [[Page4 alloc] initWithNibName:nil bundle:nil],    
            [[Page5 alloc] initWithNibName:nil bundle:nil],    
            [[Page6 alloc] initWithNibName:nil bundle:nil], 
            [[Page7 alloc] initWithNibName:nil bundle:nil],
            [[Page8 alloc] initWithNibName:nil bundle:nil],
             // continues all the way up to page 47
             [[Page47 alloc] initWithNibName:nil bundle:nil],
             nil];
Run Code Online (Sandbox Code Playgroud)

我遗漏了标准的初始化UIPageViewController.它使用" nextPageNumber"从pageArray上面拉出右页以创建新的页面对象. …

xcode memory-management ios automatic-ref-counting uipageviewcontroller

8
推荐指数
1
解决办法
9203
查看次数

UIPageViewController第二个视图变为空白

在我的应用程序中使用UIPageViewController时,我遇到了一些非常奇怪的行为.在第一次滑动到下一个视图时或者任何时候滑动方向改变(即在列表的末尾并返回),结果视图为空白,我需要再次滑动相同的方向以显示相应的视图.

3个视图的示例工作流程:

  1. 提出第一个观点
  2. 向右滑动即可
  3. 第二个视图闪烁
  4. 向右滑动即可
  5. 提出第二种观点
  6. 向右滑动即可
  7. 提出第三种观点
  8. 向左滑动即可
  9. 第二个视图闪烁
  10. 向左滑动即可
  11. 提出第二种观点

当发生眨眼时(上面的2和3),我注意到通过记录,事件的顺序如下:

  1. 调用GetNextViewController
  2. 调用GetPreviousViewController
  3. 调用GetNextViewController

然后当我再次滑动时,适当调用GetNextViewController并显示视图.

我的问题显然是,第二个视图应该显示没有闪烁的进出.我尝试了各种各样的东西,但没有任何成果.

UPDATE

这是一个示例单控制器应用程序,可以重现问题:

using System;
using System.Drawing;

using MonoTouch.Foundation;
using MonoTouch.UIKit;
using System.Collections.Generic;

namespace TestPageView
{
    public partial class TestPageViewViewController : UIViewController
    {
        public TestPageViewViewController () : base ("TestPageViewViewController", null)
        {
        }

        public override void DidReceiveMemoryWarning ()
        {
            // Releases the view if it doesn't have a superview.
            base.DidReceiveMemoryWarning ();

            // Release any cached data, images, etc that aren't in use.
        } …
Run Code Online (Sandbox Code Playgroud)

xamarin.ios ios uipageviewcontroller

8
推荐指数
1
解决办法
2088
查看次数

UIPageViewController中缺少页面指示

我想利用UIPageViewController我的数据源进行分页.基本上它是有效的,但我不会看到点作为我在哪个页面上的指示.

之前有人问过这个问题,我完全按照答案提出了建议.但是我的屏幕底部仍然没有任何点.

基本上我使用UIPageViewControllerTransitionStyleScroll和导航方向是UIPageViewControllerNavigationOrientationHorizontal.

我在GitHub上创建了一个示例项目来演示这个问题.

如果有人会这么善良并帮助你.

ios uipageviewcontroller ios7

8
推荐指数
2
解决办法
1万
查看次数

在刷过最后一个视图控制器后,如何解除/弹出UIPageViewController?

在刷过最后一个视图控制器后,如何解除/弹出UIPageViewController?基本上想要用图像制作教程样式的分页视图,并在用户从最后一页滑到"下一页"后解除.

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {

    NSUInteger index = [(EmailTutorialViewController *)viewController index];


    index++;

    if (index == 5) {
        [self.navigationController popViewControllerAnimated:YES]; // this doesn't do anything
        return nil;
    }

    return [self viewControllerAtIndex:index];
}
Run Code Online (Sandbox Code Playgroud)

ios uipageviewcontroller

8
推荐指数
1
解决办法
6906
查看次数

iOS - UIPageViewControllerDataSource方法调用两次

我发现这两个UIPageViewControllerDataSource方法存在一个奇怪的问题:第一次进入页面视图控制器场景并拖动控制器的内容时​​,无论拖动方向是什么,都会调用两个数据源方法.我想当我在第一页并向右拖动时,这意味着在第一页之前没有更多的页面,这两种方法都不应该被调用.如果我向左拖动,只应调用after方法.

我按照这篇文章来设置视图控制器(除了我在故事板上没有单独的页面视图控制器.我使用传统[UIPAgeViewController alloc] init]方法来实例化控制器).以下是我的代码:

对于实际显示页面视图控制器内容的视图控制器(仅显示相关部分viewDidLoad):

 - (void)viewDidLoad 
{
    // initialize page view controller
    _pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
    self.pageViewController.delegate = self;
    self.pageViewController.dataSource = self;

    // set up the initial scene of the page view controller
    UIViewController *viewController = [self viewControllerAtIndex:0];
    [self.pageViewController setViewControllers:@[viewController]
                                      direction:UIPageViewControllerNavigationDirectionForward
                                       animated:NO
                                     completion:nil];

    // adjust the size of the page view controller, -44 to show the buttons at the bottom
    self.pageViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - 44); …
Run Code Online (Sandbox Code Playgroud)

objective-c ios uipageviewcontroller

8
推荐指数
2
解决办法
5689
查看次数

将容器带到视图前面

我有三个控制器.一个,如果HomeViewController它启动它BlahPageViewController和它的个别页面.另外两个控制器(BlahPageViewController并专门BlahItemViewController处理UIPageViewController.在我HomeViewController,我有以下代码初始化页面.

private func setPageViewController() {
    let blahPageController = self.storyboard!.instantiateViewControllerWithIdentifier("BlahPageController") as! BlahPageViewController

    blahPageController.dataSource = self

    blahPageController.blahs = blahs

    if blahs.count > 0 {
        let firstController = getItemController(0)!

        let startingViewControllers: NSArray = [firstController]

        blahPageController.setViewControllers(startingViewControllers as [AnyObject], direction: .Forward, animated: false, completion: nil)
    }

    // Setting page view controller to front of app
    pageViewController = blahPageController

    addChildViewController(pageViewController!)

    self.view.addSubview(pageViewController!.view)

    pageViewController!.didMoveToParentViewController(self)

    // Now lets bring that container to the front.
    self.view.bringSubviewToFront(self.headerBar)
    // BUT …
Run Code Online (Sandbox Code Playgroud)

ios uipageviewcontroller swift

8
推荐指数
1
解决办法
2020
查看次数

子视图滚动不能正常工作SWIFT

目标:使视图控制器具有多个页面并且可以通过分段控制器进行交换,页面内容可以垂直滚动

细节:

  • 我制作了一个pagviewcontroller并将其作为子视图嵌入到主视图控制器中

    //add pageviewcontroller as subview to viewcontroller
    if let vc = storyboard?.instantiateViewControllerWithIdentifier("ProfileEditController"){
    
        self.addChildViewController(vc)
        self.view.addSubview(vc.view)
    
        EditTabs = vc as! UIPageViewController
        EditTabs.dataSource = self
        EditTabs.delegate = self
    
        //define First page
        EditTabs.setViewControllers([pagesAtIndexPath(0)!], direction:.Forward, animated: true, completion: nil)
        EditTabs.didMoveToParentViewController(self)
    
        //bring segmented view buttons to front of pageViews
        self.view.bringSubviewToFront(self.topTabs)
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 我调用了pageViewController函数,我通过恢复标识符添加页面

  • 我通过获取pageindex并设置viewcontroller来管理分段视图控制器,如下所示:

    EditTabs.setViewControllers([pagesAtIndexPath(0)!], direction:.Reverse, animated: true, completion: nil)
    
    Run Code Online (Sandbox Code Playgroud)
  • 在故事板中,子页面内部具有滚动视图以保存内容

  • 我测试了子页面滚动视图,通过segue调用它并且工作正常

案件:

  • 一切正常只有子页面的滚动视图根本不起作用

如何解决这个问题?我们非常感谢您的指导方针

谢谢,

addsubview ios uipageviewcontroller swift2

8
推荐指数
1
解决办法
902
查看次数

如果用户移动太快,UIPageViewController视图会搞乱

我有一个UIPageViewController使用整数来告诉它在哪个页面.它工作正常,但如果用户快速滑动几次以进一步返回页面,整数变化的速度比视图更快,然后整个事情就会崩溃(应用程序认为它在第7页可能是显示第3页).我究竟做错了什么?我应该用不同的方法来判断我在哪里吗?谢谢.

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
    if (pageNumber == 0) {
        pageNumber++;
        NSLog(@"%i", pageNumber);
        Two *two = [[Two alloc] init];
        return two;
    } else if (pageNumber == 1) {
        pageNumber++;
        NSLog(@"%i", pageNumber);
        Three *three = [[Three alloc] init];
        return three;
    } else if (pageNumber >= 2) {
        return nil;
    } else {
        return nil;
    }
}
Run Code Online (Sandbox Code Playgroud)

iphone objective-c ipad ios uipageviewcontroller

7
推荐指数
1
解决办法
3543
查看次数

子视图控制器向下移动

我有一个TutorialsViewController,它以编程方式添加了PageViewController:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    // Create page view controller
    self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"TutorialsPageViewController"];
    self.pageViewController.dataSource = self;

    TutorialsContentViewController *startingViewController = [self viewControllerAtIndex:0];

    NSArray *viewControllers = @[startingViewController];
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];

    [self addChildViewController:self.pageViewController];
    [self.view addSubview:self.pageViewController.view];
    [self.pageViewController didMoveToParentViewController:self]; 
}
Run Code Online (Sandbox Code Playgroud)

我使用委托方法将TutorialsContentViewController添加到PageViewController:

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
    NSUInteger index = ((TutorialsContentViewController*) viewController).pageIndex;

    if ((index == 0) || (index == NSNotFound)) {
        return nil;
    }

    index--;
    return [self viewControllerAtIndex:index];
}

- (UIViewController …
Run Code Online (Sandbox Code Playgroud)

objective-c ios uipageviewcontroller autolayout

7
推荐指数
1
解决办法
830
查看次数