- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的一位同事刚刚向我展示了可用于我的 Split View Controller 的“替换转场”。它确实运作良好。
但我真的很想从旧 View “淡入淡出”到新 View 。我已经通过设置 View 的 alpha 属性完成了淡入淡出,但不确定这将如何使用 segues。
最佳答案
问题是转换动画需要一个容器 View ,但是当替换一个分割的细节时没有合适的容器 View ,整个右侧被替换(通常用一个包含细节的新导航 Controller )。 Split View有一个 View ,它将两侧添加为 subview ,如果它的每一侧都有一个容器 View ,那么这会很容易。或者,您可以使用它的 View 甚至窗口,但您需要转换框架。解决方法包括在以前的细节 Controller 消失之前对其进行快照,然后将其作为 subview 添加到新的细节 Controller 上并为其移除设置动画。这就是 Notes 所做的,以实现垃圾笔记动画,新笔记出现在后面(尽管它不使用 segues)。如果您希望相同的动画以纵向方式工作(如丢弃便条),那么因为使用了嵌套导航 Controller ,所以最好使用最外面的导航 Controller 的 View 作为动画的容器,这样即使导航栏也包含在淡入淡出中.
好消息是这一切都可以在 UIStoryboardSegue 子类中完成。在 prepareForSegue 中,暂时不要设置 self.detailViewController。在调用 super 之前的 perform 方法中使用 sourceViewController.detailViewController 对 View 进行快照。然后调用 super 执行。您不能使用目的地更新该属性(以便下次使用)。然后将此快照添加为目的地(或其导航 Controller )的 subview 。 CATransaction flush 然后执行 transitionWithView 以使用 [snapshot removeFromSuperView] 动画化屏幕截图。这是一些示例代码:
- (void)perform{
RootViewController *rootController = self.sourceViewController;
MasterViewController *previousMasterViewController = (MasterViewController *)rootController.collapseControllerForMaster.detailViewController;
UIView *snapshotView = [previousMasterViewController.navigationController._outermostNavigationController.view snapshotViewAfterScreenUpdates:NO];
MasterViewController *masterController = (MasterViewController *)[self.destinationViewController topViewController];
rootController.collapseControllerForMaster.detailViewController = masterController;
UIView *view = [previousMasterViewController.deleteBarButtonItem valueForKey:@"view"];
CGRect rect = [view convertRect:view.frame toView:masterController.view.window];
[super perform];
[masterController.navigationController._outermostNavigationController.view addSubview:snapshotView];
[CATransaction flush];
[UIView beginAnimations:@"delete" context:NULL];
[UIView setAnimationTransition:103 forView:masterController.navigationController._outermostNavigationController.view cache:YES];
[UIView setAnimationDuration:0.5f];
[UIView setAnimationPosition:CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect))];
[snapshotView removeFromSuperview];
[UIView commitAnimations];
}
很抱歉使用私有(private)方法,我讨厌不得不重新实现关键的缺失公共(public)方法。仅供引用,折叠 Controller 是我的 Split View Delegate Controller 对象。您也许可以只使用源 Controller 上的 detailViewController 属性。
这是纵向的样子:
关于ios - 用动画替换segue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18108317/
我一整天都遇到同样的错误,我知道这是在说 Storyboard 中没有识别出 segue,但确实如此。以下是我认为相关的代码:1.为 segue 发出信号的按钮的 IBAction。 -(IBActi
我有一个从 A View Controller 到 B View Controller 的 unwind segue。 在B中做了一个网络操作,操作完成后,响应会显示在A View Controlle
我正在创建一个应用程序,家长可以在其中登录并查看有关其本地托儿中心的信息。但是,为登录运行 View Controller 的代码无法正常工作。一旦用户按下登录按钮,我希望我的代码使用标识符“Show
刚刚遇到一个奇怪的问题。我有一个启动画面,它自动使用自定义 segue (fade-to-segue) 转到主页 ViewController。自定义 segue 工作正常,但一旦实现,我在主页上的其
以编程方式创建的 segue 在 performSegueWithIdentifier: 上使应用程序崩溃,不过我真的不想使用 Storyboard。 - (void)viewDidLoad { [s
我想我一定在这里遗漏了一些简单的东西,但我不知道它是什么。 我必须支持来自同一个 View Controller 的多个 segue,所以我很自然地想使用 segue 标识符。我的代码由于某种原因无法
当用户在警告时点击“确定”按钮时,我如何才能将用户带到自定义 View Controller ? 我有一个主 Controller -> 导航 Controller -> 第二个 View Contr
在 TableView Controller 中,我试图获取在我继续之前选择的行的索引(最终将传递此信息以准备继续)。我已经实现了这个功能: var selectedQuestionCell: Ind
我正在 Xamarin Studio 中开发一个应用程序(所以它是 C#),它有一个包含多个 TextField 的表单,我想在 segue 之前验证整个屏幕> 到下一个屏幕执行。单击按钮时,它正在使
我有一个带有标识符的 segue。 当我按下函数 shouldPerformSegueWithIdentifier 中的按钮时,我得到一个空标识符 什么会导致这样的问题?我设置错了什么? 这是我的代码
我有一个奇怪的问题。我在 Storyboard中创建了 2 个 View Controller :testSegueViewcontroller 和 nextPageViewController。 t
我下面的代码试图将一个值从 twoviewcontroller 转移到 View Controller 。 segue 正在工作,我可以从 View Controller 转到 View Contro
我正在尝试使用自定义segue,当单击按钮时,它会使 View 向右或向左“滚动”。我添加了一个如下所示的自定义类 class horizontalSegue : UIStoryboardSegue
我有一个带有 Root View Controller 的 UINavigationController。我的 UINavigationController 也设置为我的应用程序的 Initial V
您好,我正在尝试使用 prepare for segue 方法执行一个 segue。我在关注这个问题 this但我无法成功注册。当我单击注册按钮时,它所做的只是注册用户并停在那里。我从 View Co
当 Storyboard上有一个按钮连接退出时,我了解如何使用展开转场。但是在我的应用程序中,我使用推送转场从 TableViewController 转到 ViewController。所以我的导航
我要实现的目标的背景: MainViewController 呈现 TableVC。我将点击一个单元格以显示 DetailVC。能够通过 TableVC 或 DetailVC 上导航栏上的 doneB
在我的 Storyboard中,模态转场将用户带到登录屏幕(从主屏幕)。然后,我从注册屏幕添加了一个 PUSH segue 到下一个屏幕(创建配置文件),该屏幕嵌入在导航 Controller 中(创
我有大约 6 个 segue 在 prepareForSegue 方法中执行相同的操作,但是,我想为我的 unwind segue 跳过此操作,但我无法弄清楚如何确定传递的 segue 是 unwin
因此,我开始在XCode 4.3.2中使用 Storyboard 。我从Master-Detail应用程序(iPad的拆分 View 应用程序)开始。在详细信息 View (名为DetailVC)中,
我是一名优秀的程序员,十分优秀!