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)