"ভিউ কন্ট্রোলার থেকে" ইউআইভিউউকন্ট্রোলার কনটেক্সট ট্রান্সশিশন ব্যবহার করে অদৃশ্য হয়ে যায়


105

আমার একটি সমস্যা হয়েছে এবং আমি এটি নীচে বর্ণনা করেছি।

আমি UIViewControllerContextTransitioningকাস্টম স্থানান্তরের জন্য ব্যবহার করছি ।

আমার কাছে 2 টি ভিউ কন্ট্রোলার রয়েছে, প্রথম দেখার নিয়ামক এবং দ্বিতীয় দেখার নিয়ামক।

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

তবে আমি প্রথম দেখার নিয়ামকটি দেখতে পাচ্ছি না এবং আমি দ্বিতীয় দেখার নিয়ামকের নীচে কেবল কালো পর্দা দেখতে পাচ্ছি।

-(void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext{
    self.transitionContext = transitionContext;
    if(self.isPresenting){
        [self executePresentationAnimation:transitionContext];
    }
    else{
       [self executeDismissalAnimation:transitionContext];
    }
  }

-(void)executePresentationAnimation:(id<UIViewControllerContextTransitioning>)transitionContext{
     UIView* inView = [transitionContext containerView];
     UIViewController* toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];

     UIViewController* fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];

     CGRect offScreenFrame = inView.frame;
     offScreenFrame.origin.y = inView.frame.size.height;
     toViewController.view.frame = offScreenFrame;

    toViewController.view.backgroundColor = [UIColor clearColor];
    fromViewController.view.backgroundColor = [UIColor clearColor];
    inView.backgroundColor = [UIColor  clearColor];
    [inView insertSubview:toViewController.view aboveSubview:fromViewController.view];
     // [inView addSubview:toViewController.view];
    CFTimeInterval duration = self.presentationDuration;
    CFTimeInterval halfDuration = duration/2;

    CATransform3D t1 = [self firstTransform];
    CATransform3D t2 = [self secondTransformWithView:fromViewController.view];

    [UIView animateKeyframesWithDuration:halfDuration delay:0.0 options:UIViewKeyframeAnimationOptionCalculationModeLinear animations:^{

    [UIView addKeyframeWithRelativeStartTime:0.0f relativeDuration:0.5f animations:^{
        fromViewController.view.layer.transform = t1;
    }];

    [UIView addKeyframeWithRelativeStartTime:0.5f relativeDuration:0.5f animations:^{
        fromViewController.view.layer.transform = t2;
    }];
    } completion:^(BOOL finished) {
    }];


    [UIView animateWithDuration:duration delay:(halfDuration - (0.3*halfDuration)) usingSpringWithDamping:0.7f initialSpringVelocity:6.0f options:UIViewAnimationOptionCurveEaseIn animations:^{
        toViewController.view.frame = inView.frame;
    } completion:^(BOOL finished) {
        [self.transitionContext completeTransition:YES];
    }];
}

যখন [self.transitionContext completeTransition:YES];ডাকা হয়, হঠাৎ করে প্রথম ভিউ কন্ট্রোলার অদৃশ্য হয়ে যায় এবং দ্বিতীয় ভিউ নিয়ন্ত্রকের নীচে কালো পর্দা প্রদর্শিত হয়।

কারও কি ধারণা আছে? ধন্যবাদ।

উত্তর:


98

আমার এখানেও একই সমস্যা ছিল - আইওএস 8-তে বাগের মতো দেখতে আমি একটি রাডার দিয়েছি ।

আমি ব্যবহৃত প্রকাশ দৃশ্য অনুক্রমের পরিদর্শন পর্দা পরে কালো যায়। কীটি UIWindowপুরোপুরি খালি - কোনও দৃশ্যক্রম নয়!

Reveal'd

আমি কিছুটা ঘুরে দেখলাম এবং মনে হচ্ছে সহজ মামলার জন্য খুব সহজ কাজ রয়েছে। আপনি কেবল toViewControllerকী উইন্ডোটির একটি সংক্ষিপ্তসার হিসাবে এর দর্শনটিকে পুনরায় যুক্ত করতে পারেন :

transitionContext.completeTransition(true)
UIApplication.sharedApplication().keyWindow!.addSubview(toViewController.view)

আমি চেক করেছি এবং কী উইন্ডোটি rootViewControllerএখনও সঠিকভাবে সেট করা আছে, তাই এটি ভাল। আমি নিশ্চিত নই যে আপনি যদি ইতিমধ্যে উপস্থাপিত মডেল কন্ট্রোলারের মধ্যে থেকে আপনার কন্ট্রোলার উপস্থাপন করেন তবে কী হবে, তাই আরও জটিল ক্ষেত্রে আপনার চারপাশে পরীক্ষা করতে হবে।


2
আমি এই সমস্যাটিও দেখেছি। আইওএস 8, ভিউ এবং টুভিউ অ্যাক্সেসের জন্য একটি নতুন পদ্ধতি এবং কীগুলি প্রবর্তন করেছে (দ্রষ্টব্য: নিয়ামকটি দেখুন না) এটি প্রদর্শিত হয় যদিও এই রেফারেন্সগুলি স্থানান্তরের সময় হারিয়ে যায় নি। আপনি এগুলি কনটেইনার ভিউতে যুক্ত করতে পারেন যেমন আপনি যদি দেখেন যে এগুলি কেবলমাত্র নিয়ন্ত্রণ কন্ট্রোলার থেকে তাদের পুনরুদ্ধার করে।
তাপী

1
আমার নেভিগেশন নিয়ন্ত্রকের দৃশ্যে ভিউডিডলয়েডে সাবভিউ যুক্ত করার চেষ্টা করার সময় আমি অনুরূপ আইওএস 8 অদ্ভুততা দেখছিলাম। কী উইন্ডোতে নেভিগেশনকন্ট্রোলারের ভিউ পুনরায় যুক্ত করা কৌশলটি দেখে মনে হয়েছিল, অনেক ধন্যবাদ, অ্যাশ!
টাবার

1
আমি এখনও এটি GM তে দেখছি (এবং এই ফিক্সটি এখনও কার্যকর)। অন্যরা কি একই রকম দেখছেন? এটি কি কেবল এপিআই-তে পরিবর্তন?
rjkaplan

21
আমি দেখতে পেয়েছি যে আপনি সেট করলে এই বাগ (এবং আরও অনেক!) অদৃশ্য হয়ে যায় modalPresentationStyle = UIModalPresentationFullScreen। আপনি অবশ্যই আপনার কাস্টম ট্রানজিশন অ্যানিমেশন পান।
ক্রিস

1
ধন্যবাদ @ আশফুরো। এটি ঠিক না হওয়া পর্যন্ত দুর্দান্ত কাজ!
কান্দেলভিজায়

78

আমি মনে করি এর পিছনে যুক্তিটি আরও ভালভাবে ব্যাখ্যা করা উচিত।

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

আইওএস 7-এ সিস্টেম সর্বদা নিয়ন্ত্রকদের দৃষ্টিভঙ্গি প্রদর্শন করে যা প্রেজেন্টেশনের সাথে জড়িত থাকে (উপস্থাপিত এবং উপস্থাপিত হয়) ট্রানজিশনটি স্বয়ংক্রিয়ভাবে অ্যানিমেটিং শেষ হওয়ার পরে তাদের আসল জায়গায় উপস্থিত হয়। আইওএস 8-তে কিছু উপস্থাপনা শৈলীর জন্য আর হয় না।

নিয়মটি খুব সহজ: অ্যানিমেটর কেবল উপস্থাপিত ভিউ কন্ট্রোলারের দৃষ্টিভঙ্গিটিই পরিচালনা করতে পারে যদি রূপান্তরের শেষের মধ্যে যদি সেই দৃশ্যের নিয়ন্ত্রণকারীর দৃষ্টিভঙ্গিটি গোপন (দৃশ্যক্রমক্রম থেকে সরানো হয়) হয়ে যায় । অন্য কথায় এর অর্থ হ'ল প্রাথমিক উপস্থাপনা অ্যানিমেশনটি শেষ হওয়ার পরে কেবল উপস্থাপিত ভিউ কন্ট্রোলারের দৃশ্য দৃশ্যমান হবে এবং উপস্থাপিত দৃশ্য নিয়ন্ত্রণকারীর দৃষ্টিভঙ্গি নয়। উদাহরণস্বরূপ আপনি যদি ভিউ কন্ট্রোলারের দৃশ্যের অস্বচ্ছতাটিকে 50% এ উপস্থাপন করেন এবং ইউআইমোডালপ্রেজেন্টেশনফুলস্ক্রিন ব্যবহার করেন তবে আপনি উপস্থাপকের নীচে উপস্থাপনা দৃশ্যটির নিয়ন্ত্রণ দেখতে পারবেন না তবে আপনি যদি ইউআইমোডালপ্রেজেন্টেশন ওভারফুলস্ক্রিন ব্যবহার করেন তবে আপনি (ইউআইপিভাইভারেশনকন্ট্রোলারের shouldRemovePresentersViewপদ্ধতিটি নির্দিষ্ট করার জন্য দায়ী)।

অ্যানিমেটারকে কেন সব সময় উপস্থাপিত ভিউ কন্ট্রোলারের দৃষ্টিভঙ্গি ম্যানিপুলেট করার অনুমতি দেয় না? প্রথমত, পুরো উপস্থাপনা জীবনচক্র চলাকালীন অ্যানিমেশনটি শেষ হওয়ার পরে যদি উপস্থাপিত ভিউ কন্ট্রোলারের দৃশ্য দৃশ্যমান থাকে তবে এটিকে একেবারে সঞ্চার করার প্রয়োজন নেই - এটি কেবল যেখানে রয়েছে সেখানেই থেকে যায়। দ্বিতীয়ত, যদি এই দৃশ্যের নিয়ামকের মালিকানা উপস্থাপনা নিয়ন্ত্রকের কাছে স্থানান্তরিত হয় তবে উপস্থাপনা নিয়ামক সম্ভবত যখন ওরিয়েন্টেশন পরিবর্তনের সময় প্রয়োজন হয় যখন নিয়ন্ত্রণকারীর দর্শনটি কীভাবে বিন্যাস করতে হয় তা জানেন না, তবে উপস্থাপক প্রদর্শনের নিয়ামকটির মূল মালিক এটি করেন ।

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

viewControllerForKey: দূরে যায় না, এটি এখনও ব্যবহার করা যেতে পারে যদি কন্ট্রোলারগুলির প্রত্যক্ষ অ্যাক্সেসের প্রয়োজন হয় তবে অ্যানিমেটরটিকে এনিমেট করার জন্য প্রয়োজনীয় দৃষ্টিভঙ্গি সম্পর্কে কোনও অনুমান করা উচিত নয়।

আপনি যখন অ্যানিমেটরের কনটেইনার ভিউয়ের মধ্যে স্পষ্টভাবে এটি স্থাপন করেন তখন অদৃশ্য হয়ে যাওয়া উপস্থাপনা ভিউ কন্ট্রোলারের দৃশ্যের সাথে কোনও সমস্যা সঠিকভাবে সমাধানের জন্য আপনি করতে পারেন এমন অনেকগুলি বিষয় রয়েছে:

  1. যদি উপস্থাপনামূলক ভিউ কন্ট্রোলারের দৃষ্টিভঙ্গিকে অ্যানিমেটেড করার প্রয়োজন না হয় তবে viewForKey:সরাসরি নিয়ামকের দৃষ্টিভঙ্গি সরাসরি দেখার জন্য পৌঁছানোর পরিবর্তে প্রাণবন্ত হওয়ার জন্য ভিউগুলি পেতে ব্যবহার করুন । viewForKey:শূন্য বা সম্পূর্ণ ভিন্ন মতামত ফিরে আসতে পারে।

  2. আপনি যদি উপস্থিত উপস্থাপনা কন্ট্রোলারদের দৃষ্টিভঙ্গি সঞ্চার করতে চান তবে আপনার UIModalPresentationFullScreenস্টাইল ব্যবহার বিবেচনা করা উচিত বা ফিরে আসার UIModalPresentationCustomসাথে আপনার নিজের ইউআইপিভাইভারেশনকন্ট্রোলারের সাবক্লাস ব্যবহার করা এবং প্রয়োগ করা উচিত । প্রকৃতপক্ষে, এই পদ্ধতির প্রয়োগটি সংজ্ঞায়িত অভ্যন্তরীণ উপস্থাপনা কন্ট্রোলার এবং শৈলীগুলির মধ্যে পৃথক যে আপনাকে পরবর্তীতে কাস্টম উপস্থাপনা কন্ট্রোলার ব্যবহার করতে দেয় সেগুলির মধ্যে প্রধান পার্থক্য ।shouldRemovePresentersViewYESUIModalPresentationFullScreenUIModalPresentationCustom

  3. অন্যান্য সমস্ত বিরল ক্ষেত্রে আপনাকে উপস্থাপনার ভিউ কন্ট্রোলারের দৃষ্টিভঙ্গিটিকে অন্যান্য উত্তর হিসাবে প্রস্তাবিত হিসাবে তার মূল স্থানে ফিরিয়ে দিতে হবে।


2
কারণ সুপার-অদ্ভুত এই কোড উপর নির্ভর viewControllerForKey:এর viewগুলি শুধুমাত্র যখন viewForKey:আয় Nil, এবং আমি এখনও ছিল নিজে উইন্ডোতে এটি পুনরায় যোগ করুন। আপনার কি এই কার্যবিধি ছাড়া কোডের কাজ করার উদাহরণ রয়েছে?
অ্যাশ ফুরো 21

ঠিক আছে, যদি viewForKey:শোধ করে তবে আপনার অ্যানিমেটরের মধ্যে যদি এটি থেকে সরিয়ে দেওয়া হয় তবে আপনাকে অবশ্যই উইন্ডোতে উপস্থাপনার ভিউ কন্ট্রোলারের দৃশ্যটি পুনরায় যুক্ত করতে হবে। ক্ষেত্রে ভিউরকি বাস্তব দৃশ্য নিয়ন্ত্রণকারীর দর্শনটি ফিরিয়ে দেয় তবে সেই দর্শনটি সরিয়ে নেওয়া নিরাপদ কারণ উপস্থাপনা জীবনকাল শেষ হওয়ার পরে ইউআইকিট এটিকে তার মূল অবস্থানে ফিরিয়ে আনবে।
egdmitry

এই সমস্যার পিছনে যুক্তি ব্যাখ্যা করার জন্য আপনাকে ধন্যবাদ। তুমি একদমই সঠিক. দৃশ্যের স্থান পরিবর্তন না করে দৃশ্যের পদের অবস্থানটিতে স্থানান্তর করা স্পষ্টতই এটি অদৃশ্য হয়ে যাবে (আইওএস 8 পোস্ট করুন এবং আমি এখনই আইওএস 10 এর সাথে কাজ করছি!) স্পষ্ট করার জন্য ধন্যবাদ।
ক্লে এলিস

1
আপনার স্পষ্টতার জন্য ধন্যবাদ egdmitry। যা অন্য একটি প্রশ্ন উত্থাপন করে তা হল: আপনি কীভাবে আমার মতামত উপস্থাপনের মতো প্রকাশের বাস্তবায়ন করবেন বলে মনে করেন ? আজকাল তাদের মধ্যে প্রচলিত একটি যেখানে উপস্থাপিত দৃশ্যগুলি নীচে উপস্থাপিত দৃশ্যটি দেখানোর জন্য আংশিকভাবে স্লাইড হয়? এই দৃশ্যে উপস্থাপিত এবং উপস্থাপিত উভয় মতামতই অনস্ক্রিন হওয়া দরকার এবং উপস্থাপনা করা দৃশ্যটি এক অ্যানিমেটেড।
Andrea

70

আইওএস 8-এ, আপনাকে অবশ্যই ভিউ কন্ট্রোলারদের দ্বারা ফিরে viewForKey:আসা .viewসম্পত্তিগুলির পরিবর্তে ফিরে আসা ভিউগুলি পরিচালনা করতে হবে viewControllerForKey:। এটি বিটা ডকুমেন্টেশন থেকে বিশেষভাবে পরিষ্কার নয়, তবে আপনি যদি ইউআইভিউউকন্ট্রোলার ট্রান্সফিশনিংয়ের উত্সটি সন্ধান করেন তবে আপনি উপরে এই মন্তব্যটি দেখতে পাবেন viewControllerForKey::

// Currently only two keys are defined by the
// system - UITransitionContextToViewControllerKey, and
// UITransitionContextFromViewControllerKey.
// Animators should not directly manipulate a view controller's views and should
// use viewForKey: to get views instead.
- (UIViewController *)viewControllerForKey:(NSString *)key;

সুতরাং এর ফ্রেম ইত্যাদির পরিবর্তে পরিবর্তনের toViewController.viewমানটি ব্যবহার করুন [transitionContext viewForKey:UITransitionContextToViewKey]

যদি আপনার অ্যাপ্লিকেশনটির আইওএস 7 এবং / অথবা এক্সকোড 5 সমর্থন করা দরকার থাকে তবে আপনি ইউআইভিউকন্ট্রোলারে নিম্নলিখিতগুলির মতো একটি সাধারণ বিভাগের পদ্ধতি ব্যবহার করতে পারেন:

- (UIView *)viewForTransitionContext:(id<UIViewControllerContextTransitioning>)transitionContext
{
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
    if ([transitionContext respondsToSelector:@selector(viewForKey:)]) {
        NSString *key = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey] == self ? UITransitionContextFromViewKey : UITransitionContextToViewKey;
        return [transitionContext viewForKey:key];
    } else {
        return self.view;
    }
#else
    return self.view;
#endif
}

তারপরে, আপনার toViewControllerএবং fromViewControllerযথারীতি পান তবে ব্যবহার করে দেখুন [toViewController viewForTransitionContext:transitionContext]

সম্পাদনা করুন: একটি বাগ দেখা যাচ্ছে, যেখানে উপস্থিত ভিউ কন্ট্রোলারের দৃষ্টিভঙ্গি ফিরে আসার সময় শূন্য viewForKey, যা আপনাকে এমন মডেল ট্রানজিশনগুলি করা থেকে বিরত রাখে যা উপস্থাপনার দৃশ্যকে একেবারে অ্যানিমেটেড করে তোলে (যেমন স্লাইডিং বা অনুভূমিক উল্টানো)। আমি iOS8 এর জন্য বাগের জন্য একটি বাগ দায়ের করেছি: // 17961976 ( http://openradar.appspot.com/radar?id=5210815787433984 )। এছাড়াও নমুনা প্রকল্পটি http://github.com/bcherry/TransitionBugদেখুন

সম্পাদনা 2: ইউআইমোডালপ্রেজেন্টেশনফুলস্ক্রিন ব্যবহার করে এই পরামর্শটির জন্য গ্র্যাবলিকে ধন্যবাদ। সম্ভবত এটি কোনও বাগ নয়। অ্যাপল অভিপ্রায় করতে পারে যে ইউআইএমডালপ্রেসিভেশন কাস্টম কেবলমাত্র আগত মডালের ভিউটি পরিবর্তন করে। আপনি যদি বহির্গামী ভিউটি সংশোধন করতে চান তবে আপনার নতুন দর্শনটির সম্পূর্ণ স্ক্রিন উপস্থাপনা গ্যারান্টি দেওয়া দরকার? যাই হোক না কেন, আপনার ব্যবহার করা উচিত viewForKeyএবং ইউআইমোডালপ্রেজেন্টেশন ফুলস্ক্রিন।


2
ভিউফোর্কে বাগটি আমাকে পাগল করছে! - ফাইল করার জন্য ধন্যবাদ ইউআইটিআরসিএনসিসটেক্সটওভিউ কনট্রোলারকি থেকে আমার রূপান্তর FWIW সূক্ষ্মভাবে কাজ করছে, তবে আমার রূপান্তরটি কেবলমাত্র পুরো ভিউতে রূপান্তর প্রয়োগ করছে applying manipulatingভিসি মতামত হিসাবে এটি ব্যাখ্যা করা উচিত কিনা তা আমি নিশ্চিত নই ...
ম্যাথিউএস

1
বাহ - বাদাম আমি এটি ভিন্নতার মধ্যে দেখিনি - সম্ভবত এটি খুব সামান্য মন্তব্য বলে comment অ্যাপল যখন এ জাতীয় স্টান্টটি টানত তখন সত্যিই হতাশাবোধ করে। আপনার রাডার সম্পর্কে আঙ্গুলগুলি অতিক্রম করেছে।
অ্যাশ ফুরো

আমি viewForKeyজিএম-তে বাগটিও দেখছি । অন্যরাও কি তাই? আপনি কি এর জন্য যুক্তিসঙ্গত কাজ খুঁজে পেয়েছেন?
rjkaplan

2
আমি - viewForKey// ভিউফোরকি'র মন্তব্য অনুসারে ভেবেছিলাম : শূন্যতা ফিরে আসতে পারে যা নির্দেশ করে যে অ্যানিমেটার সংশ্লিষ্ট ভিউ কন্ট্রোলারের দৃষ্টিভঙ্গিটি পরিচালনা করতে পারে না। ফিরে nilআসা কোনও বাগ নয়।
কেন কুয়ান

4
পছন্দ করেছেন ইউআইএমওডালপ্রেজিশনফুলস্ক্রিন ব্যবহার করার সময়, viewForKeyদর্শন থেকে এবং দেখার জন্য ফিরে আসে। সুতরাং এটি ইচ্ছাকৃত যে এটি ইউআইমোডালপ্রেজিশনকাস্টমটির জন্য শূন্য করে returns আমি আমার বাগের প্রতিবেদনটি আপডেট করছি এবং অ্যাপলের কাছ থেকে যদি এটির বিষয়ে শুনি তবে এখানে আবার পোস্ট করব।
ব্যাচারি 21

24

modalPresentationStyleইউআইমোডালপ্রেজিশনকাস্টমটিতে সেট না করে আমার জন্য বিষয়টি স্থির করে।

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

এখনও অবধি কাজ করে, কেবল এটি অ-ইন্টারেক্টিভ অ্যানিমেশনগুলির জন্য চেষ্টা করে দেখেছি।


1
কি দারুন. এটা এটা! আমি iOS7 & 8 এ মডেলপ্রেজেন্টেশন স্টাইল ছাড়াই পরীক্ষা করেছি এবং এটি উভয়ের মধ্যেই সন্ধান করে। ধন্যবাদ !!
আহ রুন মুন

1
ধন্যবাদ! এই ব্যবহার সঙ্গে মিলিত viewForKey:পরিবর্তে .viewউপর viewControllerForKey:আমার জন্য সব বিষয় সংশোধন করা হয়েছে।
ব্যাচারি 21

1
এটি ভিউফোর্কি ব্যবহার না করেই আমার সমস্যার সমাধান করেছে, তবে আমি মনে করি এটিও ব্যবহার করা উচিত।
কেভিন স্লাইচ

5
যদিও এটি সমস্যার সমাধান করছে বলে মনে হচ্ছে, আপনার ভিউ কন্ট্রোলারের পিছনের পর্দাটি প্রদর্শিত হয়ে গেলে এটি কালো হয়ে যাবে। আপনার ভিউ কন্ট্রোলার পূর্ণ স্ক্রিন না থাকলে এটি গুরুত্বপূর্ণ।
শহরবাসী

16

লেফটারিসের সম্পর্কিত থ্রেডে আমি এই অত্যন্ত দরকারী উত্তরটি পেয়েছি: https://stackoverflow.com/a/27165723/3709173

এটি যোগ করা:

  1. মোডালপ্রেজেন্টেশনস্টাইল সেট করুন। কাস্টম
  2. সাবক্লাস ইউআইপিভাইজারেশন কনট্রোলার, ওভাররাইড করা উচিত রিমোভ প্রিজনারভিউ দেখুন (কোনও সহ)
  3. আপনার ট্রানজিশনডেলিগেট ক্লাসে উপস্থাপনাটি নিয়ন্ত্রণের জন্য প্রস্তাবিত ভিউকন্ট্রোলারটিকে ওভাররাইড করুন এবং আপনার কাস্টম ইউআইপিভারসেশন কনট্রোলারটি ফিরিয়ে দিন

আপনার পছন্দসই রূপান্তরটিতে +1, যখন বরখাস্ত অ্যানিমেশনটি ঘটছে তখন ভিউতে যুক্ত করবেন না।

এখানে প্রদর্শিত:

https://www.DPboxbox.com/s/7rpkyamv9k9j18v/CustomModalTransition.zip?dl=0 কোনও হ্যাক ছাড়াই! এটা যাদু মত! :)


1
এটি আসল সঠিক উত্তর। যাদু কৌশল ছাড়া গ্রহণযোগ্য এক। ধন্যবাদ, মার্ক!
আন্দ্রেই ম্যালগিন

দুর্ভাগ্যক্রমে, এটি আইওএস 12.4, এক্সকোড 10.3 এ কাজ করে না। রূপান্তরটি সম্পূর্ণ হওয়ার পরে পর্দাটি কালো হয়ে যায় (সমস্ত দর্শনক্রমক্রম থেকে সরানো হয়েছে। তবে, 'মডেলপ্রেজেন্টেশন স্টাইল' সম্পত্তিটিকে '.ফুলস্ক্রিন'-এ সেট করে কাজ করে Che চিয়ার্স
ওম্বল

আমি আমার প্রকল্পে মার্ক এবং গুইনাইয়ের সুইফট বাস্তবায়ন থেকে ওবজ-সি সংস্করণটি চেষ্টা করেছি। দুর্ভাগ্যক্রমে তাদের কেউই প্রত্যাশার মতো কাজ করছেন না। আমি এক্সকোড 11.1 ব্যবহার করছি এবং বিল্ড টার্গেটটি আইওএস 13.0, আমি উভয় ডিভাইস এবং সিমুলেটারে চেষ্টা করেছি। আমার ক্ষেত্রে, আমার বেসিক সেট আপটি একটি সংগ্রহ দর্শন এবং যখন আপনি একটি কক্ষটি ট্যাপ করেন এটি অ্যানিমেশন সহ বিশদ ভিউতে সিগ করবে। যাইহোক, আমি ডিফল্ট রূপান্তর অ্যানিমেশনটি ব্যবহার করি তবে এটি পুরোপুরি ঠিকঠাক কাজ করে। আমি যখন বিশদটি বিবরণ থেকে পুনরায় শুরু করব তখন উপস্থাপক উপাচার্যটি যাবে না।
অনন্ত_কোডিং 7

8

আইওএস 8-এ, আপনার ইউআইভিউসকন্ট্রোলার ট্রান্সসিশনিংডেলিগেটে একটি ইউআইপিভাইভারেশন কনট্রোলার তৈরি করতে হবে এবং নীচের পদ্ধতিটি প্রয়োগ করতে হবে।

- (UIPresentationController *)presentationControllerForPresentedViewController:(UIViewController *)presented presentingViewController:(UIViewController *)presenting sourceViewController:(UIViewController *)source;

ভিউ কন্ট্রোলার উপস্থাপন করার সময় ভিউ হায়ারার্কি পরিচালনা করার জন্য কাস্টম উপস্থাপনা নিয়ামক ব্যবহার করার জন্য আপনার প্রতিনিধিকে জিজ্ঞাসা করুন।

ফেরত মূল্য:

মডেল উপস্থাপনা পরিচালনার জন্য কাস্টম উপস্থাপনা নিয়ামক।

আলোচনা:

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

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

আইওএস 8.0 এবং তারপরে উপলভ্যতা উপলব্ধ।

আরও তথ্যের জন্য ডাব্লুডাব্লুডিসি 2014 ভিডিওটি দেখুন:

https://developer.apple.com/videos/wwdc/2014/?include=228

ডাব্লুডাব্লুডিসি থেকে "লুকইনসাইড: উপস্থাপনা কন্ট্রোলার অ্যাডাপ্টিভিটি এবং কাস্টম অ্যানিম্যাটর অবজেক্টস" নামে একটি নমুনা কোড রয়েছে, যা আপনি ডাব্লুডাব্লুডিসি 2014 নমুনা কোড পৃষ্ঠা থেকে ডাউনলোড করতে পারেন।

আপনাকে কিছুটা নমুনা কোড পরিবর্তন করতে হবে। ইউআইপিড্রেসেশন কন্ট্রোলার আরআইডি পদ্ধতিতে এতে পরিবর্তন হয়েছে:

initWithPresentedViewController:presented presentingViewController:presenting

আগে এটি উপস্থাপন করা হয়েছিল এবং তারপরে উপস্থাপন করা হয়েছিল। কেবল এগুলি অদলবদল করুন এবং এটি কাজ করা উচিত।


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

7

পরিবর্তে [ইনভিউ ইনসার্টসউবভিউ: টুভিউ কন্ট্রোলআরভিউ উপরের সাবউবভিউ: থেকেভিউকন্ট্রোলআরভিউ]; কেবল যুক্ত করুন: [ইনভিউ অ্যাডসউবভিউ: টুভিউকন্ট্রোলআরভিউ];

if (self.presenting) {

    [transitionContext.containerView addSubview:toViewController.view];
    // your code

} else {
    // your code
}

আপনি এখানে একটি উদাহরণ দেখতে পারেন: লিঙ্ক এবং এটি আইওএস 7 এবং আইওএস 8 এ কাজ করে


এটি কোনও ইউআইএমডালপ্রেজেন্টেশন স্টাইলকাস্টম প্রকারের অ্যানিমেশন করার জন্য গৃহীত উত্তর হওয়া উচিত কারণ কনটেইনারভিউতে ভিউকন্ট্রোলারটি যুক্ত করার দরকার নেই। উপস্থাপনা অ্যানিমেশন চলাকালীন আপনার কেবলমাত্র ভিউকন্ট্রোলার যুক্ত করতে হবে।
স্কট কায়সার

এটি আসলে খুব সহায়ক,
দিমিত্রি বোন্ডারেভ

7

এখানে অ্যাশের স্থির একটি উদ্দেশ্য সি সংস্করণ।

// my attempt at obj-c version of Ash's fix
UIView *theToView = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey].view;
[[[UIApplication sharedApplication] keyWindow] addSubview:theToView];
[transitionContext completeTransition:YES]

আমাকে অন্য অর্ডার নিয়ন্ত্রকের বরখাস্ত সমাপ্তি ব্লক থেকে সঠিকভাবে কাজ করার জন্য একটি নতুন ভিউ কন্ট্রোলার উপস্থাপন করার জন্য পুনরায় ভিউটি যুক্ত করার পরে আমাকে অর্ডারটি অদলবদল করতে এবং [রূপান্তরকন্টেক্সটল ট্রান্সটিশন:] পদ্ধতিটি কল করতে হয়েছিল।

আমি জানি না যে এটি সবার জন্য এটি ঠিক করবে তবে এটি আমার অ্যাপে কাজ করে। চিয়ার্স!


5

আমি ওবজ-সি এর জন্য এটি কাজ করেছিলাম:

    [transitionContext completeTransition:YES];
    if(![[UIApplication sharedApplication].keyWindow.subviews containsObject:toViewController.view]) {
        [[UIApplication sharedApplication].keyWindow addSubview:toViewController.view];
    }

Ios7 এবং ios8 উভয় ক্ষেত্রেই সূক্ষ্ম কাজ করার জন্য মনে হচ্ছে।


5

আমি এটি খুঁজে পেয়েছি viewForKey:UITransitionContextToViewKey ios8 এ শূন্য করে। সুতরাং এটি যদি শূন্য হয় তবে আমি 'থেকে' ভিউ কন্ট্রোলার থেকে দৃশ্যটি ধরলাম।

তবে এটির ফলস্বরূপ কল করা হলে কনটেইনার থেকে উইন্ডোতে সরানো হচ্ছে না বলে 'টু'র ভিউ দেখা যাচ্ছে completeTransition:YES। সুতরাং যদি viewForKey:UITransitionContextToViewKeyশূন্য ফেরত, আমি উপর পড়েtoVC.view এবং এটি শূন্য হয়ে গেছে কিনা তা ট্র্যাক এবং সমাপ্তির পরে আমি এটিকে কনটেইনারটির প্রাথমিক তত্ত্বাবধানে নিয়ে যাই (যা উইন্ডো হতে পারে)।

সুতরাং এই কোডটি iOS7 এর পাশাপাশি আইওএস 8 তেও কাজ করে এবং তারা এটি ঠিক করে দেয় বা না করেও iOS9 এ কাজ করা উচিত

- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext {
    // Get the 'from' and 'to' views/controllers.
    UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    BOOL hasViewForKey = [transitionContext respondsToSelector:@selector(viewForKey:)]; // viewForKey is iOS8+.
    UIView *fromView = hasViewForKey ?
        [transitionContext viewForKey:UITransitionContextFromViewKey] :
        fromVC.view;
    UIView *toView = hasViewForKey ?
        [transitionContext viewForKey:UITransitionContextToViewKey] :
        toVC.view;

    // iOS8 has a bug where viewForKey:to is nil: http://stackoverflow.com/a/24589312/59198
    // The workaround is: A) get the 'toView' from 'toVC'; B) manually add the 'toView' to the container's
    // superview (eg the root window) after the completeTransition call.
    BOOL toViewNilBug = !toView;
    if (!toView) { // Workaround by getting it from the view.
        toView = toVC.view;
    }
    UIView *container = [transitionContext containerView];
    UIView *containerSuper = container.superview; // Used for the iOS8 bug workaround.

    // Perform the transition.
    toView.frame = container.bounds;
    [container insertSubview:toView belowSubview:fromView];
    [UIView animateWithDuration:kDuration delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
        fromView.frame = CGRectOffset(container.bounds, 0, CGRectGetHeight(container.bounds));
    } completion:^(BOOL finished) {
        [transitionContext completeTransition:YES];

        if (toViewNilBug) {
            [containerSuper addSubview:toView];
        }
    }];
}

3

আমি দেখতে পেয়েছি যে আপনি সেট করলে এই বাগ (এবং আরও অনেক!) অদৃশ্য হয়ে যায় modalPresentationStyle = UIModalPresentationFullScreen। আপনি অবশ্যই আপনার কাস্টম ট্রানজিশন অ্যানিমেশন পান।


2

আমিও এই ইস্যুতে আটকে গেলাম। আমি একটি অর্ধ-স্বচ্ছ পটভূমি সহ একটি কাস্টম ট্রানজিশন তৈরি করতে চাইছিলাম যেখানে আমি এখনও যে ভিউ কন্ট্রোলার থেকে এসেছি তা দেখতে পেলাম তবে কেবলমাত্র একটি কালো পটভূমি পেয়েছি। আমি এই থ্রেডে মার্ক অ্যারনের উত্তরটি আমাকে সহায়তা করেছে তা পাওয়া গেছে তবে এটি উদ্দেশ্য সিতে লেখা হয়েছে সুতরাং আমি উত্তরটির একটি সুইফট 3 সংস্করণ যা আমি iOS 9 এবং আইওএস 10 এর জন্য পরীক্ষা করেছি:

  1. ইউআইপিভাইভারেশনকন্ট্রোলারের একটি সাবক্লাস তৈরি করুন। নিম্নরূপে কাঁধে সরানোপ্রেসেন্টারভিউগুলি ভুয়াতে ওভাররাইড করুন:

    class ModalPresentationController: UIPresentationController {
    
    override var shouldRemovePresentersView: Bool {
    return false
    }
    
    override func containerViewWillLayoutSubviews() {
    presentedView?.frame = frameOfPresentedViewInContainerView
    }
    }
  2. আপনি যে স্থানে নতুন দর্শন নিয়ন্ত্রককে ইনস্ট্যান্ট করছেন এবং এর রূপান্তর প্রতিনিধি নির্ধারণ করছেন, সেটি নির্দেশ করুন যে আপনি এটি একটি কাস্টম মডেল উপস্থাপনা শৈলীটি নীচে প্রদর্শন করতে চান:

    let newVC = mainStoryboard.instantiateViewController(withIdentifier: "newVC") as! NewViewController 
    
    newVC.transitioningDelegate = self
    
    newVC.modalPresentationStyle = UIModalPresentationStyle.custom
    
    newVC.modalPresentationCapturesStatusBarAppearance = true //optional
    
    present(newVC, animated: true, completion: nil)
  3. এখন আপনার ইউআইভিউউকন্ট্রোলার ট্রান্সসিশনিংডেলিগেটের উপস্থাপনাকন্ট্রোলার পদ্ধতিটি ওভাররাইড করুন এবং আপনার কাস্টম ইউআইপিভাইজারেশনকন্ট্রোলারটি ফিরিয়ে দিন। আমার আমার বর্তমান শ্রেণিতে এক্সটেনশন হিসাবে ছিল:

    extension CurrentViewController: UIViewControllerTransitioningDelegate {
    
    //this is where you implement animationController(forPresented) and animationController(forDismissed) methods
    
    func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
    
    return ModalPresentationController(presentedViewController: presented, presenting: source)
    
    }
    }

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


এই আইআইএসটি সুইফ্ট 3 এ একটি কাস্টম মডেল উপস্থাপনা করার জন্য দুর্দান্ত উদাহরণ! ধন্যবাদ @ গুইনাই! presentationController(forPresented presented UIViewController,... পূর্ববর্তী সুইফট এপিআই কমপ্লায়ারকে বিচলিত করে না, তবে ডাকা হয় নি বলে আমি নতুন সুইফট 3 এপিআই দেখিয়ে এমন একটি উদাহরণ না পাওয়া পর্যন্ত আমি এটিকে আটকে রেখেছি।
নাটালিয়া

2

এই সমস্যাটির মুখোমুখি হওয়ার পরে, আমি খুব বিভ্রান্ত হয়ে পড়েছিলাম, কারণ আমি প্রায় অভিন্ন কিছু লিখেছি যা খুব বেশি আগে খুব ভাল কাজ করেছিল। চমত্কার হ্যাকি লাগছে এমন ফিক্সগুলি খুঁজতে উত্তর খুঁজতে এখানে এসেছিলেন এবং এর মূল কারণটি বোঝেন বলে মনে হয় না ... এটি ঠিক করা খুব সহজ।

কিছু উত্তর পরিবর্তন উল্লেখ modalPresentationStyleকরার .overFullScreen। এটি সঠিক, .overCurrentContextখুব কাজ করবে। এটি প্রত্যাশিত, এবং আচরণ অ্যাপল নথি। তবে কেন এটি সবার জন্য কাজ করছে না? সমস্ত হ্যাকি কোড, এবং এর সাথে অন্য কোনও সংমিশ্রণ এবং ক্রেজি স্টাফ যা আপনাকে করা উচিত নয়?

দেখা যাচ্ছে, ভিউ লোডের আগে আপনাকে উপস্থাপনা শৈলীটি সেট করতে হবে । পরে না। এটি initে করুন, বা এটি পূর্ববর্তী কন্ট্রোলার থেকে করুন বা আপনি চাইলে - যতক্ষণ তা ভিউ লোড হওয়ার আগেই থাকে।


1
আমি .overCurrentContext ভিউ লোডের আগে উপস্থাপনা শৈলীতে সেট করেছিলাম ( initভিউ কন্ট্রোলারের মধ্যে) এবং সমস্যাটি এখনও ঘটে
রিচার্ডোপিরের

1

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


কোনও কারণে, এটি নীচের দৃশ্যের সাথে ইন্টারঅ্যাকশনটিকে মঞ্জুরি দেয় না বলে মনে হচ্ছে, যেখানে ইউআইএমডালপ্রেসিয়েশন কনভার্টকন্টেক্সট আইওএস did তে করেছে .. কোন চিন্তা?
ক্রিস্টোফার রাইট

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

0

ঠিক আছে, ছেলেরা, আমি মনে করি যে আমি একটি কেস সমাধান করেছি যে আপনি iOS 13 এবং তদুর্ধের অ্যাপ্লিকেশনটি তৈরি করার সময় 'একজন কর্মরত অ্যানিমেটর' সঠিকভাবে কাজ করা বন্ধ করে দেয়।

এনভ এক্সকোড 11.1, আইওএস 13.1

সমস্যা

আমি যা করতে চাই তা খুব সহজ: আমার কাছে একটি সংগ্রহের ভিউ রয়েছে, যখন কোনও ঘর টেপ করা হবে, তখন এটি একটি বিশদ দৃশ্যে বিভক্ত হবে। 'উপস্থিত মোড্যালি'র বোরিং ডিফল্ট স্টাইলটি ব্যবহার না করে, আমি এটি আরও আকর্ষণীয় করে তুলতে চাই, তাই আমি নিয়ামক রূপান্তরের জন্য একটি অ্যানিমেটার লিখেছি।

আমি আমার সংগ্রহ ভিসি থেকে বিশিষ্ট ভিসিতে টেনে আনুন এবং ছাড়িয়ে আইবিতে সেগু সেট আপ করেছি। সেগের স্টাইলটি 'বর্তমান উপস্থাপন করুন' এবং উপস্থাপনাটি 'সম্পূর্ণ স্ক্রিন' এ সেট করা আছে।

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

1. ফাংশন 'অ্যানিমেট ট্রান্সिशन ()' থেকে নিম্নলিখিত লাইনের পরে ডাকা হওয়ার পরে, সংগ্রহের দৃশ্য পুনরায় শুরু হবে এবং প্রদর্শিত হবে

transitionContext.completeTransition(true)

২. যতক্ষণ পর্যন্ত বিশদ বিবরণটি সম্পূর্ণরূপে সংগ্রহের ভিউটি কভার করে না, ততক্ষণ সংগ্রহের ভিউটি যখন বিশদ দর্শন থেকে ফিরে আসে তখন অদৃশ্য হবে না

সমাধান

সত্যি বলতে কী, অ্যানিমেটেড ট্রানজিশন কীভাবে কাজ করে সে সম্পর্কে আমি খুব কমই জানি। সুতরাং আমি কেবল এই পোস্টটি এবং অন্যটি অনুসরণ করতে পারি , প্রতিটি উত্তর চেষ্টা করে দেখুন। দুর্ভাগ্যক্রমে, তাদের কেউই আমার পক্ষে কাজ করে না। অবশেষে, আমি এমন একটি পয়েন্টে পৌঁছেছি যেখানে আমি কেবল টুইট করতে পারি তা হ'ল আইবিতে সেগের উপস্থাপনা শৈলী (যা আমার খুব প্রথম দিকে করা উচিত ছিল)। আমি যখন উপস্থাপনাটিকে 'ওভার ফুল স্ক্রিন' এ সেট করি তখন অলৌকিক ঘটনা ঘটে এবং আমার সমস্যা সমাধান হয়ে যায়। বিশদ ভিউ অ্যানিমেশন সহ পূর্ণ স্ক্রিনে প্রদর্শিত হতে পারে এবং যখন এটি বরখাস্ত হয়, আমি পটভূমি এবং অ্যানিমেটেড বিশদ দর্শন হিসাবে সংগ্রহ ভিউ উভয়ই দেখতে পারি।

তারপরে রাস্তা ধরে আরও একটি আবিষ্কার

3. 'টুভিউ' এবং 'ভিউ' থেকে উল্লেখ করতে, নিম্নলিখিত দুটি পদ্ধতিই কাজ করে

পরোক্ষভাবে:

transitionContext.viewController(forKey: .to)?.view
transitionContext.viewController(forKey: .from)?.view

সরাসরি উপায়:

transitionContext.view(forKey: .to)
transitionContext.view(forKey: .from)

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

আশা করি এটি ভবিষ্যতে কারও পক্ষে সহায়ক হবে।


0

কোনও সামগ্রী ভিউ নিয়ন্ত্রককে বরখাস্ত করার সময় আমার একই সমস্যা ছিল।

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

আমার সমস্যাটি হ'ল, কন্টেন্টভিসি (বর্তমানে উপস্থাপিত উপাচার্য) খারিজ করার সময়, এটি শিশু উপাচার্য (এখন উপস্থাপিত উপাচার্য) এর কাছে যাওয়া উচিত তবে আমার কাস্টম স্থানান্তর শেষ হওয়ার সাথে সাথে চাইল্ডভিসি হঠাৎ অদৃশ্য হয়ে যায়, পিতামাতার ভিসি দেখিয়ে showing

এই সমস্যাটি সমাধান করতে আমি যা করেছি তা হ'ল

  1. পরিবর্তন .modalPresentationStylechildVC ডিফল্ট থেকে parentVC দ্বারা উপস্থাপিত .automaticকরার.fullscreen
  2. তারপরে .modalPresentationStyleকন্টেন্টভিসি এর .fullscreenপাশাপাশি পরিবর্তন করা হয়েছে ।

এটি সমস্যার সমাধান করে। তবে এটি আপনার সন্তানের ভিসিটিকে প্যারেন্টভিসির শীর্ষে কার্ড-স্টাইলের শীট হিসাবে দেখায় না (যখন ব্যবহার করবেন).overCurrentContext 13 এ নতুন যা বা স্বয়ংক্রিয়ভাবে) ।

অভিভাবকরা উপস্থাপন করার সময় চাইল্ডভিসি-র জন্য কার্ড-স্টাইল শীটটি ধরে রাখতে পারে এমন কোনও সমাধান রয়েছে কিনা তা জানতে আগ্রহী।


-3

অন্য ভিউ কন্ট্রোলারের শিশু হিসাবে একটি ভিউ কন্ট্রোলার যুক্ত করে।

[self addChildViewController:childViewController];                 

চেক করুন এবং আমাকে জানান


আমি পাচ্ছি না, আপনি কোডিং ব্যবহার করে এটি বর্ণনা করতে পারেন?
নীরভপ্যাটেল

এই আপেল ডকুমেন্টেশন চেক developer.apple.com/library/ios/featuredarticles/...
Rushabh

এটি কোনওভাবেই প্রশ্নের উত্তর দেয় না। চাইল্ডভিউকন্ট্রোলাররা কাস্টম ট্রানজিশনের কোনও অংশের সাথে জড়িত নয়, তারা সম্পূর্ণ আলাদা বিষয়।
আন্দ্রেস এম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.