9

से संबंधित UICollectionViewCell के निर्देशांक कैसे ढूंढें superview के सापेक्ष होने के लिए UICollectionView के सापेक्ष होने से UICollectionViewCell's निर्देशांक का अनुवाद करना संभव है? अब तक मैं एक UICollectionViewCell's निर्देशांक अनुवाद करने में असमर्थ जब superview को छुआ गया है। यहाँ मैं अब तक की कोशिश की है है:ऐप विंडो

- (void)collectionView:(UICollectionView *)collectionView 
     didSelectItemAtIndexPath:(NSIndexPath *)indexPath { 
    UICollectionViewCell *cell = 
    [collectionView dequeueReusableCellWithReuseIdentifier:@"CollectionViewCell" 
               forIndexPath:indexPath]; 

    CGRect frame = CGRectMake(0.0, 
           0.0, 
           cell.frame.size.width, 
           cell.frame.size.height); 
    frame.origin = [cell convertPoint:cell.frame.origin 
           toView:self.view]; 
} 

मैं एक नया फ्रेम जो दृश्य पर सेल की स्थिति से निकलती है, UICollectionView में नहीं बनाना चाहते हैं। कोई भी सहायता मददगार होगी, धन्यवाद।

+0

क्या परिणाम कोड ऊपर आप देता है? फिर आप फ्रेम के साथ क्या कर रहे हैं? – jrturton

+0

जिसके परिणामस्वरूप फ्रेम मुझे UICollectionView की उत्पत्ति के लिए एक मूल रिश्तेदार दे। उदाहरण के लिए, यदि बाईं ओर 5000 अंक स्क्रॉल किए जाने के बाद एक सेल को छुआ गया है, तो कनवर्ट करने के बाद फ्रेम मूल {5000, 0} होगा। –

+0

बाद मैं स्थिति की गणना की है, मैं छुआ सेल के शीर्ष पर प्रदर्शित करने के लिए एक subview के लिए निर्देशांक पारित करने के लिए करना चाहते हैं। –

उत्तर

33

इस उत्तर बहुत देर हो चुकी है, लेकिन उम्मीद है कि यह किसी को मदद मिलेगी। दान, आपके पास सही विचार है, लेकिन आपके पास यह भी आसान है कि आपके पास क्या है। बस

CGRect frame = CGRectMake(0.0, 0.0, cell.frame.size.width, cell.frame.size.height); 
frame.origin = [cell convertPoint:cell.frame.origin toView:self.view]; 

की जगह

CGRect frame = [collectionView convertRect:cell.frame toView:self.view]; 

के साथ समस्या यह है कि आप सेल, नहीं collectionView पर परिवर्तित विधि बुला रहे थे।

+0

पूर्णता। इससे पहले मैंने गंभीरता से 50 अन्य चीजों की कोशिश की। धन्यवाद। #latenightprogramming –

+0

बिल्कुल सही, धन्यवाद! – revton

3

यदि मैं आपको सही ढंग से समझता हूं, तो मुझे लगता है कि समस्या यह है कि आपको पहले स्क्रॉल व्यू के contentOffset के लिए सही करना होगा, जो UICollectionViewUIScrollView का उप-वर्ग है।

CGRect frame = CGRectMake(0.0, 
          0.0, 
          cell.frame.size.width, 
          cell.frame.size.height); 
CGPoint correctedOffset = 
CGPointMake(cell.frame.origin.x - collectionView.contentOffset.x, 
      cell.frame.origin.y - collectionView.contentOffset.y); 
frame.origin = [cell convertPoint:correctedOffset toView:self.view]; 

मैं अपने UICollectionView डेमो एप्लिकेशन में से एक में यह परीक्षण किया है और यह काम करने लगता है। कोशिश करो।

1

शायद ज़रुरत पड़े, तो किसी को भी इस बात के लिए, यहाँ देख यह कैसे स्विफ्ट में किया जा सकता है:

let cellFrameInSuperview = collectionView.convertRect(collectionView.cellForItemAtIndexPath(indexPath)!.frame, toView: view) 

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

  • कोई संबंधित समस्या नहीं^_^