আইওএস: স্বচ্ছ ব্যাকগ্রাউন্ড সহ মডেল ভিউ কন্ট্রোলার


179

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

- (IBAction)pushModalViewControllerButtonPressed:(id)sender
{
    ModalViewController *modalVC = [[ModalViewController alloc] init];
    [self presentViewController:modalVC animated:YES completion:nil];
}

আমি জানি আমি কেবল মতামতটি একটি সংক্ষিপ্তসার হিসাবে যুক্ত করতে পারি, তবে আমি কোনও কারণে এই সমাধানটি এড়াতে চাই। আমি কীভাবে এটি ঠিক করতে পারি?


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

এই স্ট্যাকওভারফ্লো.com/q/27598846/1603234 আমাকে হাসায় , এখন আপনার পালা :)
হেমং


দ্রুতগতি সংস্করণ এখানে stackoverflow.com/a/34578402/3380878
Mojtabye

1
আইওএস 10 এর জন্য নীচে উল্লিখিত ইনিগো 333 হিসাবে ইউআইমোডালপ্রেসারেশন ওভারফুলস্ক্রিন কাজ করছে।
জোসেফ রিসানেক

উত্তর:


97

এই নিম্নলিখিত কোডটি কেবল আইপ্যাডে কাজ করে।

self.view.backgroundColor = [UIColor clearColor];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentModalViewController:modalVC animated:YES];

আমি একটি সাব ভিউ যুক্ত করে যাব।

এখানে একটি খুব ভাল আলোচনা। মন্তব্যগুলি বিশেষভাবে দেখুন Look শুধু উত্তর নয়।

মডেল ভিউ

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

সম্পাদনা করুন:

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


18
এটা তোলে করেন আইওএস 7 কাজ এবং আইফোনের, জিনিস আপনি নির্দিষ্ট করতে হবে যে modalPresentationStyle = UIModalPresentationCurrentContextউপর উপস্থাপক দৃশ্য নিয়ামক, এবং মধ্যে উপস্থাপন করুন।
14:14 এ পুনরায় পাঠাও

6
হ্যাঁ এটি কাজ করে কিন্তু আপনি এই সেট শুধুমাত্র যদি উচ্চতর ViewController আপনার ভিউ শ্রেণীবিন্যাসের। (উদাঃ NavigationControllerউদাহরণস্বরূপ একটি বা আপনার স্লাইড মেনু ভিউ কন্ট্রোলারের উদাহরণ)।
আইগ্রানডাভ

4
আশ্চর্যের বিষয় হল, আমার ক্ষেত্রে এটি কেবল মডেল শৈলীতে সেট করার পরে কাজ করেছিল UIModalPresentationCustomএবং কেবল এটি যদি আগে presentViewControllerনা ঠিক আগে সেট করা থাকে viewDidLoad
মোজুবা

5
আইওএস 8 যেহেতু ভিউকন্ট্রোলারের মডেলপ্রেজেন্টেশনস্টাইল উপস্থাপন করা হচ্ছে তার জন্য ইউআইমোডালপ্রেসিভেনশন ওভারফুলস্ক্রীন।
পল লিন্সেই 24'16

1
প্রায় 1000 চেষ্টার পরে, আমি বুঝতে পারি যে আপনাকে modalPresentationStyle আগেviewDidLoad সেট করা দরকার । আমি এটি কনস্ট্রাক্টরে করেছি এবং এটি কাজ করেছিল।
bendytree

186

IOS 8 এ কাজ করার জন্য এই পেতে চেষ্টা তাদের জন্য, "অ্যাপল-অনুমোদিত" একটি স্বচ্ছ মোডাল দৃশ্য নিয়ামক প্রদর্শন করে উপায় সেটিং দ্বারা হয় modalPresentationStyle বর্তমানের মত ইডি নিয়ামক থেকে UIModalPresentationOverCurrentContext

এটি কোডে বা স্টোরিবোর্ডে সেগের বৈশিষ্ট্য নির্ধারণের মাধ্যমে করা যেতে পারে।

ইউআইভিউউকন্ট্রোলার ডকুমেন্টেশন থেকে:

UIModalPresentationOverCurrentContext

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

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

আইওএস 8.0 এবং তার পরে পাওয়া যায়।

https://developer.apple.com/documentation/uikit/uiviewcontroller

ডাব্লুডাব্লুডিসি ২০১৪-এর 'ভিউ কন্ট্রোলার অ্যাডভান্সমেন্টস ইন আইওএস 8' ভিডিওটি এই সম্পর্কে কিছু বিশদে .ুকে পড়ে।

বিঃদ্রঃ:

  • আপনার উপস্থাপিত ভিউ কন্ট্রোলারটিকে একটি পরিষ্কার ব্যাকগ্রাউন্ড রঙ দেওয়ার বিষয়টি নিশ্চিত করুন, তা না হলে এটি প্রকৃতপক্ষে দৃশ্যমান হয় না!
  • আপনাকে উপস্থাপনের আগে এটি সেট করতে হবে অর্থাত্ উপস্থাপনা ভিউকন্ট্রোলারের মধ্যে এই পরামিতিটি সেট viewDidLoadকরার কোনও প্রভাব পড়বে না

32
দ্রষ্টব্য - এটি এমন টার্গেট প্রদর্শিত হবে যেখানে আপনাকে মডেলপ্রেজেন্টেশনস্টাইল সেট করা দরকার changed উদাহরণস্বরূপ, আইওএস 7-এ, এটি কাজ করার জন্য, আমার কাছে ভিউ কন্ট্রোলারগুলির মডেলপ্রেজেন্টেশন স্টাইল সেট করা দরকার যা ইউআইএমডালপ্রেসিভেশনকেনচারনকন্টেক্সটে মোডালটি খোলার চেষ্টা করছে । যাইহোক, আইওএস 8 এ কাজ করার জন্য, আমাকে মডেল ভিউর মডেলপ্রেজেন্টেশন স্টাইল সেট করতে হবে যা ইউআইএমডালপ্রেজিশন ওভারকন্ট্রান্সকন্টেক্সটে প্রদর্শিত হবে ।
u2Fan

1
আপনার স্টোরিবোর্ডগুলিতে যদি সেগগুলি ব্যবহার করা হয়, আপনাকে সেখানে উপস্থাপনা শৈলী সেট করতে হবে। কমপক্ষে এটি আমার পক্ষে কাজ করেছিল।
জুলিয়ান বি।

আমি উপস্থাপিত ভিউ কন্ট্রোলারে আরআইডি পদ্ধতিতে এই তিনটি লাইন যুক্ত করেছি এবং একটি কবজির মতো কাজ করেছি: self.providesPstreamationContextTransitionStyle = হ্যাঁ; self.definesPstreamationContext = হ্যাঁ; [স্ব-সেটমডালপ্রেজেন্টেশন স্টাইল: ইউআইমোডালপ্রেজেন্টেশন ওভারকন্টারকন্টেক্সট];
inigo333

2
আইওএস 8+ এ, আমাকে একটি ইউআইএনএভিগেশন কন্ট্রোলারের কাছ থেকে একটি মডেল উপস্থাপন করতে হয়েছিল তাই কোনও সন্তানের কাছ থেকে উপস্থাপন করা আমার যা প্রয়োজন তা সরবরাহ করে না। পরিবর্তে, sourceVCহয় self.navigationController। এছাড়াও, কাস্টম হিসাবে লক্ষ্য উপস্থাপনা শৈলী সেট করার পরে, আমি এটির মাধ্যমে দেখতে পেতাম। [sourceVC setModalPresentationStyle:UIModalPresentationCurrentContext];, [targetVC setModalPresentationStyle:UIModalPresentationCustom];আশা করি এটি কাউকে সাহায্য করবে।
devdc

নোট - কল presentedVC.modalPresentationStyle = UIModalPresentationOverCurrentContextমধ্যে উপস্থাপন ভিসি। উপস্থাপিত ভিসিতে কাজ করে না। আমাকে বিশ্বাস করুন, আমি চেষ্টা করেছি।
হাস্যাহাম

104

আইওএস 8.0 এবং তারপরে এটি প্রোপার্টি মডেলপ্রেজিশন স্টাইলকে ইউআইমোডালপ্রেজিশনওভার ওভারক্র্যান্টকন্টেক্সট এ সেট করে করা যায়

//Set property **definesPresentationContext** YES to avoid presenting over presenting-viewController's navigation bar

self.definesPresentationContext = YES; //self is presenting view controller
presentedController.view.backgroundColor = [YOUR_COLOR with alpha OR clearColor]
presentedController.modalPresentationStyle = UIModalPresentationOverCurrentContext;

[self presentViewController:presentedController animated:YES completion:nil];

চিত্র সংযুক্ত দেখুন


5
আমি কাজ করতে পারি এটিই একমাত্র সমাধান। খুব সহজ। মডেল সেগুজের আগে এটি কেবল আপনার উপস্থাপকের ভিসিতে যুক্ত করুন।
সিরিস

1
এক্সকো 9.2 / আইওএস 11.2 দ্রুত .customএবং .overFullScreenকাজ করে।
উইলিয়াম হু

এবং মনে হয় আপনি যদি .overFullScreenউপস্থিত ভিউ কন্ট্রোলারকে কল করা viewWillAppearনা হয় তবে সেট করা হবে।
উইলিয়াম হু

আরও একটি জিনিস, presentedController.view.backgroundColor = #color#লিখতে হবে presentedController'র viewDidLoad, বা অন্য presentedController' র জীবন বিঘ্নিত হয়।
ডনসং

44

এই কোডটি আইওএস 6 এবং iOS7 এর অধীনে আইফোনটিতে দুর্দান্ত কাজ করে:

presentedVC.view.backgroundColor = YOUR_COLOR; // can be with 'alpha'
presentingVC.modalPresentationStyle = UIModalPresentationCurrentContext;
[presentingVC presentViewController:presentedVC animated:YES completion:NULL];

এই ক্ষেত্রে আপনি স্লাইড-অন অ্যানিমেশনটি মিস করেন। অ্যানিমেশন ধরে রাখতে আপনি এখনও নিম্নলিখিত "অ-মার্জিত" এক্সটেনশনটি ব্যবহার করতে পারেন:

[presentingVC presentViewController:presentedVC animated:YES completion:^{
    [presentedVC dismissViewControllerAnimated:NO completion:^{
        presentingVC.modalPresentationStyle = UIModalPresentationCurrentContext;
        [presentingVC presentViewController:presentedVC animated:NO completion:NULL];
    }];
}];

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

আরও, iOS7 এ আপনি কাস্টম ট্রানজিশন অ্যানিমেশন প্রয়োগ করে UIViewControllerTransitioningDelegateপ্রোটোকল প্রয়োগ করতে পারেন । অবশ্যই, এই ক্ষেত্রে আপনি স্বচ্ছ পটভূমি পেতে পারেন

@interface ModalViewController : UIViewController <UIViewControllerTransitioningDelegate>

প্রথমে, উপস্থাপনের আগে আপনাকে সেট করতে হবে modalPresentationStyle

modalViewController.modalPresentationStyle = UIModalPresentationCustom;

তারপরে আপনাকে দুটি প্রোটোকল পদ্ধতি প্রয়োগ করতে হবে

- (id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source
{
    CustomAnimatedTransitioning *transitioning = [CustomAnimatedTransitioning new];
    transitioning.presenting = YES;
    return transitioning;
}

- (id<UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed
{
    CustomAnimatedTransitioning * transitioning = [CustomAnimatedTransitioning new];
    transitioning.presenting = NO;
    return transitioning;
}

শেষ জিনিসটি CustomAnimatedTransitioningক্লাসে আপনার কাস্টম স্থানান্তরকে সংজ্ঞায়িত করা thing

@interface CustomAnimatedTransitioning : NSObject <UIViewControllerAnimatedTransitioning>
@property (nonatomic) BOOL presenting;
@end

@implementation CurrentContextTransitionAnimator

- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext 
{
    return 0.25;
}

- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext 
{
    UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];

    if (self.presenting) {
        // custom presenting animation
    }
    else {
        // custom dismissing animation
    }
}

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

আমি মনে করি যে সর্বাধিক সাধারণ ক্ষেত্রে আপনার নেভিগেশন কন্ট্রোলারকে উপস্থাপনাজন হিসাবে বিবেচনা করা ভাল is
ম্যালেক্স

হ্যাঁ, এই মডেলপ্রেজেন্টেশনটি স্টাইল ব্যবহার করে অ্যানিমেশন উপস্থাপন করা অসম্ভব ((
ম্যালেক্স

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

5
@ এমএক্সসিএল এবং যদি আপনার ভিউকন্ট্রোলারের নেভিগেশন কনট্রোলার নিজেই একটি ট্যাববারকন্ট্রোলারের ভিতরে থাকে তবে তার মডেলপ্রেজেন্টেশন স্টাইলটিও সেট করা আছে তা নিশ্চিত করুন;)
টমাস সিজি ডি ভিলেনা

21

@ ভেনুগোপাল তিওয়ারীর পরামর্শ অনুসারে উপস্থাপনা স্টাইলটি সেট করতে আমি এক্সকোড of এর ইন্টারফেস বিল্ডারের সাথে কিছুটা লড়াই করেছি। এই সংস্করণে, সেগের জন্য কোনও Over Current Contextবা Over Full Screenউপস্থাপনা মোড নেই বলে মনে হচ্ছে । সুতরাং, এটি কার্যকর করতে, আমি মোডটি সেট করেছি Default:

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

অতিরিক্তভাবে আমি উপস্থাপিত মোডকে মড্যালি উপস্থাপিত ভিউ কন্ট্রোলারের কাছে এতে সেট করেছি Over Full Screen:

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


এটি আমার পক্ষে কাজ করেছে, কোনও কোডের দরকার নেই। আমি
এক্সকোড

এটি আমার জন্যও কাজ করেছিল। সঠিক উত্তরের জন্য +1। ধন্যবাদ :)
আগস্টাইন পিএ

এখানে সেরা উত্তর!
shinyuX

1
কোন কোড = সেরা উত্তর। বাসটিয়ান এই গেমটি জিতল। Plz all +1 এই উত্তর।
জেনকোড

এই উত্তরটি কাজ করেছে..এটিতে এক ঘণ্টারও বেশি সময় ব্যয় করেছে
user578386

18

পরিমিতরূপে উপস্থাপনের জন্য একটি সিগ তৈরি করুন এবং সেগমেন্টের উপস্থাপনা সম্পত্তিটি বর্তমান প্রসঙ্গে উপস্থাপন করুন এটি 100% কাজ করবে

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


3
আমি 100% নিশ্চিতদের প্রশংসা করি, এটি কার্যকর! চাবিটি হ'ল সেগুটিতে এটি প্রয়োগ করা। আপনি অনেক ধন্যবাদ
বদর

যদি আপনার সেগুটি কোনও বোতামে জড়িত না থাকে এবং আপনি এটি প্রোগ্রামিকভাবে কল করছেন তবে একটি সনাক্তকারী সেট করতে এবং উপস্থিত ভিউকন্ট্রোলারের পরিবর্তে পারফরমেন্স সিথইথইডেন্টিফায়ার কল করতে নিশ্চিত করুন
ইউজার ৩3৩49৯4977

1
আমি অন্যান্য সমস্ত উত্তর চেষ্টা করেছিলাম, তবে এটিই আইওএস 9-এ আমার জন্য কাজ করেছে।
এন্ডাভিড

14

স্বচ্ছ পটভূমি সহ প্রেজেন্টভিউকন্ট্রোলার - iOS 8 এবং আইওএস 9 এ

MYViewController *myVC = [self.storyboard   instantiateViewControllerWithIdentifier:@"MYViewController"];
    myVC.providesPresentationContextTransitionStyle = YES;
    myVC.definesPresentationContext = YES;
    [myVC setModalPresentationStyle:UIModalPresentationOverCurrentContext];
    [self.navigationController presentViewController:myVC animated:YES completion:nil];

এবং এমওয়াইভিউকন্ট্রোলারে পটভূমির রঙ কালো সেট করে এবং অস্বচ্ছতা হ্রাস করে


12

এটি কিছুটা হ্যাকি উপায়, তবে আমার জন্য এই কোডটি কার্যকর হয় (আইওএস 6):

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

[self presentViewController:self.signInViewController animated:YES completion:^{
    [self.signInViewController dismissViewControllerAnimated:NO completion:^{
        appDelegate.window.rootViewController.modalPresentationStyle = UIModalPresentationCurrentContext;
        [self presentViewController:self.signInViewController animated:NO completion:nil];
        appDelegate.window.rootViewController.modalPresentationStyle = UIModalPresentationFullScreen;

    }];
}];

এই কোডটি আইফোনেও কাজ করে


ধন্যবাদ - মূল বাড়ির উপরে একটি প্রাথমিক "সহায়তা" পর্দা দেখাচ্ছে - এটি আমার প্রয়োজন ঠিক এটিই। সুন্দর!
ম্যাট এইচ

1
আজ, আমি প্রায় 3 ঘন্টা ব্রাউজিং এবং সন্ধানের জন্য অনুসন্ধান করতে ব্যয় করি যা iOS7 এবং iOS8 উভয়ের জন্যই কাজ করে। এই উত্তরটি 1.5 বছরের পুরানো এবং আমি ইসিএসলাইডিংভিউ কনট্রোলার ব্যবহার করছি এই বিষয়টি বিবেচনা করে, এটিই একমাত্র সমাধান যা কাজ করেছিল! ধন্যবাদ @ মাক।
সেঞ্চুরিয়ান

পারফেক্ট। এছাড়াও, যদি আপনি অ্যানিমেশনটির বিষয়ে চিন্তা না করেন তবে অভ্যন্তরীণ সমাপ্তির 3 টি লাইন পুরোপুরি কাজ করে ধন্যবাদ!
রাসডেস্ট্রোয়র

কোনও সাফল্য ছাড়াই 3 ঘন্টা ব্যয় করার পরে এটি পাওয়া যায়, চিয়ার্স, আশা করি আমি আরও বেশি ভোট দিতে পারব: ডি
অ্যাসিওলিওসুফি

11

এই বিভাগটি আমার পক্ষে কাজ করেছে (আইওএস 7, 8 এবং 9)

এইচ ফাইল

@interface UIViewController (navigation)
- (void) presentTransparentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion;
@end

এম ফাইল

@implementation UIViewController (navigation)
- (void)presentTransparentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion
{
    if(SYSTEM_VERSION_LESS_THAN(@"8.0")) {
        [self presentIOS7TransparentController:viewControllerToPresent withCompletion:completion];

    }else{
        viewControllerToPresent.modalPresentationStyle = UIModalPresentationOverCurrentContext;
         [self presentViewController:viewControllerToPresent animated:YES completion:completion];
    }
}
-(void)presentIOS7TransparentController:(UIViewController *)viewControllerToPresent withCompletion:(void(^)(void))completion
{
    UIViewController *presentingVC = self;
    UIViewController *root = self;
    while (root.parentViewController) {
        root = root.parentViewController;
    }
    UIModalPresentationStyle orginalStyle = root.modalPresentationStyle;
    root.modalPresentationStyle = UIModalPresentationCurrentContext;
    [presentingVC presentViewController:viewControllerToPresent animated:YES completion:^{
        root.modalPresentationStyle = orginalStyle;
    }];
}
@end

1
আমি সমস্ত উত্তর যাচাই করেছি .. তবে আমার জন্য আপনার উত্তরটি নিখুঁত কাজ .. "+1" এর জন্য। @ টেড
g212gs

1
আমি ভেবেছিলাম আমি এর সমাধান খুঁজে পাচ্ছি না। অনেক ধন্যবাদ!
কপারক্যাশ

10

দ্রুত উত্তর ব্যবহার করে এই উত্তরটির সমাধানটি নীচে থাকবে।

let vc = MyViewController()
vc.view.backgroundColor = UIColor.clear // or whatever color.
vc.modalPresentationStyle = .overCurrentContext
present(vc, animated: true, completion: nil)

9

আপনি যদি স্টোরিবোর্ড ব্যবহার করছেন তবে আপনি এই পদক্ষেপটি অনুসরণ করতে পারেন:

  1. একটি ভিউ কন্ট্রোলার (ভি 2) যুক্ত করুন, আপনি যেভাবে চান UI সেটআপ করুন
  • একটি ইউআইভিউ ভিউ - কালোতে বর্ণমালা সেট করুন এবং অস্বচ্ছভাবে 0.5 তে সেট করুন
  • অন্য একটি ইউআইভিউ (2) যুক্ত করুন - এটি আপনার পপআপ হিসাবে কাজ করবে (প্লিজ লক্ষ্য রাখবেন যে ইউআইভিউ এবং ইউআইভিউ (2) এর অবশ্যই সমান স্তর / স্তরবিন্যাস থাকতে হবে view ইউআইভিউ (2) প্রভাবিত
  1. মডেল উপস্থাপন করুন

  2. সিগু ক্লিক করুন। অ্যাট্রিবিউটস ইন্সপেক্টর-এ উপস্থাপনাটি ওভার পূর্ণ স্ক্রিন হিসাবে সেট করুন । আপনি যদি চান অ্যানিমেশন সরান

স্টোরিবোর্ড

  1. ভি 2 নির্বাচন করুন। অ্যাট্রিবিউটস ইন্সপেক্টর-এ উপস্থাপনাটি ওভার পূর্ণ স্ক্রিন হিসাবে সেট করুন । প্রবন্ধ সংজ্ঞা এবং প্রবন্ধ সরবরাহ করে চেক

স্টোরিবোর্ড

  1. আপনার ভি 2 এর মূল ভিউ নির্বাচন করুন (প্লিজ। চেক চিত্র)। সাফ রঙের জন্য ব্যাকগ্রাউন্ড কালার সেট করুন

স্টোরিবোর্ড


6

আমি উপস্থাপিত ভিউ কন্ট্রোলারে আর ডি পদ্ধতিতে এই তিনটি লাইন যুক্ত করেছি এবং একটি কবজির মতো কাজ করি:

self.providesPresentationContextTransitionStyle = YES;
self.definesPresentationContext = YES;
[self setModalPresentationStyle:UIModalPresentationOverCurrentContext];

সম্পাদনা (আইওএস 9.3 এ কাজ করা):

self.modalPresentationStyle = UIModalPresentationOverFullScreen;

ডকুমেন্টেশন অনুসারে:

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

আইওএস 8.0 এবং তার পরে পাওয়া যায়।


1
আইওএস 10.2 এ কাজ করা।
জোসেফ রিসানেক

4

বিকল্প উপায় হ'ল "ধারক ভিউ" ব্যবহার করা। কেবল 1 এর নীচে আলফা তৈরি করুন এবং সিক সহ এম্বেড করুন। এক্সকোড 5, লক্ষ্য iOS7। আইফোনে পরীক্ষিত।

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

কনটেইনার ভিউ আইওএস 6 থেকে উপলব্ধ। সে সম্পর্কে ব্লগ পোস্টে লিঙ্ক


3

আমি যাকে "সুপারপোজড মডেল" বলি তার উপস্থাপনাটি পরিচালনা করার জন্য আমি একটি অবজেক্ট তৈরি করেছি, যার অর্থ এটি ব্যাকগ্রাউন্ডের দৃষ্টিভঙ্গি ধরে রাখে এবং স্বচ্ছ পটভূমির সাথে আপনাকে মডেল রাখতে দেয়।

এটির একটি একক, সহজ পদ্ধতি রয়েছে যা এটি করে:

- (void)presentViewController:(UIViewController *)presentedViewController
       fromViewController:(UIViewController *)presentingViewController
{
    presentedViewController.modalPresentationStyle = UIModalPresentationCustom;
    presentedViewController.transitioningDelegate = self;
    presentedViewController.modalPresentationCapturesStatusBarAppearance = YES;

    [presentedViewController setNeedsStatusBarAppearanceUpdate];

    [presentingViewController presentViewController:presentedViewController
                                       animated:YES
                                     completion:nil];
}

আপনার উপস্থাপিত ভিউ কন্ট্রোলারের যদি আলাদা কিছু থাকে তবে modalPresentationCapturesStatusBarAppearanceসম্পত্তিটি সেট করতে YESএবং স্ট্যাটাস বারের উপস্থিতি আপডেট করতে বাধ্য করা গুরুত্বপূর্ণpreferredStatusBarStyle

এই বস্তুর একটি হওয়া উচিত @property (assign, nonatommic) isPresenting

আপনি এই বস্তু মেনে চলতে চান UIViewControllerAnimatedTransitioningএবং UIViewControllerTransitioningDelegateপ্রোটোকল এবং নিচের পদ্ধতি বাস্তবায়ন:

- (id)animationControllerForPresentedController:(UIViewController *)presented
                           presentingController:(UIViewController *)presenting
                               sourceController:(UIViewController *)source
{
    self.isPresenting = YES;

    return self;
}

- (id)animationControllerForDismissedController:(UIViewController *)dismissed
{
    self.isPresenting = NO;

    return self;
}

এবং:

- (NSTimeInterval)transitionDuration:(id)transitionContext
{
    return 0.25;
}

- (void)animateTransition:(id)transitionContext
{
    UIViewController* firstVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    UIViewController* secondVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    UIView* containerView = [transitionContext containerView];
    UIView* firstView = firstVC.view;
    UIView* secondView = secondVC.view;

    if (self.isPresenting) {
        [containerView addSubview:secondView];
        secondView.frame = (CGRect){
            containerView.frame.origin.x,
            containerView.frame.origin.y + containerView.frame.size.height,
            containerView.frame.size
        };

        firstView.tintAdjustmentMode = UIViewTintAdjustmentModeDimmed;
        [UIView animateWithDuration:0.25 animations:^{
            secondView.frame = containerView.frame;
        } completion:^(BOOL finished) {
            [transitionContext completeTransition:YES];
        }];
        } else {
        [UIView animateWithDuration:0.25 animations:^{
            firstView.frame = (CGRect){
                containerView.frame.origin.x,
                containerView.frame.origin.y + containerView.frame.size.height,
                containerView.frame.size
        };

        } completion:^(BOOL finished) {
            [transitionContext completeTransition:YES];
        }];
    }
}

এটি ডিফল্ট মডেল অ্যানিমেশন অনুকরণ করে নীচে থেকে অ্যানিমেশনটি স্লাইড-ইন করে তবে আপনি যা চান তা তৈরি করতে পারেন।

গুরুত্বপূর্ণ বিষয়টি হ'ল উপস্থাপনা করা ভিউ কন্ট্রোলারের মতামত পিছনে থাকবে, আপনাকে স্বচ্ছ প্রভাব তৈরি করতে দেয়।

এই সমাধানটি আইওএস 7+ এর জন্য কাজ করে


আপনার উত্তরের জন্য ধন্যবাদ.
সালমান খকওয়ানি

3

এটি করার একটি খুব সহজ উপায় ( Storyboardsউদাহরণস্বরূপ, ব্যবহার করে ):

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"SomeStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SomeStoryboardViewController"];
// the key for what you're looking to do:
vc.modalPresentationStyle = UIModalPresentationOverCurrentContext;
vc.view.alpha = 0.50f;

[self presentViewController:vc animated:YES completion:^{
    // great success
}];

এটি UIViewControllerএকটি Storyboardমোডিয়ালি উপস্থাপন করবে তবে একটি স্বচ্ছ পটভূমি সহ।


3

আইওএস 7-10-র জন্য কাজ করা

if #available(iOS 8.0, *) {
    nextVC.modalPresentationStyle = .OverCurrentContext
    self.presentViewController(nextVC, animated: true, completion: nil)
} else {
    // Fallback on earlier version
    self.modalPresentationStyle = .Custom          
    nextVC.modalTransitionStyle = .CrossDissolve            
    self.presentViewController(nextVC, animated: false, completion: nil)
    }
}

2

এখানে সমস্ত ভাল উত্তর এবং মন্তব্যগুলি পুনরায় সরিয়ে ফেলতে এবং আপনার নতুনটিতে যাওয়ার সময় এখনও একটি অ্যানিমেশন রাখার জন্য ViewControllerআমি এটি করেছি: (আইওএস 6 এবং তারপরে সমর্থন করে)

যদি আপনার একটি ব্যবহার UINavigationController\ UITabBarControllerএই যেতে উপায়:

    SomeViewController *vcThatWillBeDisplayed = [self.storyboard instantiateViewControllerWithIdentifier:@"SomeVC"];

    vcThatWillBeDisplayed.view.backgroundColor = [UIColor colorWithRed: 255/255.0 green:255/255.0 blue:255/255.0 alpha:0.50];    

    self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
    [self presentViewController:presentedVC animated:YES completion:NULL];

যদি আপনি এটি করেন তবে আপনি আপনার modalTransitionStyleঅ্যানিমেশনটি হারাবেন । এটি সমাধান করার জন্য আপনি সহজেই আপনার SomeViewControllerক্লাসে এটি যুক্ত করতে পারেন :

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [UIView animateWithDuration:0.4 animations:^() {self.view.alpha = 1;}
       completion:^(BOOL finished){}];
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.alpha = 0;
}

2

অবশ্যই আপনার ইউআইএমডালপ্রেসিয়েশন কনভার্ট কনটেক্সট সেট করা উচিত তবে ক্লিয়ার কালার সেট করার জায়গাটিও খুব গুরুত্বপূর্ণ! আপনি viewDidLoad ফাংশনে পটভূমি সেট করতে পারে না, এটিকে সেট করার আগে দৃশ্য মত লোড করেনি রুট দৃশ্য নিয়ামক বা Init ফাংশন নিয়ন্ত্রকের বর্তমান যাচ্ছে!

actionController.view.backgroundColor = [UIColor clearColor];
[self presentViewController:actionController animated:YES completion:nil];

অথবা

- (instancetype)init {

    self = [super initWithNibName:nil bundle:nil];

    if(self) {
        self.modalPresentationStyle = UIModalPresentationOverCurrentContext;
        [self.view setBackgroundColor:[UIColor clearColor]];
    }

    return self;
}

এই ইঙ্গিতটিই অন্য সকলের মধ্যে আমাকে সহায়তা করেছিল। আপনার সাহায্যের জন্য ধন্যবাদ.
টমাসজ নাজারেঙ্কো

1

আপনি যদি মডেল সেগু ব্যবহার করছেন তবে এটিকে এই চিত্র হিসাবে সেট করার বিষয়টি নিশ্চিত করুন (আপনি চাইলে অ্যানিমেশনটি বন্ধ করতে পারেন)এখানে চিত্র বর্ণনা লিখুন


1

আইওএস 7 এবং আইওএস 8 এ পরীক্ষা করা একটি সম্পূর্ণ পদ্ধতি।

@interface UIViewController (MBOverCurrentContextModalPresenting)

/// @warning Some method of viewControllerToPresent will called twice before iOS 8, e.g. viewWillAppear:.
- (void)MBOverCurrentContextPresentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion;

@end

@implementation UIViewController (MBOverCurrentContextModalPresenting)

- (void)MBOverCurrentContextPresentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion {
    UIViewController *presentingVC = self;

    // iOS 8 before
    if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_7_1) {
        UIViewController *root = presentingVC;
        while (root.parentViewController) {
            root = root.parentViewController;
        }

        [presentingVC presentViewController:viewControllerToPresent animated:YES completion:^{
            [viewControllerToPresent dismissViewControllerAnimated:NO completion:^{
                UIModalPresentationStyle orginalStyle = root.modalPresentationStyle;
                if (orginalStyle != UIModalPresentationCurrentContext) {
                    root.modalPresentationStyle = UIModalPresentationCurrentContext;
                }
                [presentingVC presentViewController:viewControllerToPresent animated:NO completion:completion];
                if (orginalStyle != UIModalPresentationCurrentContext) {
                    root.modalPresentationStyle = orginalStyle;
                }
            }];
        }];
        return;
    }

    UIModalPresentationStyle orginalStyle = viewControllerToPresent.modalPresentationStyle;
    if (orginalStyle != UIModalPresentationOverCurrentContext) {
        viewControllerToPresent.modalPresentationStyle = UIModalPresentationOverCurrentContext;
    }
    [presentingVC presentViewController:viewControllerToPresent animated:YES completion:completion];
    if (orginalStyle != UIModalPresentationOverCurrentContext) {
        viewControllerToPresent.modalPresentationStyle = orginalStyle;
    }
}

@end

1

সুইফট 4.2

guard let someVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "someVC") as? someVC else {
    return
}
someVC.modalPresentationStyle = .overCurrentContext

present(someVC, animated: true, completion: nil)

0

প্রশংসনীয়:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[_window rootViewController]setModalPresentationStyle:UIModalPresentationCurrentContext];
    return YES;
}

আপনার মধ্যে প্রথম দেখার নিয়ন্ত্রক যেখানে আপনাকে পরের দর্শনটি লোড করতে হবে:

  NextViewController *customvc = [[NextViewController alloc]init];
    [self presentViewController:customvc animated:YES completion:^{

    }];

আপনার পরবর্তী ভিউকন্ট্রোলারে যা স্বচ্ছ যুক্ত করা হবে:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor clearColor];
    UIView* backView = [[UIView alloc] initWithFrame:self.view.frame];
    backView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.6];
    [self.view insertSubview:backView atIndex:0];
}

0

লগইন স্ক্রিনটি একটি মডেল, এর অর্থ এটি পূর্ববর্তী স্ক্রিনের শীর্ষে বসে। এখনও অবধি আমাদের অস্পষ্ট ব্যাকগ্রাউন্ড রয়েছে তবে এটি কোনও বিষয় ঝাপসা করছে না; এটি কেবল ধূসর ব্যাকগ্রাউন্ড।

আমাদের মডেলটি সঠিকভাবে সেট করা দরকার।

চিত্র লিঙ্ক লক্ষ্য

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

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

চিত্র লিঙ্ক লক্ষ্য


0

নেভিগেশন সেট করুন modalPresentationStyle জন্যUIModalPresentationCustom

এবং আপনার উপস্থাপিত ভিউ কন্ট্রোলারের ব্যাকগ্রাউন্ডের রঙ পরিষ্কার রঙ হিসাবে সেট করুন।

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