我有一个加载子视图的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
}
}
答案 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)
}