6

तो मेरे पास प्रत्येक सेल के लिए कस्टम UIViews के साथ एक UICollectionView है। UIView पूरी स्क्रीन लेता है और आप क्षैतिज रूप से 4 अलग-अलग UIView/कक्षों में से प्रत्येक पर नेविगेट कर सकते हैं। यह सब ठीक काम करता है और यह दर्शाता है कि आप किस संग्रहदृश्य के पृष्ठ पर हैं, यह इंगित करने के लिए पेजर का उपयोग करता है।UICollectionViz क्षैतिज निरंतर लूप

मैंने Google के चारों ओर देखा है और यह देखने के लिए कि क्या मैं अंतिम सेल पारित करने के बाद शुरुआत में लूप को प्राप्त कर सकता हूं या नहीं। तो उदाहरण के लिए:

मैं तीसरे सेल पर शुरू करता हूं, 4 वें स्थान पर जाता हूं, फिर जब मैं दाईं ओर स्वाइप करता हूं, तो यह पहले सेल पर वापस जायेगा (पेजर प्रतिबिंबित करेगा कि आप पहले पृष्ठ पर हैं) और जारी रखें वहां से

क्या यह करना आसान है? या क्या मैं कुछ न कुछ भूल रहा हूं?

धन्यवाद, जेक

उत्तर

3

आप केवल 3 UIViews की जरूरत है, आपका वर्तमान दृश्य, वर्तमान दृश्य की सही, और मध्यम को देखने के लिए छवि, एक वर्तमान में है कि के बाईं ओर छवि धारण करने के लिए स्क्रीन पर।

तो कहते हैं कि हम UIImages एबीसीडी और UIViews 1 2 और 3

हम देखें 2 पर देख रहे हैं देता है, छवि बी पृष्ठ छोड़ दिया हमें छवि एक करने के लिए, पेज सही छवि के लिए सी

ले जाएगा जैसे ही आप बाएं/पेज दाएं स्वाइप करते हैं, देखें 3 छवि सी के साथ ऑनस्क्रीन व्यू बन जाता है। जब पेजिंग आराम करने के लिए आता है, तो आप दृश्यों को चारों ओर बदलते हैं ताकि उपयोगकर्ता वास्तव में छवि सी के साथ मध्य UIView2 को देख रहा हो। देखें 1 में छवि है बी, देखें 3 में छवि डी है

फिर से स्क्रॉल करें, और वही शफल करें। अब आप किसी भी दिशा

में इतने पर

View 1 -> image C 
View 2 -> image D 
View 3 -> image A 

अगला पृष्ठ सही

View 1 -> image D 
View 2 -> image A 
View 3 -> image B 

, अनंत तक है इस विषय पर एक अच्छा WWDC वीडियो इसके लायक बाहर खुदाई 2011 से है। It's the UIScrollView demo video (Documentation as PDF) आपको ऐसा करने के लिए संग्रह दृश्यों की आवश्यकता नहीं है, हालांकि ऐसा कोई कारण नहीं है कि आपको क्यों नहीं करना चाहिए ...

+0

मैं मुझे डर है कि यह दृश्य में छवियों की तुलना में थोड़ा अधिक जटिल है, इन विचारों को स्टोरीबोर्ड से लोड किया गया है (जैसा कि निब्स का उपयोग करने और उन्हें लोड करने के विपरीत) और उनमें से प्रत्येक के पास अपने स्वयं के व्यू कंट्रोलर हैं और ऐसे में प्रवेश किया जाता है। इसके अलावा, uicollectionview का उपयोग, बिल्कुल अनिवार्य नहीं है, बाकी ऐप के साथ संगत रखने के लिए दृढ़ता से अनुशंसा की जाती है। क्या आपको लगता है कि मैं कोशिकाओं की संख्या को वास्तव में उच्च संख्या में सेट कर सकता हूं, फिर सामग्री और उसके सभी को अगले सेल पर ले जा सकता हूं? (मुझे लगता है कि मैंने कहीं कहीं देखा है, लेकिन इसमें प्रदर्शन समस्याएं नहीं होनी चाहिए?) – JakeTheBraek

+0

भले ही यह अधिक जटिल हो, सिद्धांत समान होना चाहिए, जब आप अपने संग्रह दृश्य को आराम करने वाले स्थिति में रखते हैं तो आप अपने बैकिंग डेटा को घुमा रहे हैं। मैंने इसे बिना किसी समस्या के तालिका दृश्यों में स्क्रॉलव्यू, टेबलव्यू और टेबल दृश्यों के पदानुक्रमों पर सफलतापूर्वक किया है। यदि आप अपने बैकिंग डेटा से गड़बड़ नहीं करना चाहते हैं तो आप इसे इसके बजाय एक अस्थायी डेटा स्टोर और गड़बड़ में खींच सकते हैं? मैंने उच्च संख्या में कोशिकाओं की चीज भी की है, लेकिन यह केवल भ्रम को बनाए रखने के लिए है जबकि हम डेटा के माध्यम से लाइव स्क्रॉल कर रहे हैं। यह कभी अचूक नहीं होगा। – foundry

+0

आपकी मदद के लिए धन्यवाद वह था, सिद्धांत यहाँ लगता है और मेरे संग्रहदृश्य में ठीक अनुवाद करना चाहिए। मैं आखिरी और इसके विपरीत के बाद पहले सेल को कोशिश करने और डुप्लिकेट करने जा रहा हूं और कोशिकाओं में स्नैप कर रहा हूं। एक बार बीमारियों को कम करने के बाद उपयोगकर्ता को "वास्तविक" पहले सेल या दिशा के आधार पर "असली" अंतिम सेल में ले जाया जाता है। अपनी उंगलियां क्रॉस कर रहा हूँ। – JakeTheBraek

2

इस हॉटनेस के लिए ठीक है?

तो मेरी मुख्य दृश्य नियंत्रक के viewDidLoad में मैं विचारों की पहचान एक सरणी में uicollectionview कोशिकाओं में लोड करने के लिए:

NSArray *vcs = [@"view5", @"view1", @"view2", @"view3", @"view4", @"view5", @"view1"] 

मैं भी हमारे pagecontrol गिनती सेट करने के लिए:

self.pageControl.numberOfPages = vcs.count - 2; // for the fake first and last cells 

मैं तो दृष्टांत व्यू कंट्रोलर मुख्य दृश्य नियंत्रक के दृश्य में डिडलोड के साथ-साथ संग्रह के लिए अल्फा को 0 पर सेट करते हैं। फिर हमारे स्क्रॉल व्यूडिड एंड डिस्सेरेटिंग में मैं कैरोसेल को संभाला करता हूं (अंतिम सेल से पहले और पहले सेल को अंतिम तक जाता है) और पेज को अपडेट करने के लिए नियंत्रण सीटी "वास्तविक" पृष्ठ संख्या।

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
    // Snaps into the cell  
    CGFloat pageWidth = scrollView.frame.size.width; 
    float fractionalPage = scrollView.contentOffset.x/pageWidth; 
    NSInteger page = lround(fractionalPage); 

    self.pageControl.currentPage = page - 1; // because our first cell is the last cell for animation purposes only 

    // Carousel from first to last and last to first while updating pagecontrol 
    if (page == 0) { 
     [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:self.activeGaugeClusters.count - 2 inSection:0] 
            atScrollPosition:UICollectionViewScrollPositionLeft 
              animated:NO]; 
     // Set our pagecontrol circles to the appropriate page indicator   
     self.pageControl.currentPage = self.activeGaugeClusters.count - 2; 

    } else if (page == self.activeGaugeClusters.count -1) { 
     [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0] 
            atScrollPosition:UICollectionViewScrollPositionLeft 
              animated:NO]; 
     self.pageControl.currentPage = 0; 
    } 
} 

फिर collectionview कार्यान्वयन में मैं निम्न कार्य करें:

numberOfItemsInSection = vcs.count 

और viewDidAppear प्रथम कक्ष (लोड हो रहा है कि क्या यह indexPath.row == 1 या 2 या 3 पर सेल है के लिए .. । (1 पहला असली पेज नहीं किया जा रहा 0)

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:self.lastGaugePanel inSection:0] 
           atScrollPosition:UICollectionViewScrollPositionLeft 
             animated:NO]; 
    self.pageControl.currentPage = self.lastGaugePanel - 1; 
    [UIView animateWithDuration:0.5 animations:^{ 
     self.collectionView.alpha = 1.0; 
    }]; 
} 

मुझे लगता है कि रकम के बारे में यह। दोनों मुख्य कुलपति और collectionview के लिए कार्यान्वयन के बाकी मानक हैं। इसलिए अब मैं एक संग्रह दृश्य है जो अन्य विचारों और उनके वीसी को लोड करता है जिनमें प्रत्येक का अपना एनीमेशन या जो भी हो। मैं indexPath.row को NSUserDefaults पर सहेजता हूं ताकि जब मैं छोड़ूं तो सेल अगले लोड पर दिखाने वाला पहला सेल है।

होप्स इस कोई मदद करता है, मैं जानता हूँ कि यह किया मेरे लिए, दुर्भाग्य से 3 पार्टी पुस्तकालयों का उपयोग इतना हतोत्साहित किया गया है कि मैं इस बुरे लड़के का निर्माण करने के लिए किया था (@He की मदद से था फिर, धन्यवाद!)

+0

आप मेरे मैट्रिक्स संस्करण को चाहते हैं! मैं tableViews के भीतर tableViews और tableViews ओवरलैपिंग का उपयोग किया .... – foundry

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