标签: modalviewcontroller

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

我正在尝试在iOS中制作过渡动画,其中视图或视图控制器似乎会扩展以填充整个屏幕,然后在完成时缩回到其原来的位置.我不确定这种类型的过渡是否正式调用,但您可以在iPad的YouTube应用中看到一个示例.当您点击网格上的某个搜索结果缩略图时,它会从缩略图中展开,然后在您返回搜索时收缩回缩略图.

我对此有两个方面感兴趣:

  1. 在一个视图和另一个视图之间转换时,您将如何产生这种效果?换句话说,如果视图A占据屏幕的某个区域,您将如何将其转换为占据整个屏幕的视图B,反之亦然?

  2. 你会如何以这种方式过渡到模态视图?换句话说,如果UIViewController C当前正在显示并包含占据屏幕一部分的视图D,那么如何使它看起来像视图D变成UIViewController E,它在C上呈现模态?

编辑:我正在添加赏金,看看是否能让这个问题更加热爱.

编辑:我有一些源代码可以做到这一点,Anomie的想法就像一个魅力,有一些改进.我首先尝试动画模态控制器的视图(E),但它没有产生感觉像你正在放大屏幕的效果,因为它没有扩展(C)中缩略图视图周围的所有东西.因此,我尝试动画原始控制器的视图(C),但重绘它为一个生涩的动画,像背景纹理之类的东西没有正确缩放.所以我最后做的是拍摄原始视图控制器(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 current modal view 
//  is shrinking into a subview
- (void)dismissModalViewControllerToView:(UIView *)view;

@end
Run Code Online (Sandbox Code Playgroud)

的UIViewController + Transitions.m:

#import "UIViewController+Transitions.h"

@implementation UIViewController (Transitions)

// capture a screen-sized image of the receiver
- (UIImageView *)imageViewFromScreen { …
Run Code Online (Sandbox Code Playgroud)

animation transition uiview modalviewcontroller ios

37
推荐指数
2
解决办法
2万
查看次数

iOS在没有闪存的情况下启动模态视图控制器

我想在初次启动时向用户提供一个教程向导.

有没有办法UIViewController在应用程序启动时呈现模态,而不至少看到毫秒,它rootViewController背后呢?

现在我正在做这样的事情(为了清楚起见省略了首次启动检查):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // ...

    UIStoryboard *storyboard = self.window.rootViewController.storyboard;
    TutorialViewController* tutorialViewController = [storyboard instantiateViewControllerWithIdentifier:@"tutorial"];
    tutorialViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self.window makeKeyAndVisible];
    [self.window.rootViewController presentViewController:tutorialViewController animated:NO completion:NULL];
}
Run Code Online (Sandbox Code Playgroud)

没有运气.我试图[self.window makeKeyAndVisible];[... presentViewController:tutorialViewController ...]声明之前 移动,但随后模态甚至没有出现.

objective-c startup modalviewcontroller ios

35
推荐指数
4
解决办法
1万
查看次数

使用自定义模式演示处理呼叫状态栏

问题

我在电话中提出一个UINavigationController(有一个根视图控制器,已经被自然推动)时,我注意到了一些奇怪的行为UIViewControllerAnimatedTransitioning.

  • 如果在显示导航控制器启用了呼叫状态栏,则导航控制器会按预期向下移动其视图.但是当呼叫结束时,控制器不会将其视图向上移动,在状态栏下留下20p的间隙.
  • 如果显示控制器之前启用了通话中状态栏,则控制器根本不会考虑状态栏,而是将44p高导航条中的4p从40p状态栏下方窥视.通话结束后,控制器将其视图向下移动以适应正常的20p状态栏.

*注意:这是在模拟器上测试的,因为它很容易启用/禁用通话状态栏,但测试人员在实际手机上观察到了这种现象.

我的(部分)解决方法

如果状态栏是异常高度,我通过在演示期间调整控制器的框架来解决问题:

@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 always hit
        UIEdgeInsets insets = UIEdgeInsetsZero;
        // My "solution" was to inset the container frame by the difference …
Run Code Online (Sandbox Code Playgroud)

uiview modalviewcontroller ios ios7 ios7-statusbar

34
推荐指数
1
解决办法
2836
查看次数

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

我在做什么:

在我的应用程序中,我使用以下代码呈现模态视图控制器(包含应用程序设置):

    optionsViewController.modalTransitionStyle = UIModalTransitionStylePartialCurl;
    [self presentModalViewController:optionsViewController animated:YES];
Run Code Online (Sandbox Code Playgroud)

此过渡只是卷起视图的底部以显示一些设置.(请参阅"地图"应用程序中的示例.)当您点击页面的上半部分时,原始视图仍然存在但灰显,模态视图控制器将自动关闭(由操作系统处理,我没有' t代码).

-

什么不起作用:

这在iOS 4中运行良好(我的应用程序实际上是在App Store上).但在iOS 5中,看起来苹果已经改变了这种转变的行为,视图控制器不再自我贬低.我试图复制之前由操作系统处理的行为,但无法弄清楚如何操作.

-

我尝试过的:

在选项视图的顶部添加不可见按钮不起作用.然后页面卷起了我不想要的完整方式.

除此之外,我被困住了.我应该如何复制它最初的工作方式(或者我从一开始就以错误的方式进行复制!).任何帮助深表感谢!

iphone objective-c modalviewcontroller ios5

33
推荐指数
2
解决办法
4万
查看次数

在外部水龙头上关闭模态视图表单控制器

我将一个模态视图控制器呈现为一个表单,并在单击取消按钮(即一个条形按钮项目)时将其解除.当我在该视图之外点击时,我需要忽略它.请帮我一个参考.注意:我的模态视图控制器带有导航控制器.

@cli_hlt,@ Bill Brasky感谢您的回答.当在作为表单的模态视图之外发生敲击时,我需要忽略它.我在下面粘贴我的代码.

-(void)gridView:(AQGridView *)gridView didSelectItemAtIndex:(NSUInteger)index  
{        
    if(adminMode) 
    {
        CHEditEmployeeViewController *editVC = [[CHEditEmployeeViewController alloc] initWithNibName:@"CHEditEmployeeViewController" bundle:nil];
        editVC.delegate = self;
        editVC.pickedEmployee = employee;
        editVC.edit = TRUE;
        editVC.delegate = self;
        UINavigationController *navigationController = [[UINavigationController alloc]initWithRootViewController:editVC];
        navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
        [self presentModalViewController:navigationController animated:YES];

        return;
    }   //the above code is from the view controller which presents the modal     view. Please look at the below code too which is from my modal view controller. Please guide me in a proper way.   -(void)tapGestureRecognizer {

    UITapGestureRecognizer *recognizer …
Run Code Online (Sandbox Code Playgroud)

xcode objective-c uinavigationcontroller modalviewcontroller

32
推荐指数
9
解决办法
3万
查看次数

呈现视图控制器后自动布局无效(和许多情况)

背景:

我有一个自定义的容器控制器,就像UITabBarController,但有切换动画.我使用自动布局来实现.
因为子控制器之间的切换是动态的,所以当将其视图添加到容器的视图中时,将适当的约束添加到子视图控制器,而不是在IB中预先设置.(当然,约束被添加到超级视图中)

http://d.pr/i/q6NF容器控制器笔尖设置

PS:约束的细节
H:| [Child](将约束的常数从左/右改为左/右)
H:[Child(== Super)]
V:| [Child] |

问题出在哪儿:

其中一个子控制器是导航控制器,导航控制器出现模态视图控制器(使用presentViewController:animated:completion:)时出现问题,并解除它(使用dismissViewControllerAnimated:completion:),当前/解除导航控制器的框架变为(x,y,0, 0),似乎自动布局变得无效,可能已删除约束.

http://d.pr/i/VmvL现在/解雇程序

研究

我还没有使用代码来验证这些约束发生了什么,但是使用Spark Inspector,我看到在当前/解除过程中视图表示发生了变化.当我的导航控制器呈现模态视图控制器时,iOS只是将整个导航控制器的视图交换到模态视图控制器的视图.当导航控制器的视图返回时,自动布局不再起作用.

可能解决方案

我想出的解决方案之一是让我的容器控制器提供模态控制器.

或者我只是将容器控制器更改为无自动布局.

事实上,自从我开始使用自动布局以来,这种技术带来的问题只会占据优势.除了这个问题,每次界面方向改变时,我的容器控制器内的视图都无法自动布局,似乎子视图在方向改变之前总是使用超视图的框架.我仔细检查我设置的约束,没有冲突,没有歧义.

我的猜测是我的自定义容器控制器与自动布局系统中的模态视图控制器和界面方向更改不兼容,即使设置了约束.

Xcode环境

Xcode 5 beta,iOS 7SDK,目标iOS6.1也许SDK环境不对劲

modalviewcontroller ios autolayout ios7

31
推荐指数
4
解决办法
2万
查看次数

iOS - 如何控制模态视图控制器的大小?

我提出了一个模态视图控制器.如果重要的话,它会从底部向上滚动.如何控制它占据的屏幕部分?

编辑:我在模态视图控制器中有以下内容.它没有帮助.

- (void)viewDidLoad {
    TestResultView *trv = [[TestResultView alloc]initWithTest: [Model m].currentTest];
    self.view = trv;
    trv.frame = CGRectMake(0, 320, 320, 160);
    [trv release];
    [super viewDidLoad];
}
Run Code Online (Sandbox Code Playgroud)

iphone modalviewcontroller ios

30
推荐指数
3
解决办法
4万
查看次数

iOS:ModalView背景透明吗?

我想在viewController上显示一个modalview.(有一个导航控制器).

在我看来,我有文字和一个显示模态视图的按钮.

我创建了一个包含我的模态视图的.xib(它是带有图像和标签的视图).

当我展示它时,那:

ShareController *controller =  [[ShareController alloc] initWithNibName:@"ShareController" bundle: nil];
controller.view.backgroundColor = [UIColor clearColor];
controller.modalPresentationStyle = UIModalPresentationFormSheet;
controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

[self presentViewController:controller animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

我有我的模态视图,但是,背景变成了黑色......我想在我的视图中看到文本.(我试图设置alpha等等;但是没有运行:'()

有人帮我吗?

谢谢,

background objective-c modalviewcontroller ios

30
推荐指数
2
解决办法
3万
查看次数

如何在UITableView中使用自适应segue实现UIVisualEffectView

我想实现UIVisualEffectView将模糊效果应用于视图以显示其背后的视图.

这个应该有背景模糊的视图UITableViewController是嵌入在a中的UINavigationController,它将在iPad上以popover呈现,或者它将在iPhone上以模式全屏显示,这要归功于iOS 8自适应segues(Present as Popover).当这个视图控制器在弹出框中时,我希望背景模糊弹出框下面的内容,当它全屏显示时,我希望背景模糊前一个视图控制器.

我试图实现这个并且没有成功.我甚至无法使模糊效果适用于弹出窗口.我认为这段代码可以解决问题:

//In viewDidLoad on the UITableViewController subclass:
let effectView = UIVisualEffectView(effect: UIBlurEffect(style: .Light))
effectView.frame = tableView.frame
tableView.addSubview(effectView)
Run Code Online (Sandbox Code Playgroud)

我也尝试添加子视图tableView.backgroundView,我尝试设置backgroundView为我effectView,我尝试使用Autolayout约束而不是设置框架,但没有任何工作.你能帮助我完成所期望的行为吗?

我想要获得的一个例子:
iPad popover:
在此输入图像描述

iPhone模态演示:
在此输入图像描述

uitableview uipopovercontroller modalviewcontroller ios swift

28
推荐指数
3
解决办法
2万
查看次数

如何识别出呈现UIViewController

我创建了一个UIViewController子类,它可以在UINavigationController的导航堆栈中推送,也可以从任何UIViewController呈现(模态).我需要确定是否显示了我的视图控制器,如果显示,我需要在视图控制器的顶部添加一个带有关闭按钮的工具栏.(否则,如果将其推入导航堆栈,则会添加默认关闭按钮,使用该用户可以返回.)

在UIViewController子类内部的所有可用版本中说4.3,5.0到6.0,如果满足以下条件,我可以假设视图控制器是以模态方式呈现的.

if(self.parentViewController == nil || self.navigationController == nil)
Run Code Online (Sandbox Code Playgroud)

iphone objective-c uiviewcontroller modalviewcontroller ios

26
推荐指数
5
解决办法
3万
查看次数