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!
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
@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
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