2014-04-27 7 views
11

के हिस्से के रूप में मैं स्टेटसबार स्टाइल को कैसे अपडेट करूं मैं एक कस्टम एनीमेशन के साथ एक मॉडल ViewController प्रस्तुत करने के लिए आईओएस 7 UIviewControllerAnimatedTransitioning प्रोटोकॉल का उपयोग कर रहा हूं। एनीमेशन सही तरीके से काम करता है, हालांकि, मैं प्रस्तुत प्रस्तुत वीसी की तुलना में एक अलग स्टेटस बार शैली रखने के लिए नए प्रस्तुत ViewController चाहता हूं।कस्टम ट्रांज़िशन

जो मैं देख रहा हूं वह यह है कि -(UIStatusBarStyle)preferredStatusBarStyle को ViewController (वास्तव में कई बार) और नए प्रस्तुत ViewController पर कभी भी कॉल नहीं किया जाता है। यदि मैं स्टेटस बार के साथ कस्टम एनीमेशन सब कुछ हटा देता हूं जैसा कि मैं अपेक्षा करता हूं।

क्या मेरे एनीमेट ट्रांज़िशन फ़ंक्शन में रूट व्यू कंट्रोलर या कुछ अपडेट करने के लिए मुझे कुछ खास करने की ज़रूरत है? मैंने मैन्युअल रूप से [UIApplication sharedApplication] setStatusBarStyle के साथ स्टेटसबार सेट करने का प्रयास किया है लेकिन यह काम नहीं करता है (मुझे लगता है क्योंकि मैं आईओएस 7 व्यू कंट्रोलर आधारित स्टेटस बार स्टाइल का उपयोग कर रहा हूं)।

यह animateTransition के लिए मेरे कोड है:

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext 
{ 
    UICollectionViewCell *activeCell; 
    if ([self.collectionView.visibleCells containsObject:self.cellForActiveIdeaVC]) { 
     activeCell = self.cellForActiveIdeaVC; 
    } 

    UIView *container = transitionContext.containerView; 
    UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; 
    UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; 
    UIView *fromView = fromVC.view; 
    UIView *toView = toVC.view; 

    CGRect beginFrame; 
    if (activeCell) { 
     beginFrame = [container convertRect:activeCell.bounds fromView:activeCell]; 
    } else { 
     beginFrame = CGRectMake(container.width/2, container.height/2, 0, 0); 
    } 

    CGRect endFrame = [transitionContext initialFrameForViewController:fromVC]; 

    UIView *move = nil; 
    if (toVC.isBeingPresented) { 
     toView.frame = endFrame; 
     move = [toView snapshotViewAfterScreenUpdates:YES]; 
     move.frame = beginFrame; 
    } else { 
     if (activeCell) { 
      move = [activeCell snapshotViewAfterScreenUpdates:YES]; 
     } else { 
      move = [fromView snapshotViewAfterScreenUpdates:YES]; 
     } 
     move.frame = fromView.frame; 
     [fromView removeFromSuperview]; 
    } 
    [container addSubview:move]; 

    [UIView animateWithDuration:.5 
          delay:0 
     usingSpringWithDamping:700 
      initialSpringVelocity:15 
         options:0 
        animations:^{ 
         move.frame = toVC.isBeingPresented ? endFrame : beginFrame; 
        } 
        completion:^(BOOL finished) { 
         [move removeFromSuperview]; 

         if (toVC.isBeingPresented) { 
          toView.frame = endFrame; 
          [container addSubview:toView]; 
         } else { 
          if (self.cellForActiveIdeaVC) { 
           self.cellForActiveIdeaVC = nil; 
          } 
         } 

         [transitionContext completeTransition:YES]; 
        }]; 
} 

किसी भी संकेत दिए गए बहुत सराहना!

उत्तर

24

आईओएस 7 कस्टम संक्रमण के साथ, एक दृश्य नियंत्रक प्रस्तुत करना संभव है जो पूर्णस्क्रीन नहीं है और इसलिए स्टेटसबार उपस्थिति को प्रभावित नहीं करेगा। आपको स्पष्ट रूप से आईओएस को बताना होगा कि आपका कस्टम प्रस्तुत दृश्य नियंत्रक, वास्तव में, स्टेटस बार की उपस्थिति को नियंत्रित करेगा।

UIViewController *controllerToPresent = [...] 
controllerToPresent.modalPresentationStyle = UIModalPresentationStyleCustom; 
controllerToPresent.modalPresentationCapturesStatusBarAppearance = YES; 

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

कुछ more information here है। उम्मीद है की वो मदद करदे!

+1

मुझे पता था कि यह ऐसा कुछ था, मुझे बस नहीं मिला वह सेटिंग बहुत बहुत धन्यवाद! –

0

यह मेरे लिए काम किया: मुझे आशा है कि यह मदद करता है

- (UIStatusBarStyle) preferredStatusBarStyle { 
    return _preferredBarStyle; 
} 

:

[UIView animateWithDuration:0.25 
          delay:0 
         options:UIViewAnimationOptionCurveEaseOut 
        animations:^{ 
         _preferredBarStyle = UIStatusBarStyleLightContent; 
         [self setNeedsStatusBarAppearanceUpdate]; 
        }]; 

और फिर आप बस preferredStatusBarStyle पद्धति पर यह मान देने के लिए है!

+0

दुर्भाग्यवश काम नहीं किया गया, किसी कारण से बच्चे के दृश्य नियंत्रकफॉरस्टैटसबार स्टाइल/पसंदीदास्टैटसबार स्टाइल को मेरे शीर्ष दृश्य नियंत्रक पर कॉल नहीं किया जा रहा है। यह प्रस्तुत दृश्य नियंत्रक से पूछता रहता है, न कि नए रूप में प्रस्तुत किए गए नए तरीके से प्रस्तुत किए गए। –

+0

(और जैसा कि मैंने कहा था कि अगर मैं कस्टम एनीमेशन को हटा देता हूं तो यह ठीक से काम करता है, इसलिए मेरा मानना ​​है कि मैंने उन तरीकों को सही तरीके से कार्यान्वित किया है - कस्टम एनीमेशन के साथ इसका कुछ) –

संबंधित मुद्दे