Я использую обычную раскадровку и нажимаю сегменты в xcode, но я хочу, чтобы сегменты отображались только в следующем представлении, а не в следующем представлении (например, когда вы используете панель вкладок и только что появляется следующее представление).
Есть ли хороший простой способ, чтобы обычные переходы push просто «появлялись», а не «скользили», без необходимости добавлять пользовательские переходы?
Все работает нормально, я просто хочу удалить эту анимацию слайдов между представлениями.
Ответы:
Я смог сделать это, создав собственный переход (на основе этой ссылки ).
PushNoAnimationSegue
(или как вы его решили назвать).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
источник
Вы можете снять флажок «Анимация» в Интерфейсном Разработчике для iOS 9.
источник
Identifier
имя.Ответ Яна отлично работает!
Вот Swift-версия Segue, если кому-то понадобится:
ОБНОВЛЕНО ДЛЯ SWIFT 5 МАЯ 2020
PushNoAnimationSegue.swift
import UIKit /// Move to the next screen without an animation class PushNoAnimationSegue: UIStoryboardSegue { override func perform() { if let navigation = source.navigationController { navigation.pushViewController(destination as UIViewController, animated: false) } }
источник
Теперь мне удалось это сделать, используя следующий код:
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];
Надеюсь, это поможет кому-то другому!
источник
Вот версия 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) } }
источник
ответ с помощью Swift3 -
для перехода "push":
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) } }
источник
Для всех, кто использует 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.
источник
Для меня самый простой способ сделать это:
UIView.performWithoutAnimation { self.performSegueWithIdentifier("yourSegueIdentifier", sender: nil) }
Доступно с iOS 7.0
источник
Я использую Visual Studio с Xamarin, и дизайнер не поставил галочку «Animates» в ответе 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"/>
источник
НАЖАТЬ БЕЗ АНИМАЦИИ: Swift Вот что у меня сработало.
import ObjectiveC private var AssociatedObjectHandle: UInt8 = 0 extension UIViewController { var isAnimationRequired:Bool { get { return (objc_getAssociatedObject(self, &AssociatedObjectHandle) as? Bool) ?? true } set { objc_setAssociatedObject(self, &AssociatedObjectHandle, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } } -------------------- SilencePushSegue -------------------- class SilencePushSegue: UIStoryboardSegue { override func perform() { if self.source.isAnimationRequired == false { self.source.navigationController?.pushViewController(self.destination, animated: false) }else{ self.source.navigationController?.pushViewController(self.destination, animated: true) } } }
Использование : Установите класс перехода из раскадровки, как показано на рисунке. установите для isAnimationRequired в вашем контроллере просмотра значение false, откуда вы хотите вызвать performSegue, если вы хотите отправить segue без анимации и вернуть значение true после вызова self.performSegue. Удачи....
DispatchQueue.main.async { self.isAnimationRequired = false self.performSegue(withIdentifier: "showAllOrders", sender: self); self.isAnimationRequired = true }
источник
Просто установите
animated
ЛОЖЬ наUINavigationController.pushViewController
в Swiftself.navigationController!.pushViewController(viewController, animated: false)
источник