Tag: modalviewcontroller

模态视图控制器不会自行解散

我在做什么: 在我的应用程序中,我使用下面的代码展示了一个模态视图控制器(包含应用程序设置): optionsViewController.modalTransitionStyle = UIModalTransitionStylePartialCurl; [self presentModalViewController:optionsViewController animated:YES]; 这个转换只是卷起视图的底部来暴露一些设置。 (请参阅“地图”应用程序中的示例。)当您点击页面的上半部分(原始视图仍然存在但灰显)时,模式视图控制器将自动解除(由操作系统处理,这个代码)。 – 什么不工作: 这在iOS 4中工作正常(我的应用程序实际上是在App Store上)。 但在iOS 5中,看起来苹果已经改变了这种转换的行为,而视图控制器不再解散自己。 我试图复制以前由操作系统处理的行为,但无法弄清楚如何。 – 我试过了: 在选项视图的顶部添加一个不可见的button不起作用。 然后页面卷起了我不想要的完整方式。 除此之外,我卡住了。 我应该如何复制原来的工作方式(或者我是从一开始就以错误的方式进行的!)。 任何帮助深表感谢!

使用自定义模式演示处理通话状态栏

问题 在通话过程中用UIViewControllerAnimatedTransitioning呈现UINavigationController (具有根视图控制器,已经自然按下了),我注意到了一些奇怪的行为。 如果在显示导航控制器后启用通话状态栏,则导航控制器将按预期方式切换其视图。 但是当通话结束时,控制器不会将其视图移回,在状态栏下留下20p的间隔。 如果在呈现控制器之前启用通话状态栏,则控制器根本不占用状态栏,导致44p高的导航栏的4p从40p状态栏下面窥视。 当通话结束时,控制器将其视图向下移动以适应正常的20p状态栏。 *注意:这是在模拟器上testing的,由于启用/禁用通话状态栏非常方便,但是testing人员在实际的手机上观察到了这种现象。 我的(部分)解决方法 如果状态栏是不正常的高度,我会在演示期间通过调整控制器的框架来解决问题: @interface CustomAnimationController : NSObject <UIViewControllerAnimatedTransitioning> @end @implementation CustomAnimationController – (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext { UIViewController *toController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; UIView *container = [transitionContext containerView]; CGRect frame = [transitionContext finalFrameForViewController:toController]; if (CGRectEqualToRect(frame, CGRectZero)) { // In my experience, the final frame is always a zero rect, so this is […]

如何在iOS上的视图之间进行展开/合同转换?

我正在尝试在iOS中创build一个视图或视图控制器的过渡animation,使其展开以填充整个屏幕,然后在完成时恢复到以前的位置。 我不确定这种types的转换是正式调用的,但是您可以在iPad的YouTube应用程序中看到一个示例。 当您点击网格上的某个search结果缩略图时,它会从缩略图展开,然后在您返回search时缩回到缩略图中。 我对这两方面感兴趣: 在一个视图和另一个视图之间转换时,你会如何做到这一点? 换句话说,如果视图A占据屏幕的某个区域,那么如何将它转换到占据整个屏幕的视图B,反之亦然? 你将如何过渡到这种模式的观点? 换句话说,如果UIViewController C当前正在显示并包含视图D,它占据了屏幕的一部分,那么如何使它看起来像视图D正在变成UIViewController E,它被模态地显示在C的顶部? 编辑:我添加一个赏金,看看是否得到这个问题更爱。 编辑:我有一些源代码可以做到这一点,Anomie的想法就像一个魅力,有一些改进。 我首先试着对模态控制器的视图(E)进行animation处理,但没有产生像放大屏幕一样的效果,因为它并没有扩大(C)中缩略图视图周围的所有东西。 所以然后我尝试了原始控制器的视图(C)的animation,但重绘它为一个生涩的animation,像背景纹理的东西没有正确放大。 所以我所做的是拍摄原始视图控制器(C)的图像,并将其放大到模态视图(E)中。 这种方法比我原来的方法要复杂得多,但看起来不错! 我认为这也是iOS如何进行内部转换的原因。 无论如何,这里的代码,我已经写在UIViewController类别。 的UIViewController + Transitions.h: #import <Foundation/Foundation.h> @interface UIViewController (Transitions) // make a transition that looks like a modal view // is expanding from a subview – (void)expandView:(UIView *)sourceView toModalViewController:(UIViewController *)modalViewController; // make a transition that looks like the […]

iPad自定义大小的模式视图控制器

我有几个特定大小的模式视图控制器。 我试图避免使用自定义视图(在当前视图上创build全屏黑色半透明叠加,在视图上添加模态视图,animation等)来呈现它,因为没有适合我的大小的modalPresentationStyle控制器。 现在我正在使用UIModalPresentationPageSheet,但我的视图的高度较小,并且有一个难看的空白区域 期望的演示 _______________ | _______ | | | | | | | MyVC | | | | | | | ——- | ————— 实际演示 _______________ | | | | | | MyVC | | | | | | | |——-| | | | blank | | ————— 如果我使用UIModalPresentationFormSheet容器宽度较小。 我试图弄清楚如何做,但我不知道是否有可能。 呈现比任何presentationStyles小的模态VC的问题的解决scheme是什么? 唯一的解决办法是安排一个“自定义模式视图控制器引擎”? Popovers不符合我的devise要求:(

iOS:在NSUserDefaults中使用布尔值

当我的应用程序的rootViewController加载时,我想能够检查用户login凭证是否已经保存到NSUserDefaults 。 基本上,当用户加载应用程序,他/她没有保存她的login凭证, modalAlertView将被推送,用户将能够适当地保存他们的凭据。 这将这些UITextFieldstring保存到相应的NSUserDefault对象。 然而,是否有可能,当这个保存完成时,我可以创build一个布尔值的NSUserDefault对象,并将值更改为是? 这意味着布尔值已经设置为no,并且当用户保存他们的login凭证时,它也将布尔值更改为yes?

dismissModalViewController并传回数据

我有两个视图控制器, firstViewController和secondViewController 。 我正在使用这个代码切换到我的secondViewController(我也传递一个string): secondViewController *second = [[secondViewController alloc] initWithNibName:nil bundle:nil]; second.myString = @"This text is passed from firstViewController!"; second.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; [self presentModalViewController:second animated:YES]; [second release]; 然后我在secondViewController中使用这个代码切换回firstViewController: [self dismissModalViewControllerAnimated:YES]; 所有这一切正常。 我的问题是,如何将数据传递给firstViewController? 我想从secondViewController传入一个不同的string到firstViewController。 我感谢任何帮助。 多谢你们。