J'aimerais que UIView soit glisser du bas de l'écran (et restez mi-écran) comme une feuille d'emploi. Comment puis-je accomplir cela?
La vue semble être animée dans le coin et apparaître dans le coin. Comment puis-je le faire glisser du fond? Se rapprocher! P> p>
5 Réponses :
Vous devrez déplacer vous-même la vue vous-même, en définissant son Center code> ou
image code>. Je vous laisserai savoir quoi définir ceux-ci. Mais pour l'animation:
// set the view to its initial position here...
[UIView beginAnimations:nil context:NULL];
// move the view into place here...
[UIView commitAnimations];
Merci pour le conseil! Je suis presque là. J'ai modifié mon message pour montrer mon code. Ça ne glisse pas exactement.
Une manière d'utiliser le contrôleur de visualisation modal actuel sur le contrôleur d'affichage:
pour Plus d'infos Jetez un coup d'oeil à la Documentation UIVIEWCONTROLLER . P> Vous pouvez ensuite la déplacer à nouveau si vous devez aller à l'écran complet ou le rejeter. P> P> P> P> > PresentModalViewController: (UIViewController *) modalviewController animé: (bool) animé code> p>
Je veux que cela se comporte aussi comme une feuille d'uction, en montrant la vue mi-écran.
Merci pour le conseil! Je suis presque là. J'ai modifié mon message pour montrer mon code. Ça ne glisse pas exactement.
Que diriez-vous d'une vue comme l'application UPS gratuite? C'est comme une vue sur le centre de notification que l'utilisateur peut glisser / glisser et peut même réglementer jusqu'au bout de la vue de la vue sur l'autre vue.
Faites ce que Matt a fait ici, mais changez simplement les valeurs et la direction. J'ai un code à la maison pour le faire à partir du bas si vous en avez besoin plus tard (je mettrai à jour ce message).
link: http://cocoawithlove.com/2009/05/intercepting-status-bar-touches-on.html p>
aussi N'oubliez pas de sortir le bit du code qui déplace la vue principale vers le bas (donc l'UIVoir l'UIVIEW apparaît simplement sur le dessus comme une feuille d'action) P>
C'est ce que j'utilise dans l'une de mes applications pour afficher / masquer une petite vue "Options": P> - (void)toggleOptions:(BOOL)ViewHidden
{
// this method opens/closes the player options view (which sets repeat interval, repeat & delay on/off)
if (ViewHidden == NO)
{
// delay and move view out of superview
CGRect optionsFrame = optionsController.view.frame;
[UIView beginAnimations:nil context:nil];
optionsFrame.origin.y += optionsFrame.size.height;
optionsController.view.frame = optionsFrame;
[UIView commitAnimations];
[optionsController.view
performSelector:@selector(removeFromSuperview)
withObject:nil
afterDelay:0.5];
[optionsController
performSelector:@selector(release)
withObject:nil
afterDelay:0.5];
optionsController = nil;
}
else
{
optionsController = [[PlayOptionsViewController alloc] init];
//
// Position the options at bottom of screen
//
CGRect optionsFrame = optionsController.view.frame;
optionsFrame.origin.x = 0;
optionsFrame.size.width = 320;
optionsFrame.origin.y = 423;
//
// For the animation, move the view up by its own height.
//
optionsFrame.origin.y += optionsFrame.size.height;
optionsController.view.frame = optionsFrame;
[window addSubview:optionsController.view];
[UIView beginAnimations:nil context:nil];
optionsFrame.origin.y -= optionsFrame.size.height;
optionsController.view.frame = optionsFrame;
[UIView commitAnimations];
}
}
J'aime ta solution. Y a-t-il un moyen d'arrêter l'utilisateur d'interagir avec la vue derrière cette popup?
Un moyen simple serait de simplement désactiver l'interaction utilisateur (I.e. [SetUserPinterActionActionAcéder: Non]; code>) de cette vue. Un meilleur moyen serait de montrer une autre vue avec une sorte de gradient semi-transparent avec interaction utilisateur désactivée et alors i> anime votre nouvelle vue. De cette façon, cela a du sens pour l'utilisateur que, étant donné que l'autre vue est quelque peu atténuée, qu'ils ne peuvent plus interagir avec elle. Sinon, ils pourraient penser que quelque chose est cassé. Pensez simplement à la façon dont une UIALERTERVIEWS cela. Lorsque vous avez terminé, supprimez simplement les deux vues
Consultez ce message: HTTP : //blog.yetanotherJosh.com/post/33685102199/3-ways-a-do-a-vertical-Transition-with P>
Je vais avec l'approche de la fenêtre modale. P>
Notez que Les réponses de liaison seules sont découragées , afin que les réponses devraient être le point final d'une recherche pour une solution (contre une autre halte de références, qui tendent à être obsolète au fil du temps). Veuillez envisager d'ajouter un synopsis autonome ici, en gardant le lien comme référence.
Essayez cette solution ... Ça fonctionne
#pragma mark - Date Selector View PresentModelView with Transparent ViewController - (void) showModal:(UIView*) modalView { CGRect rect=modalView.frame; rect.origin=CGPointMake(0, 0); self.tutorialView.frame=rect; UIWindow *mainWindow = [(AppDelegate *)[UIApplication sharedApplication].delegate window]; CGPoint middleCenter; middleCenter = CGPointMake(modalView.center.x, modalView.center.y); CGSize offSize = [UIScreen mainScreen].bounds.size; CGPoint offScreenCenter = CGPointMake(offSize.width / 2.0, offSize.height * 1.5); modalView.center = offScreenCenter; if ([[mainWindow subviews] containsObject:modalView]) { [modalView removeFromSuperview]; } [mainWindow addSubview:modalView]; [mainWindow bringSubviewToFront:modalView]; // Show it with a transition effect [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.3]; // animation duration in seconds modalView.center = middleCenter; [UIView commitAnimations]; } // Use this to slide the semi-modal view back down. - (void) hideModal:(UIView*) modalView { CGSize offSize = [UIScreen mainScreen].bounds.size; CGPoint offScreenCenter = CGPointMake(offSize.width / 2.0, offSize.height * 1.5); [UIView beginAnimations:nil context:(__bridge void *)(modalView)]; [UIView setAnimationDuration:0.3]; [UIView setAnimationDelegate:self]; [UIView setAnimationDidStopSelector:@selector(hideModalEnded:finished:context:)]; modalView.center = offScreenCenter; [UIView commitAnimations]; } - (void) hideModalEnded:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context { UIView *modalView = (__bridge UIView *)context; [modalView removeFromSuperview]; }
message mis à jour avec du code qui devrait aider
Un autre bon exemple: GITUB.COM/Homeyer/customuiagsheet