저는 일반 스토리 보드를 사용하고 xcode에서 segues를 푸시하지만 다음보기를 슬라이드하지 않고 다음보기 만 표시하는 segue를 원합니다 (탭 막대를 사용하고 다음보기가 방금 나타날 때와 같이).
사용자 지정 segue를 추가 할 필요없이 일반 푸시 segues가 “slide”가 아닌 “appear”만 표시되도록하는 좋은 간단한 방법이 있습니까?
모든 것이 완벽하게 잘 작동합니다.보기 사이의 슬라이드 애니메이션을 제거하고 싶습니다.
답변
이 링크를 기반으로 사용자 지정 segue를 생성하여이를 수행 할 수있었습니다 .
- 새 segue 클래스를 만듭니다 (아래 참조).
- 스토리 보드를 열고 segue를 선택합니다.
- 클래스를
PushNoAnimationSegue
(또는 당신이 부르기로 결정한 것)으로 설정하십시오.
스위프트 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
답변
답변
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 클래스로 설정해야한다는 점을 잊지 마십시오.