UIPageController不显示动画的子视图

时间:2015-04-19 10:07:21

标签: ios objective-c swift

我有一个加载子视图的UIPageViewController,我希望每次在页面视图控制器上加载子视图时运行动画 到目前为止视图正确加载但动画无效 这是我的代码

内容视图类

import UIKit

class ContentPage1ViewController: UIViewController {
    @IBOutlet weak var houseImage: UIImageView!
    @IBOutlet weak var houseImage2: UIImageView!

override func viewDidLoad() {
    println("content view loaded")//THIS WORKS

    self.houseImage.alpha = 0
    self.houseImage.frame = CGRectMake(0, 20, 0, 0)


    UIView.animateWithDuration(1, delay: 0, usingSpringWithDamping: 0.3, initialSpringVelocity: 0, options: .CurveEaseInOut | .Repeat, animations: {

        self.houseImage.alpha = 1
        self.houseImage.frame = CGRectMake(0, 0, 0, 0)

    }, completion: nil)

    super.viewDidLoad()
    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

UIPageViewController

import UIKit

class PageViewController1:         UIPageViewController,UIPageViewControllerDataSource {

var pageTitles:NSArray!
var pageViewController:UIPageViewController!
var index:Int = 1

override func viewDidLoad() {
    //Storyboard id of content pages
    self.pageTitles = NSArray(objects:"PAGE1","PAGE2")
    self.pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("onboardingPageViewController") as! UIPageViewController
    self.pageViewController.dataSource = self
    var startVc = self.storyboard?.instantiateViewControllerWithIdentifier("contentViewController1") as! UIViewController
    var viewControllers = NSArray(object: startVc)
    self.pageViewController.setViewControllers(
        viewControllers as NSArray as [AnyObject], direction: .Forward, animated: true, completion: nil)

    self.addChildViewController(self.pageViewController)
    self.view.addSubview(self.pageViewController.view)
    self.pageViewController.didMoveToParentViewController(self)


    super.viewDidLoad()
    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func getContentAtIndex(index:Int)->UIViewController{
   return self.storyboard?.instantiateViewControllerWithIdentifier("contentViewController\(index)") as! UIViewController
}

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
    if(index == NSNotFound)
    {
        return nil
    }

    if(index == self.pageTitles.count)
    {
        return nil
    }
    index++

    return getContentAtIndex(index)

}

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {

    if(index == 1 || index == NSNotFound)
    {
        return nil
    }

    index--
    return getContentAtIndex(index)
}

func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
    return self.pageTitles.count
}

func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
    return 0
}
}

1 个答案:

答案 0 :(得分:0)

首先,在viewDidLoad中,超级调用super.viewDidLoad()属于该方法的开头,而不是最后。 然后插入:

override func viewDidAppear() {
        super.viewDidAppear();
        self.houseImage.alpha = 0
        self.houseImage.frame = CGRectMake(0, 20, 0, 0)


        UIView.animateWithDuration(1, delay: 0, usingSpringWithDamping: 0.3, initialSpringVelocity: 0, options: .CurveEaseInOut | .Repeat, animations: {

               self.houseImage.alpha = 1
               self.houseImage.frame = CGRectMake(0, 0, 0, 0)

        }, completion: nil)
}