سؤال

لسوء الحظ ، من الصعب بالنسبة لي أن أختبر نفسي لأنني لم أحصل بعد على الماوس السحري الخاص بي ، لكن أخبرني من قِبل المختبرين الذين لديهم ماوس سحري لا يعمل الزخم في تطبيقي. لم أقم بدراسي NSSCROLLVIEW ، ولكن عرض مستند SCRORLVIEW مخصص. لم أتغلب على العجلة: في أي مكان ، ويبدو أن الزخم لا يعمل على ما يبدو. لست متأكدًا من أين أبدأ. اعتقدت أنه سيقوم فقط بإرسال أحداث التمرير والعجلة وستهتم الأمور بأنفسهم. (يعمل التمرير بعجلة أو على لوحة التتبع MBP كما هو متوقع.) من الواضح أنني يجب أن أفعل شيئًا ما يوقفه ، لكنني لا أعرف حتى من أين أبدأ. أفكار؟

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

المحلول

لقد اكتشفت ذلك منذ فترة وكانت المشكلة هو أنه في التمرير ، كنت أقوم بالكثير من معالجة الرؤية الفاخرة إلى حد ما مثل كيف يضيف uitableview في iPhone وتجاهل المشاهدات أثناء التمرير وخارج الشاشة. لقد نجح هذا الأمر بشكل رائع في الأداء - ولكن كلما دخلت في برمجة OSX ، كلما أدركت أن هذا كان خطأ بالنسبة لـ OSX (ولكن الفكرة الصحيحة لـ iPhone).

على أي حال ، ما يجري حقًا ، على ما يبدو ، هو أنه عندما تفعل شيئًا مثل تمرير العجلة ، يتم إرسال حدث التمرير إلى العرض الموجود تحت مؤشر الماوس ثم يمتد إلى أسفل المستجيبين/المشاهدات حتى يصل إلى مكان يتولى معالجته . عادةً ما تكون هذه مشكلة ، ولكن مع زخم التمرير ، فإن نظام التشغيل هو في الحقيقة مجرد إرسال أحداث التمرير الأصغر على الإطلاق إلى العرض الذي كان تحت المؤشر في ذلك الوقت بدأ الزخم. هذا يعني أنه إذا تمت إزالة العرض أثناء التمرير (لأنه يلفت خارج الشاشة أو شيء ما) ، فإنه يكسر السلسلة ويتوقف الزخم لأن العرض الذي لا يزال الحصول على رسائل التمرير لم يعد في التسلسل الهرمي.

الإصلاح "البسيط" هو عدم إزالة العرض الذي حصل على حدث التمرير الأخير - حتى لو كان خارج الشاشة. إن الإصلاح الأفضل (والإجهاد الذي ذهبت إليه) هو عدم محاولة استخدام NSViews كما لو كانت uiviews وبدلاً من ذلك رسم المحتوى باستخدام DrawRect. :) ليس هذا أسرع بمليار مرة فقط ، بل إنه يعمل فقط (TM) مع تمرير الزخم لأنه هو كيف تتوقع OSX القيام بالأشياء.

كرر بعدي: OSX ليس iPhoneos ..: P

نصائح أخرى

يمكن أن يحدث سلوك التمرير الفردي عندما لا تقوم بتعيين خط التمرير وخصائص التمرير الخاصة بـ NSScrollView نفسها.

علاوة على ذلك ، سيكون عليك ببساطة الحصول على ماوس سحري - يمكن قوله بسهولة أم لا :-) - لاختبار هذا بنفسك أو نشر الكود الكامل لمرضتك المخصصة وكذلك XIB التي تحتوي عليها. لا توجد طريقة يمكن للآخرين تقديمها لك أكثر من التخمينات (مثل ما سبق) بدونها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top