Push segue в xcode без анимации

Я использую обычную раскадровку и нажимаю segues в xcode, но я хочу, чтобы segues просто отображался в следующем представлении, а не скользил следующий вид (например, когда вы используете панель вкладок, и появляется следующее представление).

Есть ли простой простой способ, чтобы обычный push-сегмент просто "появлялся", а не "слайд", без необходимости добавлять пользовательские сегменты?

Все работает отлично, я просто хочу удалить эту анимацию слайдов между представлениями.

Ответ 1

Теперь мне удалось сделать это, используя следующий код:

CreditsViewController *creditspage = [self.storyboard instantiateViewControllerWithIdentifier:@"Credits"];
[UIView beginAnimations:@"flipping view" context:nil];
[UIView setAnimationDuration:0.75];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:YES];
[self.navigationController pushViewController:creditspage animated:NO];
[UIView commitAnimations];

Надеюсь, это поможет кому-то еще!

Ответ 2

Я смог сделать это, создав пользовательский segue (на основе эта ссылка).

  • Создайте новый класс segue (см. ниже).
  • Откройте раскадровку и выберите сег.
  • Задайте класс PushNoAnimationSegue (или все, что вы решили назвать).

Укажите класс segue в Xcode

Swift 4

import UIKit

/*
 Move to the next screen without an animation.
 */
class PushNoAnimationSegue: UIStoryboardSegue {

    override func perform() {
        self.source.navigationController?.pushViewController(self.destination, animated: false)
    }
}

Цель C

PushNoAnimationSegue.h

#import <UIKit/UIKit.h>

/*
 Move to the next screen without an animation.
 */
@interface PushNoAnimationSegue : UIStoryboardSegue

@end

PushNoAnimationSegue.m

#import "PushNoAnimationSegue.h"

@implementation PushNoAnimationSegue

- (void)perform {

    [self.sourceViewController.navigationController pushViewController:self.destinationViewController animated:NO];
}

@end

Ответ 3

Вы можете снять флажок "Анимации" в "Интерфейс-Builder" для iOS 9

введите описание изображения здесь

Ответ 4

Ответ Ян отлично работает!

Здесь Swift версия Segue, если кому-то нужно:

PushNoAnimationSegue.swift

import UIKit

/// Move to the next screen without an animation.
class PushNoAnimationSegue: UIStoryboardSegue {

    override func perform() {
        let source = sourceViewController as UIViewController
        if let navigation = source.navigationController {
            navigation.pushViewController(destinationViewController as UIViewController, animated: false)
        }
    }

}

Ответ 5

Здесь версия Swift адаптирована для модально присутствующего ViewController без анимации:

import UIKit

/// Present the next screen without an animation.
class ModalNoAnimationSegue: UIStoryboardSegue {

    override func perform() {
        self.sourceViewController.presentViewController(
            self.destinationViewController as! UIViewController,
            animated: false,
            completion: nil)
    }

}

Ответ 6

Для тех, кто использует Xamarin iOS, ваш пользовательский класс segue должен выглядеть следующим образом:

[Register ("PushNoAnimationSegue")]
public class PushNoAnimationSegue : UIStoryboardSegue
{
    public PushNoAnimationSegue(IntPtr handle) : base (handle)
    {

    }

    public override void Perform ()
    {
        SourceViewController.NavigationController.PushViewController (DestinationViewController, false);
    }
}

Не забывайте, что вам все равно нужно настроить пользовательский сегмент в своей доске объявлений и установить класс в класс PushNoAnimationSegue.

Ответ 7

ответ используя Swift3 -

для "push" segue:

class PushNoAnimationSegue: UIStoryboardSegue
{
    override func perform()
    {
       source.navigationController?.pushViewController(destination, animated: false)
    }
}

для "модального" сегмента:

class ModalNoAnimationSegue: UIStoryboardSegue
{
    override func perform() {
        self.source.present(destination, animated: false, completion: nil)
    }
}

Ответ 8

Для меня самый простой способ сделать это:

UIView.performWithoutAnimation { 

        self.performSegueWithIdentifier("yourSegueIdentifier", sender: nil)

    }

Доступно с iOS 7.0

Ответ 9

Я использую Visual Studio w/Xamarin, и разработчик не предоставляет галочку "Анимация" в ответе dtochetto.

Обратите внимание, что конструктор XCode применит следующий атрибут к элементу segue в файле .storyboard: animates = "NO"

Я вручную отредактировал файл .storyboard и добавил animates = "NO" к элементу segue, и он работал у меня.

Пример:

 <segue id="1234" destination="ZB0-vP-ctU" kind="modal" modalTransitionStyle="crossDissolve" animates="NO" identifier="screen1ToScreen2"/>

Ответ 10

Просто установите animated false на UINavigationController.pushViewController в Swift

self.navigationController!.pushViewController(viewController, animated: false)