একটি মেমরি ফুটো তদন্ত করার সময় আমি setRootViewController:
একটি স্থানান্তর অ্যানিমেশন ব্লকের ভিতরে কল করার কৌশল সম্পর্কিত একটি সমস্যা আবিষ্কার করেছি :
[UIView transitionWithView:self.window
duration:0.5
options:UIViewAnimationOptionTransitionFlipFromLeft
animations:^{ self.window.rootViewController = newController; }
completion:nil];
যদি পুরানো ভিউ কন্ট্রোলার (একটিকে প্রতিস্থাপিত করা হচ্ছে) বর্তমানে অন্য ভিউ কন্ট্রোলার উপস্থাপন করছে তবে উপরের কোডটি ভিউ হায়ারার্কি থেকে উপস্থাপিত ভিউটিকে সরিয়ে দেয় না।
অর্থাৎ, ক্রিয়াকলাপের এই ক্রমটি ...
- এক্স রুট ভিউ কন্ট্রোলার হয়ে ওঠে
- এক্স ওয়াইকে উপস্থাপন করে যাতে ওয়াইয়ের দৃষ্টিভঙ্গি পর্দায় থাকে
transitionWithView:
জেডকে নতুন রুট ভিউ কন্ট্রোলার তৈরি করতে ব্যবহার করা হচ্ছে
... ব্যবহারকারীর কাছে ঠিক আছে, তবে ডিবাগ ভিউ হায়ারার্কি সরঞ্জামটি প্রকাশ করবে যে ওয়াইয়ের দৃষ্টিভঙ্গিটি এখনও জেড এর দৃশ্যের পিছনে রয়েছে, এ এর মধ্যে UITransitionView
। এটি, উপরের তিনটি ধাপের পরে, ভিউয়ের স্তরক্রমটি হ'ল:
- ইউআই উইন্ডো
- ইউআইটি ট্রান্সভিশনভিউ
- ইউআইভিউ (আপনার দর্শন)
- ইউআইভিউ (জেড ভিউ)
- ইউআইটি ট্রান্সভিশনভিউ
আমার সন্দেহ হয় এটি একটি সমস্যা কারণ, রূপান্তরের সময় এক্স এর ভিউটি আসলে চিত্রক্রমের অংশ নয়।
আমি যদি এর dismissViewControllerAnimated:NO
আগেই এক্সে প্রেরণ করি transitionWithView:
তবে ফলাফলের ভিউয়ের স্তরক্রমটি হ'ল:
- ইউআই উইন্ডো
- ইউআইভিউ (এক্স ভিউ)
- ইউআইভিউ (জেড ভিউ)
যদি আমি dismissViewControllerAnimated:
এক্সকে (YES বা NO) প্রেরণ করি তবে completion:
ব্লকের মধ্যে রূপান্তরটি সম্পাদন করুন , তারপরে দর্শনক্রমক্রমটি সঠিক। দুর্ভাগ্যক্রমে, এটি অ্যানিমেশনটিতে হস্তক্ষেপ করে। যদি বরখাস্ত অ্যানিমেট করা হয়, এটি সময় নষ্ট করে; যদি অ্যানিমেটিং না হয় তবে এটি ভাঙা দেখায়।
আমি অন্য কয়েকটি পদ্ধতির চেষ্টা করছি (উদাহরণস্বরূপ, আমার রুট ভিউ নিয়ন্ত্রক হিসাবে পরিবেশন করার জন্য একটি নতুন ধারক ভিউ কন্ট্রোলার শ্রেণি তৈরি করা) তবে কার্যকর এমন কোনও কিছুই খুঁজে পাইনি। আমি যেতে যেতে এই প্রশ্ন আপডেট করব।
চূড়ান্ত লক্ষ্য হ'ল উপস্থাপিত দৃশ্য থেকে সরাসরি নতুন রুট ভিউ নিয়ন্ত্রকের দিকে রূপান্তর করা এবং বিপথগামী দৃষ্টিভঙ্গি ছাড়াই।