2017-01-13 1 views
0

J'ai une vue de conteneur dans laquelle se trouve un contrôleur de page intégré.Modifier la taille de l'affichage du conteneur lorsque le contrôleur de page intégré atteint l'index

Lorsque l'index du contrôleur de pages atteint un certain index, je souhaite modifier la taille de l'affichage du conteneur. Le problème est que je ne peux pas créer une sortie vers la vue conteneur à l'intérieur de la classe contrôleur de page et je ne sais pas comment obtenir les modifications dans l'index d'une autre classe.

je pensais quelque chose comme: contrôleur de la page classe

func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) { 
    if (completed && finished) { 
     if let currentVC = pageViewController.viewControllers?.last { 
      let index = vcArr.index(of: currentVC) 

       globalPageIndex = index! 

     } 
    } 
} 

où globalPageIndex est déclaré au niveau supérieur.

alors dans la classe qui contient la référence à la vue du conteneur:

if globalPageIndex == 10 { 

    containerView?.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.5, 1.5) 

} 

mais comment puis-je avoir la fonction dans cette classe pour tester en permanence la valeur de l'indice? Si je crée une fonction de classe dans la classe de vue de conteneur et l'exécute chaque fois que l'index est modifié à partir du contrôleur de page, je ne peux pas accéder à la vue de conteneur.

------- ------ EDIT

class pageViewController: UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource, UIGestureRecognizerDelegate, ContainerViewDelegate { 

internal func getIndex(index: Int) { 
    globalIndex = index 
} 

func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) { 
    if (completed && finished) { 
     if let currentVC = pageViewController.viewControllers?.last { 
      let index = vcArr.index(of: currentVC) 

      getIndex(index: index!) 


     } 
    } 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    LandingPageViewController.delegate = self 

et dans le LandingPage

protocol ContainerViewDelegate { 
    func getIndex(index: Int) 
} 
class LandingPageViewController: UIViewController { 

static var delegate : ContainerViewDelegate! 

Répondre

0

Dans le pageViewController, dans la méthode déléguée, vous pouvez envoyer un message au contrôleur de vue de conteneur. De cette manière, chaque fois que le contrôleur de vue de page passe, le contrôleur de vue de conteneur recevra un message. Dans ce message, vous pouvez transmettre l'index.

Ou vous pouvez définir le contrôleur de vue du conteneur en tant que délégué du pageviewcontroller

+0

je jouais avec la mise en conteneur en tant que délégué, mais ça devient compliqué. que voulez-vous dire par envoyer un message? utilisant un centre de notification ou autre? – Pippo

+0

@Pippo Tout comme le délégué fonctionne. Dans le pageviewcontroller, conservez une référence au contrôleur de vue conteneur. Créez une méthode publique pour le contrôleur de vue conteneur. Dans la pageviewcontroller, appelez cette méthode où vous voulez (dans ce cas, vous devriez utiliser la méthode pageviewcontrollerdelegate). Puisque vous détenez une référence au containerviewcontroller, vous savez à qui envoyer le message. – jokeman

+0

Merci d'avoir essayé d'expliquer. Je suis juste très confus avec la façon d'utiliser un délégué pour envoyer un message à une autre classe. je édite la question pour montrer que j'ai placé le délégué de page d'atterrissage à moi-même. mais comment obtenir cette valeur dans la page d'atterrissage? – Pippo