كيف يمكنني معرفة ما إذا كانت واجهة UIView مرئية وعلى الشاشة؟

StackOverflow https://stackoverflow.com/questions/142282

  •  02-07-2019
  •  | 
  •  

سؤال

إذا كان لدي UIView (أو UIView فئة فرعية) مرئية، كيف يمكنني معرفة ما إذا كانت معروضة حاليًا على الشاشة (بدلاً من، على سبيل المثال، أن تكون في قسم من عرض التمرير خارج الشاشة حاليًا)؟

ربما لإعطائك فكرة أفضل عما أقصده، UITableView لديه طريقتان لتحديد مجموعة الخلايا المرئية حاليًا.أنا أبحث عن بعض التعليمات البرمجية التي يمكن أن تتخذ قرارًا مماثلاً لأي شيء UIView.

هل كانت مفيدة؟

المحلول

لم يحاكم أي من هذا بعد.لكن CGRectIntersectsRect(), -[UIView convertRect:to(from)View] و -[UIScrollView contentOffset] يبدو أن هذه هي اللبنات الأساسية الخاصة بك هنا.

نصائح أخرى

إليك ما استخدمته للتحقق من واجهات المستخدم التي كانت مرئية في UIScrollView:

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
        }
    }
}

لقد اضطررت مؤخرًا إلى التحقق مما إذا كانت وجهة نظري تظهر على الشاشة.لقد نجح هذا بالنسبة لي:

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
}

إذا كنت قلقًا في المقام الأول بشأن تحرير كائن غير موجود في التسلسل الهرمي للعرض، فيمكنك اختباره لمعرفة ما إذا كان لديه عرض فائق، كما في:

if (myView.superview){
 //do something with myView because you can assume it is on the screen
}
else {
 //myView is not in the view hierarchy
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top