gpt4 book ai didi

ios - 等待执行 viewWillDisappear 直到自定义动画完成?

转载 作者:行者123 更新时间:2023-11-29 00:58:00 24 4
gpt4 key购买 nike

我想在用户点击后退按钮返回到我的 Root View Controller 时执行动画。动画将简单地突出显示用户在详细 View Controller 中所做的更改。

我试过了。动画本身可以工作(对于我的问题来说并不是真正重要的,只是将其保留以说明我正在做什么。)问题是连续发生太快,您看不到动画。

如何等待执行 viewWillDisappear 直到动画完成?

override func viewWillDisappear(animated: Bool) {
// ...

// Animate if text changes. reminderAfterRulesRun is a custom data structure. reminderNameTextInput is my outlet to my label
if reminderNameTextInput.text != reminderAfterRulesRun.title {

let originalreminderNameTextInputColor = self.reminderNameTextInput.textColor

// Animate the removing of "All" and replacing it with the most commonly used list.
UIView.animateWithDuration(0.3, delay: 0, options: .Autoreverse, animations: {

// Fade out
self.reminderNameTextInput.textColor = UIColor.redColor()
self.reminderNameTextInput.text = reminderAfterRulesRun.title
self.reminderNameTextInput.alpha = 0.0

}, completion: {
(finished: Bool) -> Void in

// Once the label is completely invisible, set the text and fade it back in
UIView.animateWithDuration(0.3, delay: 0, options: .Autoreverse, animations: {
// self.reminderNameTextInput.selectedSegmentIndex = self.toSegmentedControlValue(reminderAfterRulesRun.reminderNameTextInput)!
self.reminderNameTextInput.text = reminderAfterRulesRun.title
self.reminderNameTextInput.textColor = originalreminderNameTextInputColor
self.reminderNameTextInput.alpha = 1.0
}, completion: nil)
})
}
}

最佳答案

看起来您需要使用 View Controller Transition API。在较高级别,您需要在 View Controller 中实现 UINavigationControllerDelegate 协议(protocol)方法。当您将 View Controller 设置为 Nav Controller 的委托(delegate)并且即将发生转换时,将调用此方法。在这里您可以检查并查看交互中涉及哪些 View Controller 以及转换的方向(推送或弹出)。使用此信息,您可以提供合适的动画师。

- (id<UIViewControllerAnimatedTransitioning>)
navigationController:(UINavigationController *)navigationController
animationControllerForOperation:(UINavigationControllerOperation)operation
fromViewController:(UIViewController*)fromVC
toViewController:(UIViewController*)toVC
{
if (operation == UINavigationControllerOperationPush) {
return self.animator;
}
return nil;
}

“动画师”是一个 NSObject 子类,它实现了 UIViewControllerAnimatedTransitioning 协议(protocol)。该协议(protocol)具有询问转换时间的方法

- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext
{
return 0.25;
}

然后调用实现转换:

- (void)animateTransition:    (id<UIViewControllerContextTransitioning>)transitionContext
{
UIViewController* toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIViewController* fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
[[transitionContext containerView] addSubview:toViewController.view];
toViewController.view.alpha = 0;

[UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
fromViewController.view.transform = CGAffineTransformMakeScale(0.1, 0.1);
toViewController.view.alpha = 1;
} completion:^(BOOL finished) {
fromViewController.view.transform = CGAffineTransformIdentity;
[transitionContext completeTransition:![transitionContext transitionWasCancelled]];

}];

}

关于ios - 等待执行 viewWillDisappear 直到自定义动画完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37427018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com