Возможно ли затухание и постепенное переход между контроллерами View в Storyboard. Или без перехода.Как сделать переход Fade/No между диспетчерами вида
Если возможно, что это за код?
Возможно ли затухание и постепенное переход между контроллерами View в Storyboard. Или без перехода.Как сделать переход Fade/No между диспетчерами вида
Если возможно, что это за код?
Если вы представляете контроллер модального вида, вы можете указать modalTransitionStyle
из UIModalTransitionStyleCrossDissolve
. Если делать это с Segue в раскадровке, выбери инспектор атрибутов для Segue, и указать стиль перехода там:
Если представление контроллер представления программного, вы можете определить свой модальный переход между видом контроллеры в раскадровку с «Перехода» из «Cross Dissolve», а затем контроллер представления источника выполнить этот переход:
[self performSegueWithIdentifier:@"presentSegue" sender:sender];
Или, если вы звоните presentViewController
:
UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"YourStoryboardID"];
controller.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentViewController:controller animated:YES completion:nil];
В прошивке 7, Apple предоставила новую технологию, которая обеспечивает богатый и надежный контроль за высоко настроенные переходы. Для получения дополнительной информации см. Видео WWDC 2013 Custom Transitions Using View Controllers.
Но, например, если вы хотите настроить толчок и поп-анимацию в прошивке 7 угасать, вы бы указать delegate
для навигации контроллера
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationController.delegate = self;
}
Вы бы затем реализовать animationControllerForOperation
, что указанный аниматор объекты толкая и выскакивает:
- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
animationControllerForOperation:(UINavigationControllerOperation)operation
fromViewController:(UIViewController*)fromVC
toViewController:(UIViewController*)toVC
{
if (operation == UINavigationControllerOperationPush)
return [[PushAnimator alloc] init];
if (operation == UINavigationControllerOperationPop)
return [[PopAnimator alloc] init];
return nil;
}
Вы бы, очевидно, должны выполнять свои собственные нажимные и поп-аниматор, такие как:
@interface PushAnimator : NSObject <UIViewControllerAnimatedTransitioning>
@end
@implementation PushAnimator
- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext
{
return 0.5;
}
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
UIViewController* toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
[[transitionContext containerView] addSubview:toViewController.view];
toViewController.view.alpha = 0.0;
[UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
toViewController.view.alpha = 1.0;
} completion:^(BOOL finished) {
[transitionContext completeTransition:![transitionContext transitionWasCancelled]];
}];
}
@end
И
@interface PopAnimator : NSObject <UIViewControllerAnimatedTransitioning>
@end
@implementation PopAnimator
- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext
{
return 0.5;
}
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
UIViewController* toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIViewController* fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
[[transitionContext containerView] insertSubview:toViewController.view belowSubview:fromViewController.view];
[UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
fromViewController.view.alpha = 0.0;
} completion:^(BOOL finished) {
[transitionContext completeTransition:![transitionContext transitionWasCancelled]];
}];
}
@end
Существует аналогичный, но немного другой метод для настройки модальных переходов, тоже (хотя, если вы просто делали лицо, вы, вероятно, просто использовать modalTransitionStyle
обсуждался выше, если есть была какая-то другая тонкая настройка, которую вы хотели использовать). См. Вышеупомянутый Custom Transitions Using View Controllers для получения дополнительной информации.
Нижняя линия, пользовательские переходы для iOS 7 - это несколько сложный, но очень надежный способ обеспечить огромный контроль над анимациями для переходов.
Благодарим вас за составление полного и скопированного/вставного ответа! – xaphod
Для создания пользовательского Segue создайте подкласс UIStoryboard segue. Например:
// MCFadeSegue.h
#import <UIKit/UIKit.h>
@interface MCFadeSegue : UIStoryboardSegue
@end
// MCFadeSegue.m
#import <QuartzCore/QuartzCore.h>
#import "MCFadeSegue.h"
@implementation MCFadeSegue
- (void)perform
{
CATransition *transition = [CATransition animation];
transition.duration = 0.5;
transition.type = kCATransitionFade;
[[[[[self sourceViewController] view] window] layer] addAnimation:transition
forKey:kCATransitionFade];
[[self sourceViewController]
presentViewController:[self destinationViewController]
animated:NO completion:NULL];
}
@end
Затем в MainStoryboard.storyboard выбрать SEGUE и набор Стиль: Выборочная и класс: MCFadeSegue.
должно быть @ реализация MCFadeSegue не @ реализация MCFadeInSegue же как .h –
@ brian.clear Исправлено. Благодарю. –
Не создавая пользовательский segue, я собрал этот код, чтобы представить представление ...
UIViewController *nextView = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"YOUR_VIEW_CONTROLLER_STORYBOARD_NAME"]; nextView.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; [self.navigationController presentViewController:nextView animated:YES completion:nil]; // (For a cross dissolve, set animated:YES. For no transition, set animated:NO.)
Надеюсь, что это поможет любому, кто сталкивается с этим вопросом!
Тяни/Поп UIViewController FadeIn/FadeOut в Swift
class FadeInPushSegue: UIStoryboardSegue {
var animated: Bool = true
override func perform() {
if var sourceViewController = self.sourceViewController as? UIViewController, var destinationViewController = self.destinationViewController as? UIViewController {
var transition: CATransition = CATransition()
transition.type = kCATransitionFade; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
sourceViewController.view.window?.layer.addAnimation(transition, forKey: "kCATransition")
sourceViewController.navigationController?.pushViewController(destinationViewController, animated: false)
}
}
}
class FadeOutPopSegue: UIStoryboardSegue {
override func perform() {
if var sourceViewController = self.sourceViewController as? UIViewController, var destinationViewController = self.destinationViewController as? UIViewController {
var transition: CATransition = CATransition()
transition.duration = 0.4
transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
transition.type = kCATransitionFade; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
sourceViewController.view.window?.layer.addAnimation(transition, forKey: "kCATransition")
sourceViewController.navigationController?.popViewControllerAnimated(false)
}
}
}
My Swift версия с дополнительной проверкой Offcourse!
let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
if let stView = storyboard.instantiateViewControllerWithIdentifier("STVC") as? STVC {
stView.modalTransitionStyle = UIModalTransitionStyle.CrossDissolve
self.navigationController?.presentViewController(stView, animated: true, completion: nil)
}
Просто убедитесь, что установить раскадровку идентификатор «Вид контроллер» в IB
То, что я должен был использовать раскадровку в Interface Builder, соединил два ViewController вам нужно, чтобы перейти к/с и назад (удерживайте нажатой клавишу ctrl и перетащите щелчок с начального контроллера представления в диспетчер представлений цели) и измените свойства segue. Я использовал следующие:
Затем я использовал следующее:
[self performSegueWithIdentifier:@"showMovieDetailSegue" sender:self];
, когда вы хотите, чтобы удалить его, просто назвать это от происхождения ViewController:
[self dismissViewControllerAnimated:YES completion:nil];
Простой и очень быстро.
Попробуйте этот.
let transition: CATransition = CATransition()
transition.duration = 0.4
transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
transition.type = kCATransitionFade
self.navigationController!.view.layer.addAnimation(transition, forKey: nil)
let vc = self.storyboard?.instantiateViewControllerWithIdentifier("vcID") as! My_ViewController
self.navigationController?.pushViewController(vc, animated: false)
Тяни/Поп UIViewController FadeIn/FadeOut в Swift 3 синтаксис, основанный на Eugene Braginets «s answer
class FadeInPushSegue: UIStoryboardSegue {
var animated: Bool = true
override func perform() {
let sourceViewController = self.source
let destinationViewController = self.destination
let transition: CATransition = CATransition()
transition.type = kCATransitionFade; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
sourceViewController.view.window?.layer.add(transition, forKey: "kCATransition")
sourceViewController.navigationController?.pushViewController(destinationViewController, animated: false)
}
}
class FadeOutPopSegue: UIStoryboardSegue {
override func perform() {
let sourceViewController = self.source
let transition: CATransition = CATransition()
transition.duration = 0.4
transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
transition.type = kCATransitionFade; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
sourceViewController.view.window?.layer.add(transition, forKey: "kCATransition")
_ = sourceViewController.navigationController?.popViewController(animated: false)
}
}
Вы должны выбрать какой-то ответ. Прошло 3 года. – Borzh