2008-09-26 9 views
11

यदि मेरे पास UIView (या UIView सबक्लास) है जो दिखाई दे रहा है, तो मैं कैसे कह सकता हूं कि यह वर्तमान में स्क्रीन पर दिखाया जा रहा है (उदाहरण के लिए, उदाहरण के लिए, स्क्रॉल व्यू के एक भाग में होना जो वर्तमान में ऑफ-स्क्रीन है)?मैं कैसे बता सकता हूं कि UIView दृश्यमान है और स्क्रीन पर?

हो सकता है आप मैं क्या मतलब है, UITableView वर्तमान में दृश्यमान कोशिकाओं के सेट का निर्धारण करने के लिए तरीकों की एक जोड़ी है का एक बेहतर विचार देने के लिए। मैं कुछ कोड है, जो किसी UIView के लिए एक समान दृढ़ संकल्प कर सकते हैं के लिए देख रहा हूँ।

उत्तर

10

नहीं अभी तक इस के किसी भी कोशिश की। लेकिन CGRectIntersectsRect(), -[UIView convertRect:to(from)View] और -[UIScrollView contentOffset] अपने बुनियादी निर्माण घटक यहाँ होने लगते हैं।

+0

त्वरित अतिरिक्त टिप्पणी:: यहाँ है कि मैं क्या जांच करने के लिए जो UIViews एक UIScrollView में दिखाई दे रहे थे इस्तेमाल किया है 'UIScrollView' अपनी सीमा समायोजित कर देता है आपके स्क्रॉल तो' convertRect: [से /] देखें: 'स्वचालित रूप से ध्यान में रखा जाता किसी की स्थिति पदानुक्रम में स्क्रॉल दृश्य। 'सामग्री ऑफसेट' को संदर्भित करने की कोई आवश्यकता नहीं है - आप केवल एक आयत को दूसरे के समन्वय स्थान में परिवर्तित कर सकते हैं। – Tommy

1

मैं हाल ही में जांच करने के लिए है कि क्या मेरे विचार परदे पर था। यह मेरे लिए काम किया:

CGRect viewFrame = self.view.frame; 
CGRect appFrame = [[UIScreen mainScreen] applicationFrame]; 

// We may have received messages while this tableview is offscreen 
if (CGRectIntersectsRect(viewFrame, appFrame)) { 
    // Do work here 
} 
+0

इस काम नहीं करेगा जब तक कि आप निर्देशांक कहीं परिवर्तित ... – n13

+0

यह काम नहीं करता है, तो स्क्रीन क्षैतिज है – Luda

1

यदि आप मुख्य रूप से एक उद्देश्य यह है कि दृश्य पदानुक्रम में नहीं है को रिहा के बारे में चिंतित हैं, तो आप अगर यह एक superview को देखने के लिए, के रूप में परीक्षण कर सकते हैं:

if (myView.superview){ 
//do something with myView because you can assume it is on the screen 
} 
else { 
//myView is not in the view hierarchy 
} 
2

for(UIView* view in scrollView.subviews) { 
    if([view isKindOfClass:[SomeView class]]) { 

     // the parent of view of scrollView (which basically matches the application frame) 
     CGRect f = self.view.frame; 
     // adjust our frame to match the scroll view's content offset 
     f.origin.y = _scrollView.contentOffset.y; 

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

     if(CGRectIntersectsRect(f, r)) { 
      // view is visible 
     } 
    } 
}