এক্সকোডে কোনও অ্যানিমেশন ছাড়াই সিগস পুশ করুন


90

আমি সাধারণ স্টোরিবোর্ডিং ব্যবহার করছি এবং এক্সকোডে সেগগুলি পুশ করছি, তবে আমি এমন সিগগুলি রাখতে চাই যা কেবলমাত্র পরবর্তী ভিউ প্রদর্শিত হবে, পরবর্তী ভিউ স্লাইড না করে (যেমন আপনি যখন কোনও ট্যাব বার ব্যবহার করেন এবং পরবর্তী দৃশ্যটি ঠিক প্রদর্শিত হয়)।

কাস্টম সেগগুলি যুক্ত করার প্রয়োজন ছাড়াই সাধারণ ধাক্কা সেগুগুলি কেবল "উপস্থিত" এবং "স্লাইড" না করার সহজ উপায় আছে?

সবকিছু পুরোপুরি ঠিকঠাক কাজ করছে, আমি কেবল ভিউগুলির মধ্যে থাকা স্লাইড অ্যানিমেশনটি সরাতে চাই।


আমি কেবল ধাক্কা সিগিকে একটি মডেল সেগুতে পরিবর্তন করার চেষ্টা করেছি, কারণ এটি আমাকে অ্যানিমেশনটি সরিয়ে দিতে পারে, তবে আমার একটি শীর্ষস্থানীয় সরঞ্জামদণ্ডের সাথে একটি টেবিলভিউ রয়েছে, এবং সিগেলটিকে মডেলের সাথে সেট করা এই শীর্ষ বারটি সরিয়ে দেয় এবং আমি কোনও উপায় খুঁজে পাচ্ছি না I উপরের বারটি আবার যুক্ত করতে! সুতরাং আমার এমন একটি সমাধান দরকার যা রূপান্তরটিকে অ্যানিমেট করে না, তবে আমার টেবিলভিউটি ভেঙে দেয় না।
রিচার্ড

উত্তর:


143

আমি একটি কাস্টম সেগু তৈরি করে এটি করতে সক্ষম হয়েছি ( এই লিঙ্কের উপর ভিত্তি করে )।

  1. একটি নতুন সেগু ক্লাস তৈরি করুন (নীচে দেখুন)।
  2. আপনার স্টোরিবোর্ডটি খুলুন এবং সিগ নির্বাচন করুন।
  3. ক্লাসটি সেট করুন 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)
    }
}

উদ্দেশ্য গ

পুশনো অ্যানিমেশনসেশন

#import <UIKit/UIKit.h>

/*
 Move to the next screen without an animation.
 */
@interface PushNoAnimationSegue : UIStoryboardSegue

@end

পুশনো অ্যানিমেশনসেশন.মি

#import "PushNoAnimationSegue.h"

@implementation PushNoAnimationSegue

- (void)perform {

    [self.sourceViewController.navigationController pushViewController:self.destinationViewController animated:NO];
}

@end

মন্তব্য এবং ইনপুট জন্য ধন্যবাদ।
রিচার্ড

11
সেরা উত্তর. ব্যাক-অ্যানিমেশনের জন্য একই অর্জন সম্পর্কে কোনও ধারণা?
থমাস

4
একটি যাদুমন্ত্র মত কাজ করে. স্টোরিবোর্ডের বিভাগগুলি এটি করার জন্য এটি "সঠিক" উপায়।
জেফ রিচলি

4
উপরের উত্তরের জন্য কেউ কি পিছনের অ্যানিমেশনটি বন্ধ করে দিয়েছে?
ইমরান

4
সমাধান নয়, কাস্টম সেগু পুরো লেআউটকে ঠিক একটি মডেল পুশের মতো উপস্থাপন করে যখন আসল পুশ সেগু উইন্ডো।ফ্রেম নেভিগেশন কন্ট্রোলার ট্যাববারকন্ট্রোলার ইত্যাদি ... একটি মডেল সেগলের পরিবর্তে পুশ সেগুর মতো আচরণ করতে সেগটিকে কীভাবে কনফিগার করা হয়? ? বা ... 000 1.000.000 প্রশ্ন, STORYBOARDS ব্যবহার করে কোনও নিয়মিত সেগু কনফিগার করার সময় কীভাবে অ্যানিমেশনগুলি = NO নির্দিষ্ট করা যায় না
পেড্রো বোর্জেস

49

আপনি আইওএস 9 এর জন্য ইন্টারফেস বিল্ডারে "অ্যানিম্যাটস "টি চেক করতে পারেন

এখানে চিত্র বর্ণনা লিখুন


4
এটাই আসল প্রশ্নের উত্তর! অন্যান্য উত্তরগুলি দেখায় কীভাবে এটি আপত্তি / স্যুইফ্ট কোডে অর্জন করা যায়, যখন ডিটোচেটো কেবল এক্সকোড ব্যবহার করে (মূল প্রশ্নের অনুরোধ মতো) like
drpawelo

তবে আনইন্ড সেলগের জন্য এটি কাজ করে বলে মনে হচ্ছে না
নিকোলাস মানজিনি

4
এটিই সেরা এবং দ্রুত সমাধান, দুর্ভাগ্যক্রমে এটি আইওএস ৮ এ কাজ করে না
EricH206

4
@ ড্যানিয়েলটি হতে পারে, আপনি স্টোরিবোর্ডে 2 টি সিগুকে টেনে আনতে পারেন, একটিতে অ্যানিমেশন রয়েছে এবং অন্যটির অ্যানিমেশন নেই। তাদের আলাদা Identifierনাম দিন।
এচোলিউ

4
নোট করুন যে XCode সবে .storyboard ফাইলে সেগ এলিমেন্টে একটি বৈশিষ্ট্য যুক্ত করেছে। আপনি স্টোরবোর্ড ফাইলটি ম্যানুয়ালি সম্পাদনা করতে পারেন এবং আপনি যদি ভিজ্যুয়াল স্টুডিও ব্যবহার করছেন এবং চেকমার্কটি ডিজাইনারে উপলভ্য নয় তবে আপনি যে সেগমেন্টগুলি যত্নবান সেগুলিতে অ্যানিমেটস "" না "যুক্ত করতে পারেন।
ওয়েস

35

আয়ানের উত্তর দুর্দান্ত কাজ করে!

এখানে কারোর যদি প্রয়োজন হয় তবে সেগের একটি সুইফ্ট সংস্করণ এখানে রয়েছে:

সুইফট 5, মে 2020 এর জন্য আপডেট হয়েছে

পুশনো অ্যানিমেশনসেইগ.সুইফ্ট

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

4
সম্ভবত সুইফ্ট সংস্করণের কারণে আমার "যেমন!" দরকার ছিল আপনি দুটি জায়গায় "হিসাবে" পরিবর্তে এগুলি ব্যবহার করেন।
কার্লোস

4
এইচএম সম্ভবত সুইফট ১.২ এ? আমি এক্সকোড 7 বিটা 1 তে সুইফট 2.0 দিয়ে পরীক্ষা করেছি এবং এটি কোনও সতর্কতা ছাড়াই সংকলিত।
zavié

6

আমি এখন নিম্নলিখিত কোড ব্যবহার করে এটি করতে পরিচালিত করেছি:

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

আশাকরি এটি কাউকে সাহায্য করবে!


আপনি এটি কেবলমাত্র একটি ইউআইবাটন বা যা কিছু এর ক্রিয়াতে যুক্ত করতে পারেন। যদি আপনি কোনও অ্যানিমেশন ছাড়াই কোনও নতুন ভিউ কন্ট্রোলারে ঝাঁপ দিতে চান তবে আপনি ব্যবহার করতে পারেন: - শূন্য (আপনার ইউআইবাটনঅ্যাকশন) {ক্রেডিটসভিউ কনট্রোলার * ক্রেডিটপেজ = [সেলফ স্টোরবোর্ড ইনস্ট্যানিয়েটিভ ভিউ কন্ট্রোলার উইথআইডিটিফায়ার: @ "ক্রেডিট"]; [স্ব-নেভিগেশন কন্ট্রোলার পুশভিউ কনট্রোলার: ক্রেডিটপেজ অ্যানিমেটেড: কোন]; }
রিচার্ড

এটি এমনকি প্রশ্নের উত্তর দিচ্ছে না। আপনি এখানে সিগু ব্যবহার করছেন না!
KIDdAe

4

অ্যানিমেশন ছাড়াই একটি ভিউকন্ট্রোলারকে মডেল উপস্থাপন করতে এখানে সুইফট সংস্করণটি রূপান্তরিত হয়েছে :

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

}

4
এই কোডটি @ জাভি উত্তর থেকে অনুলিপি করা হয়েছে, কিছু যোগ না করে, তবে এটি আরও খারাপ:
বিকল্পগুলির

এটি @ জাভিয়ের জবাব থেকে আলাদা কারণ এটি দেখায় যে কীভাবে অ্যানিমেশন ছাড়াই ভিউকন্ট্রোলারটি উপস্থাপন করতে পারেন reference প্রশ্নের সাথে কিছুটা সম্পর্কিত হওয়ায় রেফারেন্স হিসাবে এটি এখানে রাখা ভাল।
n. ড্রাক

2

সুইফট 3 ব্যবহার করে উত্তর দিন -

"ধাক্কা" 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

যামারিন আইওএস ব্যবহারকারী যে কোনও ব্যক্তির জন্য আপনার কাস্টম সেগু ক্লাসটি দেখতে এটির মতো হওয়া দরকার:

[Register ("PushNoAnimationSegue")]
public class PushNoAnimationSegue : UIStoryboardSegue
{
    public PushNoAnimationSegue(IntPtr handle) : base (handle)
    {

    }

    public override void Perform ()
    {
        SourceViewController.NavigationController.PushViewController (DestinationViewController, false);
    }
}

আপনার স্টোর বোর্ডে একটি কাস্টম সেগু সেট এবং পুশনো অ্যানিমেশনসেইগু ক্লাসে শ্রেণি সেট করা দরকার তা ভুলে যাবেন না।


0

আমার পক্ষে এটি করার সবচেয়ে সহজ উপায় হ'ল:

UIView.performWithoutAnimation { 

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

    }

আইওএস 7.0 থেকে উপলব্ধ


অভিযোজিত সেগুগুলি ব্যবহার করা হলে আমি বিশ্বাস করি যদিও পারফর্ম উইথআউট অ্যানিমেশন অ্যানিমেশনগুলি অক্ষম করে, পারফরম্যান্স করার পরে এটি পূর্বে থাকলে তা আবার তাদের অক্ষম করে না।
ম্যালহাল

তবে আপনি একটি ইউআইএসটিরিবোর্ডসিয়েগ সাবক্লাস তৈরি করে এবং সম্পাদনের আগে আবার অ্যানিমেশনগুলি অক্ষম করে এটির চারপাশে কাজ করতে পারেন (উদাহরণস্বরূপ কনস্ট্রাক্টর তারা অক্ষম আছে কিনা তা পরীক্ষা করে এটি ব্যবহার করে এটি কোনও সম্পত্তিতে সঞ্চয় করে)।
ম্যালহাল

0

আমি ভিজ্যুয়াল স্টুডিও ডাব্লু / জ্যামারিন ব্যবহার করছি, এবং ডিজাইনার dtochetto এর উত্তরে "অ্যানিম্যাটস" চেকমার্ক সরবরাহ করে না।

নোট করুন যে এক্সকোড ডিজাইনার। স্টিরিবোর্ড ফাইলে সেগ এলিমেন্টের জন্য নিম্নলিখিত বৈশিষ্ট্যটি প্রয়োগ করবেন: অ্যানিমেটস = "না"

আমি ম্যানুয়ালি। স্টোরবোর্ড ফাইলটি সম্পাদনা করেছি এবং সেগমেন্ট উপাদানগুলিতে অ্যানিমেটগুলি "" না "যুক্ত করেছি এবং এটি আমার পক্ষে কাজ করেছে।

উদাহরণ:

 <segue id="1234" destination="ZB0-vP-ctU" kind="modal" modalTransitionStyle="crossDissolve" animates="NO" identifier="screen1ToScreen2"/>

0

অ্যানিমেশন ছাড়াই পুশ করুন: সুইফট এখানে আমার জন্য কাজ করেছে।

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

ব্যবহার : ছবিতে প্রদর্শিত স্টোরিবোর্ড থেকে সেগু ক্লাস সেট করুন। যখন আপনি অ্যানিমেশন ছাড়াই সিগেস চাপতে চান এবং সেলফি.পর্ফর্মসিয়েগ কল করার পরে সত্যে ফিরে যেতে চান, এমন জায়গা থেকে অ্যানিমেশনআরকিউয়ারটি আপনার ভিউকন্ট্রোলার থেকে মিথ্যাতে সেট করুন self ভাগ্য সুপ্রসন্ন হোক....

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

ছবিতে প্রদর্শিত স্টোরিবোর্ড থেকে সেগু ক্লাস সেট করুন।


-1

শুধু সেট animated মিথ্যা উপর UINavigationController.pushViewControllerসুইফট মধ্যে

self.navigationController!.pushViewController(viewController, animated: false)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.