如何在UIPageViewController中使图像可点击?

时间:2016-05-10 11:01:36

标签: swift image uipageviewcontroller clickable

我正在创建一个刷4页的UIPageController。在每个页面中都有一个来自我创建的数组的图像。现在我想让滑动视图中的每个图像都可以单击以呈现新的特定页面。滑动视图中的每个图像都会导致不同的10个级别(按钮)页面。 项目文件在这里: http://s000.tinyupload.com/?file_id=90198426971136689376

这是我在ViewController中的代码:

private var pageViewController: UIPageViewController?

private let contentImages = ["Pack_1.png",
    "Pack_2.png",
    "Pack_3.png",
    "nature_pic_4.png"];

override func viewDidLoad() {
    super.viewDidLoad()
    createPageViewController()
    setupPageControl()
}

private func createPageViewController() {

    let pageController = self.storyboard!.instantiateViewControllerWithIdentifier("PageController") as! UIPageViewController
    pageController.dataSource = self

    if contentImages.count > 0 {
        let firstController = getItemController(0)!
        let startingViewControllers: NSArray = [firstController]
        pageController.setViewControllers(startingViewControllers as? [UIViewController], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)
    }

    pageViewController = pageController
    addChildViewController(pageViewController!)
    self.view.addSubview(pageViewController!.view)
    pageViewController!.didMoveToParentViewController(self)
}

private func setupPageControl() {
    let appearance = UIPageControl.appearance()
    appearance.pageIndicatorTintColor = UIColor.grayColor()
    appearance.currentPageIndicatorTintColor = UIColor.whiteColor()
    appearance.backgroundColor = UIColor.darkGrayColor()
}


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

    let itemController = viewController as! PageItemController

    if itemController.itemIndex > 0 {
        return getItemController(itemController.itemIndex-1)
    }

    return nil
}

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

    let itemController = viewController as! PageItemController

    if itemController.itemIndex+1 < contentImages.count {
        return getItemController(itemController.itemIndex+1)
    }

    return nil
}

private func getItemController(itemIndex: Int) -> PageItemController? {

    if itemIndex < contentImages.count {
        let pageItemController = self.storyboard!.instantiateViewControllerWithIdentifier("ItemController") as! PageItemController
        pageItemController.itemIndex = itemIndex
        pageItemController.imageName = contentImages[itemIndex]
        return pageItemController
    }

    return nil
}
}

并且此代码位于我的pageItemController:

var itemIndex: Int = 0
var imageName: String = "" {

    didSet {

        if let imageView = contentImageView {
            imageView.image = UIImage(named: imageName)
        }

    }
}

@IBOutlet var contentImageView: UIImageView?

override func viewDidLoad() {
    super.viewDidLoad()
    contentImageView!.image = UIImage(named: imageName)
    self.view.backgroundColor = UIColor (red: 100, green: 100, blue: 100, alpha: 0)

}
}

2 个答案:

答案 0 :(得分:1)

根据这个版本的问题:

“我正在创建一个显示4个图像的UIPageControllerView。有没有办法让这些图像可以点击?每个图像都应该显示一个专用页面。这是我在viewController中的代码:”

<强> SOLUTION:

使用UIGestureRecognizer。

1)点击你的Main.Storyboard。

2)选择UIGestureRecognizer。

enter image description here

3)将它拖到您选择的图像上。

enter image description here

3.5)使用Cmd + Alt + Enter打开助理编辑器

4)通过从UITapGestureRecogniser按住Ctrl键拖动到助理编辑器来创建IBAction。

5)将此代码放在ViewController中。

class ViewController {

    let itemIndex: Int!        

    func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool)
    {
       if (!completed)
      {
        return
      }
      self.pageControl.currentPageIndex = pageViewController.viewControllers!.first!.view.tag //Page Index
      self.itemIndex = self.pageControl.currentPageIndex
    }

    @IBAction func presentDedicatedPage(sender: UIImageView) {

    //pseudo-code here, for example:

    switch self.itemIndex  {

        case 0:
        // present these 10 levels
        break

        case 1:
        //present these other 10 levels
        break

        case 2:
        //present these other 10 levels
        break

        case 3:
        //present these other 10 levels
        break

    }
}

答案 1 :(得分:1)

在你的ItemPageController上:

var itemIndex:Int?
var imageName:String?

将UITapGesture添加到ImageView。

override func viewDidLoad() {
        super.viewDidLoad()
        let tapGestureRecognizer = UITapGestureRecognizer(target:self, action:Selector("imageTapped:"))
        targetImageView.userInteractionEnabled = true
        targetImageView.addGestureRecognizer(tapGestureRecognizer)
        targetImageView.image =  UIImage(named: imageName!)
    }

关于其触发方法:

func imageTapped(img: AnyObject)
    {
        print(imageName)
        print(itemIndex)

        //Using a switch statement
        let targetImageIndex =  itemIndex! as Int

        switch (targetImageIndex) {
        case 0:
            print("case 0")
            break;
        case 1:
            print("case 1")
            break;
        case 2:
            print("case 2")
            break;

        default:
            break;
        }        
    }