애니메이션없이 xcode에서 segue 푸시
저는 일반 스토리 보드를 사용하고 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
iOS 9 용 인터페이스 빌더에서 "애니메이션"을 선택 취소 할 수 있습니다.
Ian의 대답은 훌륭합니다!
누군가가 필요하다면 다음은 Segue의 Swift 버전입니다.
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)
}
}
}
이제 다음 코드를 사용하여이 작업을 수행했습니다.
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 클래스로 설정해야한다는 점을 잊지 마십시오.
저에게 가장 쉬운 방법은 다음과 같습니다.
UIView.performWithoutAnimation {
self.performSegueWithIdentifier("yourSegueIdentifier", sender: nil)
}
iOS 7.0에서 사용 가능
I'm using Visual Studio w/ Xamarin, and the designer doesn't provide the "Animates" checkmark in dtochetto's answer.
Note that the XCode designer will apply the following attribute to the segue element in the .storyboard file: animates="NO"
I manually edited the .storyboard file and added animates="NO" to the segue element(s), and it worked for me.
Example:
<segue id="1234" destination="ZB0-vP-ctU" kind="modal" modalTransitionStyle="crossDissolve" animates="NO" identifier="screen1ToScreen2"/>
PUSH WITHOUT ANIMATION : Swift Here is what worked for me.
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)
}
}
}
Usage : Set the segue class from storyboard as shown in picture. set the isAnimationRequired from your viewcontroller to false from where you want to call performSegue, when you want to push segue without animation and set back to true after calling self.performSegue. Best of luck....
DispatchQueue.main.async {
self.isAnimationRequired = false
self.performSegue(withIdentifier: "showAllOrders", sender: self);
self.isAnimationRequired = true
}
Just set animated
false on UINavigationController.pushViewController
in Swift
self.navigationController!.pushViewController(viewController, animated: false)
참고 URL : https://stackoverflow.com/questions/16209113/push-segue-in-xcode-with-no-animation
'Programing' 카테고리의 다른 글
JS 개체를 양식 데이터로 변환 (0) | 2020.09.06 |
---|---|
Python을 사용하여 CSV 파일을 sqlite3 데이터베이스 테이블로 가져 오기 (0) | 2020.09.06 |
파일을 Base64String으로 변환하고 다시 다시 변환 (0) | 2020.09.06 |
PHP에서 HttpOnly 쿠키 사용을 어떻게 설정합니까? (0) | 2020.09.06 |
문자열 var [duplicate]로 사용자 지정 개체 속성 가져 오기 (0) | 2020.09.06 |