Question

Comment puis-je aller à la mise en œuvre d'un glisser-déposer UIView de UIPopoverController dans le UIView arrière.

Ceci est la fonctionnalité que les pages fournissent dans leurs médias d'insertion popover, où vous pouvez faire glisser une forme à partir de la UIPopoverController et déposez-le dans le document principal.

Je suis en fait confondu avec le UIGestureRecognizers pan et où ils seront mis en œuvre.

Merci,

Umer

Était-ce utile?

La solution

Vous devez traiter avec deux contrôleurs de vue un qui est en arrière-plan appelé mainController qui a présenté à l'aide d'un UIPopoverViewController appelé popoverController. Votre popoverController pourrait ajouter un UIPanGestureRecognizer aux vues, que l'utilisateur peut faire glisser. La cible d'action du gestureRecognizer pourrait être une méthode sur le popoverController.

Une fois que l'utilisateur démarre une opération faisant glisser votre méthode d'action est appelée avec l'gestureRecognizer comme argument, était l'état du gestureRecognizer est UIGestureRecognizerStateBegan. Vous pouvez que sauver le cadre actuel du somewere vue de pouvoir l'animer en arrière, lorsque la chute échoue. Il pourrait être nécessaire de déplacer la vue d'une autre superview (la fenêtre par exemple), parce que je ne suis pas sûr si UIPopoverViewController clipsToBounds son point de vue.

Comme les draggs utilisateur, votre méthode d'action est appelée à plusieurs reprises avec le gestureRecognizer dans le UIGestureRecognizerStateChanged de l'État. Utilisez la méthode translationInView: sur UIPanGestureRecognizer pour déterminer à quel point l'utilisateur fait glisser et mettre à jour le centre traînés vues / images / transformer en conséquence.

Une fois que l'utilisateur lève son doigt la méthode d'action est appelée pour une dernière fois avec l'ensemble de UIGestureRecognizerStateEnded d'état de gestureRecoginzers. Maintenant, il est temps de savoir si la traînée a réussi. Par exemple, le popoverController pourrait demander à la mainController par délégation s'il y a une cible de dépôt sous le point de vue position actuelle, le cas échéant le mainController peut prendre des mesures, sinon le popoverController animerait l'arrière de vue traînés à été il est venu, et l'ajouter à nouveau comme sous-vue à la vue de lui.

J'espère que cela est en quelque sorte compréhensible et utile.

Autres conseils

Selon la documentation sur UIPopoverController, lorsque le popover est présenté, il est présenté sur une « fenêtre » spéciale. À cause de cela, en ajoutant simplement un sous-vue au contrôleur de vue du contenu du contrôleur de vue popover ne suffit pas pour être en mesure de faire glisser une vue extérieure du point de vue du contrôleur de vue popover.

La solution est ici plus facile de créer votre propre fenêtre, ajoutez votre vue glisser en mesure de la fenêtre lors du déplacement se produit. Faire la fenêtre visible pendant toute la durée de la glisser / déposer, puis relâchez votre fenêtre lorsque vous avez terminé.

Comme mentionné ci-dessus, geste de reconnaissance (GR) sont les mieux adaptés pour glisser / déposer fonctionnalité. Une fois l'état de GR a changé à « A commencé » le GR contrôlera toutes les touches jusqu'à ce que la « composition non limitée » ou « annulé » est atteint l'état qui le rend idéal pour glisser des vues entre les contrôleurs de vue ainsi que les fenêtres:)

Exemple:

@interface MySplitViewController : UISplitViewController {

    UIView *dragView;
    UIWindow *dragWindow;
}

Mise en œuvre: NOTE nous ne pas besoin d'appeler "makeKeyAndVisible" sur notre fenêtre. Nous avons juste besoin de mettre sa propriété « cachée »

De Apple en ce qui concerne la méthode makeKeyAndVisible: // commodité. La plupart des applications appellent cela pour afficher la fenêtre principale et permettent également la clé. la propriété autrement utiliser la vue cachée

-(void)dragBegan{

    self.dragWindow = [[UIWindow alloc] initWithFrame:self.view.window.frame];
    [self.dragWindow addSubview:self.dragView];
    [self.dragWindow setHidden:NO];
}

nous traitons ici le Geste de l'Etat « a pris fin » ou « annulé » de Recognizer. NOTE :. Il est important d'enlever la fenêtre lorsque le glisser / déplacer est terminée ou vous perdrez l'utilisateur avec les vues interactivité ci-dessous

-(void)dragEnded{

    [self.dragView removeFromSuperview];

    [self.dragWindow setHidden:YES];
    [self.dragWindow release];

    [self.view addSubview:self.dragView];
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top