2015-12-16 5 views
13

मुझे अपडेट यूआई पता है जब एप्पल द्वारा ऐप में विशेष रूप से ओपनजीएल के लिए ऐप की सिफारिश नहीं की जाती है।ऐप दर्ज करने से पहले यूआई अपडेट तैयार करने के लिए

हालांकि मुझे अभी एहसास हुआ कि मैसेन्जर और फेसबुक का मैसेंजर ऐसा करने में सक्षम दिखता है। अपने मित्र के साथ एक संदेश धागा दर्ज करें और फिर पृष्ठभूमि पर जाएं, फिर ऐप पृष्ठभूमि में रहते हुए एक नया संदेश प्राप्त करें, फिर इस ऐप को अग्रभूमि में लाएं (पुश अधिसूचना या ऐप आइकन पर क्लिक करें), आपको नया संदेश बबल पहले से ही मिल जाएगा आइकन से ऐप विस्तार एनीमेशन के साथ।

मेरी समझ के लिए, यह केवल इसलिए हो सकता है क्योंकि नया संदेश बबल पृष्ठभूमि मोड में पहले ही खींचा गया है। फिर ऐप अग्रभूमि में प्रवेश करते समय, यह एनीमेशन में दिखाई दे सकता है।

हालांकि मेरे परीक्षण परिणाम से, आईओएस 8 और आईओएस 9 में, ऐप सक्रिय होने के बाद सभी पृष्ठभूमि यूआई अपडेट स्थगित कर दिए जाएंगे। और भी, आईओएस उस यूआई अपडेट के लिए एक निहित एनीमेशन लेनदेन जोड़ देगा।

मैंने नीचे अपना टेस्ट कोड सूचीबद्ध किया है, तो आप देखेंगे कि नया सेल एक स्पष्ट एनीमेशन लेनदेन के साथ तालिका में जोड़ा जाएगा जब ऐप अग्रभूमि जा रहा है, पूरी तरह से iMessenger के विपरीत। तालिका दृश्य: संख्या OfRowsInSection: ऐप केवल अग्रभूमि में प्रवेश करते समय निष्पादित विलंब होगा।

और न केवल टेबलव्यू सेल अपडेट के लिए, पृष्ठभूमि में एक सबव्यू जोड़ना भी अग्रभूमि में प्रवेश के लिए समान देरी लेनदेन को ट्रिगर करेगा।

शायद मैं इस बारे में पूरी तरह से गलत दिशा में हूं। क्या कोई मुझे यह समझने में मदद कर सकता है कि iMessenger और FB के मैसेंजर इस प्रभाव को कैसे प्राप्त कर सकते हैं? अग्रिम धन्यवाद!

@interface ViewController() <UITableViewDataSource, UITableViewDelegate> 

@property (nonatomic) UITableView *tableView; 
@property (nonatomic) NSMutableArray *dataTable; 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds]; 
    [self.view addSubview:self.tableView]; 
    self.tableView.delegate = self; 
    self.tableView.dataSource = self; 
    [self.tableView registerClass:[UITableViewCell class] 
     forCellReuseIdentifier:@"kCellId"]; 

    self.dataTable = [[NSMutableArray alloc] initWithArray:@[@"1", @"2", @"3"]]; 

    __weak __typeof(self) weakSelf = self; 
    [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidEnterBackgroundNotification 
                object:nil 
                queue:[NSOperationQueue mainQueue] 
               usingBlock:^(NSNotification * _Nonnull note) { 
                dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), 
                   dispatch_get_main_queue(), ^{ 
                [weakSelf.dataTable addObject:[@(weakSelf.dataTable.count + 1) stringValue]]; 
                [weakSelf.tableView reloadData]; 
                }); 
               }]; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return self.dataTable.count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"kCellId"]; 
    cell.textLabel.text = self.dataTable[indexPath.row]; 
    return cell; 
} 

@end 
+0

तुम क्यों प्रयोग कर रहे हैं 'dispatch_after' में एप्लिकेशन जाग करने की अनुमति? यह एक बार लूप का इंतजार करने और बाद में ब्लॉक निष्पादित करने के लिए मजबूर करता है - स्क्रीन को एक बार पहले ही खींचा जा चुका है। NSNotificationCenter वास्तव में * हमेशा * मुख्य थ्रेड में अपने पर्यवेक्षकों को बुलाता है। इसका मतलब है कि आपको जीसीडी का उपयोग करने की ज़रूरत नहीं है। 'Dispatch_after' कॉल को हटाने का प्रयास करें। – Farthen

+0

dispatch_after का उपयोग करके पृष्ठभूमि में ऐप को अपडेट करने के लिए यूआई को अपडेट करने का प्रयास किया जाता है। पृष्ठभूमि अधिसूचना दर्ज करने के बाद सीधे यूआई अपडेट को कॉल करें, यह गारंटी नहीं दे सकता कि कोर एनीमेशन पहले ही बंद हो चुका है। – Pei

+0

मैं इस तरह के एक परीक्षण मामले हार्डकोड करने की सलाह नहीं दूंगा। यदि आप एक बेहतर परीक्षण चाहते हैं, तो मैं कुछ मनमानी डेटा के साथ आपके ऐप पर पुश अधिसूचना भेजूंगा। जब ऐप पुश अधिसूचना प्राप्त करता है, तो पुश अधिसूचना से प्राप्त डेटा के साथ डेटाटेबल अपडेट करें। –

उत्तर

1

मैं तुम्हें लांच-दाना के लिए APN payload documentation गौर करने की सिफारिश कर सकते।

लॉन्च-छवि - ऐप बंडल में एक छवि फ़ाइल का फ़ाइल नाम; इसमें विस्तार शामिल हो सकता है या इसे छोड़ दिया जा सकता है। छवि को लॉन्च छवि के रूप में उपयोग किया जाता है जब उपयोगकर्ता एक्शन बटन टैप करते हैं या एक्शन स्लाइडर को ले जाते हैं। यदि यह गुण निर्दिष्ट नहीं है, तो सिस्टम या तो पिछले स्नैपशॉट का उपयोग करता है, ऐप की Info.plist फ़ाइल में UILaunchImageFile कुंजी द्वारा पहचाने गए चित्र का उपयोग करता है, या Default.png पर वापस आ जाता है। यह संपत्ति आईओएस 4.0 में जोड़ा गया था।

1

पृष्ठभूमि लायें प्रणाली पृष्ठभूमि

अधिक विस्तार enter link description here

+0

उत्तर के लिए धन्यवाद, हालांकि ऐप पृष्ठभूमि में भी जागता है, सभी यूआई अपडेट को सक्रिय होने तक पोन पोस्ट किया जाएगा। 8.0 से बाद में आईओएस संस्करण के लिए पट्टा पर – Pei

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