[xcode] 애니메이션없이 xcode에서 segue 푸시

저는 일반 스토리 보드를 사용하고 xcode에서 segues를 푸시하지만 다음보기를 슬라이드하지 않고 다음보기 만 표시하는 segue를 원합니다 (탭 막대를 사용하고 다음보기가 방금 나타날 때와 같이).

사용자 지정 segue를 추가 할 필요없이 일반 푸시 segues가 “slide”가 아닌 “appear”만 표시되도록하는 좋은 간단한 방법이 있습니까?

모든 것이 완벽하게 잘 작동합니다.보기 사이의 슬라이드 애니메이션을 제거하고 싶습니다.



답변

이 링크를 기반으로 사용자 지정 segue를 생성하여이를 수행 할 수있었습니다 .

  1. 새 segue 클래스를 만듭니다 (아래 참조).
  2. 스토리 보드를 열고 segue를 선택합니다.
  3. 클래스를 PushNoAnimationSegue(또는 당신이 부르기로 결정한 것)으로 설정하십시오.

Xcode에서 segue 클래스 지정

스위프트 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 용 인터페이스 빌더에서 “애니메이션”을 선택 취소 할 수 있습니다.

여기에 이미지 설명 입력


답변

Ian의 대답은 훌륭합니다!

누군가 필요하다면 다음은 Segue의 Swift 버전입니다.

SWIFT 5, 2020 년 5 월 업데이트

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

이것이 다른 사람에게 도움이되기를 바랍니다!


답변

다음은 애니메이션없이 ViewController 를 모달로 표시 하도록 조정 된 Swift 버전입니다 .

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를 사용하여 응답

“푸시”segue의 경우 :

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

“모달”segue의 경우 :

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);
    }
}

스토리 보드에서 사용자 지정 segue를 설정하고 클래스를 PushNoAnimationSegue 클래스로 설정해야한다는 점을 잊지 마십시오.