2013-09-05 7 views
10

यहाँ मेरी config है:UIView एनिमेशन बंद हो जब दृश्य गायब हो जाता है, फिर से शुरू नहीं करता है जब यह पुनः प्रकट

मैं एक ListViewController वाला स्टोरीबोर्ड है। ListViewController में एक सबव्यूव UIView है जिसे EmptyListView कहा जाता है। EmptyListView केवल तब दिखाया जाता है जब UITableView में कोई आइटम नहीं होता है, अन्यथा यह छिपा हुआ है।

EmptyListView में एक सबव्यूव UIImageView है जिसे खाली लिस्ट व्यूअरो कहा जाता है जो मेरे UITableView में एक नई प्रविष्टि बनाने के लिए बटन की ओर इशारा करता है। यह तीर नीचे & फैशन में असीमित एनिमेटेड है।

मैं अपने सबव्यूज़ को समाप्त करने के बाद एक अधिसूचना भेजने के लिए EmptyListView को सुनता हूं। मैं ऐसा इसलिए करता हूं क्योंकि यदि नहीं, तो एनिमेशन जो बाधाओं को बदलते हैं, गलत तरीके से व्यवहार करते हैं।

- (void) layoutSubviews { 
    [super layoutSubviews]; 

    [[NSNotificationCenter defaultCenter] postNotificationName:@"EmptyViewDidLayoutSubviews" object:nil]; 
} 

ListViewController इस अधिसूचना का अवलोकन करता है, यह एनीमेशन शुरू होता है:

[UIView animateWithDuration:0.8f delay:0.0f options:(UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse) animations:^{ 
    self.emptyListViewArrowVerticalSpace.constant = 15.0f; 
    [emptyListView layoutIfNeeded]; 
} completion:nil]; 

अगर मैं पृष्ठभूमि में एप्लिकेशन डाल या ढेरों पर एक और ViewController धक्का, एक बार मैं एप्लिकेशन या करने के लिए वापस आने के लिए ListViewController, एनीमेशन बंद/रोका गया है। मैं इसे फिर से शुरू नहीं कर सकता।

मैं कोशिश की है:

  1. आवेदन इस्तीफा दे दूंगा लिए सुनकर/सक्रिय हो जाते हैं। इस्तीफा देने पर, मैंने [self.view.layer removeAllAnimations] किया और फिर ऊपर दिए गए कोड का उपयोग करके फिर से एनीमेशन शुरू करने का प्रयास किया।
  2. UIImageView को एनिमेटेड होने और इसे मूल दृश्य में वापस जोड़ने के बाद, और फिर एनीमेशन शुरू करने का प्रयास किया।

मुझे यहां बाधाओं का उपयोग करने पर पछतावा है, लेकिन समस्या के बारे में कोई अंतर्दृष्टि पसंद आएगी।

धन्यवाद!

+0

क्या आप 'viewDidLoad' या' viewWillAppear' में अपनी विधियों का उपयोग कर रहे हैं? – iOS

+0

viewDidAppear, लेकिन किसी विशेष कारण के लिए नहीं। – chrysb

उत्तर

9

मुझे यकीन नहीं है कि आप उस अधिसूचना के साथ क्या कर रहे हैं। मैंने बाधाओं के साथ कई एनिमेशन किए हैं और इसे कभी नहीं करना पड़ा। मुझे लगता है कि समस्या यह है कि जब आप दृश्य छोड़ते हैं, तो बाधा का निरंतर मान 15 होगा (मैंने सत्यापित किया है कि लॉग इन व्यू विल्लडिस्पर) के साथ, इसलिए एनीमेशन इसे 15 पर सेट करने के लिए कुछ भी नहीं करेगा। एक परीक्षण ऐप्लिकेशन में, मैं viewWillAppear में इसके प्रारंभिक मूल्य (0) को लगातार वापस निर्धारित करते हैं, और यह ठीक काम किया:

-(void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    self.bottomCon.constant = 0; 
    [self.view layoutIfNeeded]; 
} 


-(void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [UIView animateWithDuration:1 delay:0.0f options:UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse animations:^{ 
     self.bottomCon.constant = -40.0f; 
     [self.view layoutIfNeeded]; 
    } completion:nil]; 
} 
+0

हां! वह काम किया। आपकी अंतर्दृष्टि के लिए बहुत बहुत धन्यवाद। – chrysb

5

यह दोष है। इसे दूर करने के लिए आपको फिर से एनीमेशन विधि को कॉल करना होगा।

आप इस प्रकार के रूप में यह कर सकते हैं:

अपने नियंत्रक

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resumeAnimation:) name:UIApplicationDidBecomeActiveNotification object:nil]; 

इस में ऑब्जर्वर जोड़े लागू हो जाएगी एक बार इस एप्लिकेशन को फिर से शुरू।

- (void)resumeAnimation:(NSNotification *)iRecognizer { 
    // Restart Animation 
} 

आशा इस तुम्हारी मदद करेगा:

इस विधि जोड़ें।

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