UIStoryboardSegue: доступ к анимированной собственности [дубликат]

Конечно, есть много таких подходов, как синхронный запрос, обещание, но из моего опыта я думаю, что вы должны использовать подход обратного вызова. Естественно, что асинхронное поведение Javascript. Итак, ваш фрагмент кода можно переписать немного иначе:

function foo() {
    var result;

    $.ajax({
        url: '...',
        success: function(response) {
            myCallback(response);
        }
    });

    return result;
}

function myCallback(response) {
    // Does something.
}
87
задан Richard 25 April 2013 в 08:47
поделиться

11 ответов

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

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];

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

6
ответ дан Richard 26 August 2018 в 00:08
поделиться

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

42
ответ дан dtochetto 26 August 2018 в 00:08
поделиться

ответьте с помощью 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)
    }
}
1
ответ дан elkorb 26 August 2018 в 00:08
поделиться

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

  1. Создайте новый класс segue (см. ниже).
  2. Откройте свою раскадровку и выберите сего.
  3. Установите класс в 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
139
ответ дан Ian 26 August 2018 в 00:08
поделиться

Для тех, кто использует 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 класс.

1
ответ дан JacobK 26 August 2018 в 00:08
поделиться

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

UIView.performWithoutAnimation { 

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

    }

Доступен с iOS 7.0

0
ответ дан LironXYZ 26 August 2018 в 00:08
поделиться

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

self.navigationController!.pushViewController(viewController, animated: false)
-1
ответ дан Michael 26 August 2018 в 00:08
поделиться

Вот версия 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)
    }

}
3
ответ дан n.Drake 26 August 2018 в 00:08
поделиться

PUSH БЕЗ АНИМАЦИИ: 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)
        }
    }
}

Использование: Установите класс segue из раскадровки, как показано на рисунке. установите для isAnimationRequired из вашего контроллера представления значение false, из которого вы хотите вызвать performSegue, когда вы хотите нажимать segue без анимации и возвращаться к true после вызова self.performSegue. Удачи ....

DispatchQueue.main.async {
                self.isAnimationRequired = false
                self.performSegue(withIdentifier: "showAllOrders", sender: self);
                self.isAnimationRequired = true
            }

0
ответ дан Usman 26 August 2018 в 00:08
поделиться

Я использую 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"/>
0
ответ дан Wes 26 August 2018 в 00:08
поделиться

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

Вот быстрая версия 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)
        }
    }

}
35
ответ дан zavié 26 August 2018 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: