मैं स्केल एनीमेशन को बदलने के साथ व्यू कंट्रोलर को पॉप करने का प्रयास कर रहा हूं

इस कोड के अनुसार जब यह बदलना शुरू होता है तो यह पेरेंट व्यू के बजाय ब्लैक स्क्रीन पेश करता है

इसे कैसे ठीक करें?

[UIView animateWithDuration:0.5f
                          delay:0.0f
                        options:UIViewAnimationCurveEaseInOut
                     animations:^{
                         self.view.alpha = 1.0f;
                         self.view.transform = CGAffineTransformMakeScale(0.5f, 0.5f); 
                     } completion:^(BOOL finished) {
                        [[self navigationController] popViewControllerAnimated:NO]; 
                     }];
0
RAGOpoR 16 अक्टूबर 2011, 22:56

1 उत्तर

सबसे बढ़िया उत्तर

यह अपेक्षित व्यवहार है, क्योंकि पिछले नियंत्रक का दृश्य दृश्य पदानुक्रम में नहीं है जब तक कि popViewControllerAnimated: विधि को कॉल नहीं किया जाता है और एनीमेशन समाप्त होने के बाद आप इसे कॉल करते हैं।

मुझे नहीं लगता कि सीधे नेविगेशन नियंत्रक के दृश्य में सबव्यू जोड़ना एक अच्छा विचार है, लेकिन निम्नलिखित कोड आपके लिए काम करना चाहिए।

UINavigationController* navigationController;
CGRect frame;

//keep a reference to the navigation controller as
//[self navigationController] won't work after pop is called
navigationController = [self navigationController];

//remember the frame of the view relative to navigation controller's view
frame = [navigationController.view convertRect:self.view.frame fromView:self.view.superview];

//pop this controller, this will add the view of the
//previous controller into the view hierarchy
[navigationController popViewControllerAnimated:NO]; 

self.view.frame = frame;
//add this view on top of the previous one 
[navigationController.view addSubview:self.view];

[UIView animateWithDuration:0.5f
                      delay:0.0f
                    options:0
                 animations:^{
                     self.view.alpha = 0.0f;
                     self.view.transform = CGAffineTransformMakeScale(0.5f, 0.5f); 
                 } completion:^(BOOL finished) {
                     [self.view removeFromSuperview];
                 }];

वैसे, UIViewAnimationCurveEaseInOut विकल्प पैरामीटर के लिए सही स्थिरांक नहीं है। आपको इस विधि के लिए UIViewAnimationOption से शुरू होने वाले स्थिरांक का उपयोग करना चाहिए।

2
murat 16 अक्टूबर 2011, 23:41