الاستعلام عن العدد الحالي من اللمسات على الشاشة دون استخدام الأحداث على اي فون

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

سؤال

لدي طلب أن يبدأ تشغيل صوت عند المستخدم اللمسات uiview تغيير نغمات مختلفة مثل الشرائح المستخدم الإصبع على الشاشة.صوت توقف عندما يرفع المستخدم الإصبع.

أنا باستخدام touchesBegan ، انتقلت وانتهت الأحداث هذا.

مشكلتي هي اللمسات انتهى (و/أو إلغاء) هي في بعض الأحيان لم تطلق بشكل صحيح و الصوت يستمر اللعب حتى بعد إصبع يرفع من الشاشة.

لذلك كحل أود أن تنفيذ الموقت التي من شأنها أن تحقق عدد من اللمسات على الشاشة وإذا كان من صفر فإنه سوف تحقق ووقف audioplayer إذا لعب.

لقد تم البحث على بعض التعليمات البرمجية التي يمكن أن يحصل لي عدد من اللمسات مثل

UITouch *اللمسات=[النفس getAllTouchesonScreen];

أو شيء :)

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

المحلول

لا يتم إطلاق اللمسات في بعض الأحيان.

لقد حاولت تعيين نقاط الاستراحة للمس اللمسات التي تم إلغاؤها واللمس المنتهية ، وفي بعض الأحيان لا تصل.

جرب برنامج Glpaint Sample من موقع Apple الإلكتروني وجرب NSLOG في Toches انتهت وقم ببعض الرسومات السريعة على الشاشة ورفع الإصبع بسرعة ، مثل رمي الإصبع خارج الشاشة.

ستعرف ما أعنيه. إن حلي الحالي لهذا ينطوي على مقياس التسارع :)

تلميح: أنا أستخدم هذا للعثور على جميع الأحداث: (باطل) SendEvent: (uievent *) حدث

نصائح أخرى

NSSet *allTouches = [event allTouches];
for(GLuint index = 0; index < [allTouches count]; ++index)
{
    UITouch *touch = [[allTouches allObjects] objectAtIndex:index];
    if([touch phase] != UITouchPhaseCancelled)
    {
        CGPoint touchPoint = [touch locationInView:self];
        //do something with touchPoint that has state [touch phase]
    }
}

يمكنك استخدام هذا الرمز في كل لمسة الحدث وظائف(touchesBegan, touchesEnded, touchesMoved) و يمكنك الاعتماد اللمسات تعرف الدول.

لا تنسى touchescanceled. أضف هذه الوظيفة/الطريقة و NSLOG عندما تنتهي اللمس هناك ، أعتقد أنك ستجد بعض اللمسات المفقودة.

إذا كنت تبحث عن عدد النقر - النقر في نفس المكان أكثر من مرة دون تحريك الإصبع كثيرًا - يمكنك الحصول عليه عبر:

-(void)iPhoneTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

UITouch *touch = [touches anyObject];
CGPoint touchPosition = [touch locationInView:self];
lastTouchTime = [touch timestamp];
myTouchCount = [touch tapCount];

لكنني أفعل ذلك أيضًا باستخدام Touchesmoved لترى إلى أي مدى تحركه وإلغاء القدرة على مضاعفة/Triple Tap إذا كان أي من الصنابير قد تم تحريكه بعيدًا جدًا ، وحساب الصنابير طالما كنت في حالة نقرة صالحة.

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