سؤال

أنا أمد TTThumbsViewController لعرض الصور من مصدر خارجي.كل شيء يعمل بشكل جيد ولكني أرغب في تغيير سلوك واحد لوحدة التحكم:أرغب في عرض/تحميل الصور في TTThumbsViewController أثناء استمرار المستخدم في التمرير وليس فقط عندما ينتهي المستخدم من التمرير.

رأيت ذلك في TTTableViewDelegate.m يتم تعليق الطلبات عند بدء التمرير وحاولت تعيينها على "لا" ولكن يبدو أنها تجلب الصور فقط ولا تعرضها فعليًا عند الانتهاء من التحميل.

//TTTableViewDelegate.m
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
  [TTURLRequestQueue mainQueue].suspended = YES;
  ...
}

بالإضافة إلى ذلك، قمت بالاتصال بسحب مكالمات مندوب البداية والنهاية لمحاولة تحديث العرض كل ثانية أو نحو ذلك على أمل عرض الصور المصغرة، لقد حاولت الاتصال invalidateView, reload واثنين آخرين في الموضوع الرئيسي ولكن يبدو أن لا شيء يعمل (invalidateModel لا يناسب أغراضي هنا).

يمكن لأي شخص لي نقطة في الاتجاه الصحيح؟

شكرا لك مقدما

تحرير1:يوجد مُحمل في شريط الحالة إذا قمت بالتمرير عند الاستخدام [TTURLRequestQueue mainQueue].suspended = NO; لكنها لا تجلب الصور بالفعل، والتي تم تأكيدها باستخدام wireshark.

تحرير2:بعد المزيد من التصحيح، وجدت أن الطلب يتم إرساله برمجيًا ولكن يتم تلقي الاستجابة فقط بعد الانتهاء من التمرير، لذلك يبدو أن طرق التفويض غير المتزامنة NSURLConnection لا يتم إطلاق النار أثناء أ scrollView يتم تمريره، لكنني تمكنت من عمل تعليمات برمجية مماثلة (تعمل) في وحدة تحكم عرض أخرى باستخدام tableView دون استخدام three20 lib.

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

المحلول

بعد البحث في العديد من المواضيع والمنتديات، تمكنت أخيرًا من تحقيق السلوك الذي أردته، على الرغم من أنني قمت بتغيير كود three20 بدلاً من توسيعه في جزء واحد:في thumbsViewController لقد قمت بتنفيذ المفوض التالي الذي يسمح بتقديم الطلبات أثناء التمرير:

-(void)didBeginDragging {
    [super didBeginDragging];
    [TTURLRequestQueue mainQueue].suspended = NO;
}

الآن لحل مشكلة الاتصالات التي لا تتم معالجتها أثناء التمرير وجدت لن يتم تشغيل NSURLRequest أثناء تمرير UIScrollView مفيد وفي TTRequestLoader.m قمت بتغيير ما يلي:

//TTRequestLoader.m
- (void)connectToURL:(NSURL*)URL {
    ...
    //To allow requests while scrolling we must schedule the conenction in other run loop
    //_connection = [[NSURLConnection alloc] initWithRequest:URLRequest delegate:self];
    //code above was replaced by the one below
    _connection = [[NSURLConnection alloc] initWithRequest:URLRequest delegate:self startImmediately:NO];
    [_connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
    [_connection start];
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top