لا يتم استدعاء إيسويبيجيستوريكوغنيزر @محدد بسبب إيبانجيستوريكوغنيزر إعداد

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

سؤال

في بلدي دائرة الرقابة الداخلية التطبيق لدي ما يلي إعداد:

- (void)setupGestures
{
   UIPanGestureRecognizer* panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGesture:)];                                                           
   [self.view addGestureRecognizer:panRecognizer];

   UISwipeGestureRecognizer* swipeUpRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];

   [swipeUpRecognizer setDirection:UISwipeGestureRecognizerDirectionUp];
   [self.view addGestureRecognizer:swipeUpRecognizer];
}

// then I have following implementation of selectors

// this method supposed to give me the length of the swipe

- (void)panGesture:(UIPanGestureRecognizer *)sender 
{
   if (sender.state == UIGestureRecognizerStateBegan)
   {
      startLocation = [sender locationInView:self.view];
   }
   else if (sender.state == UIGestureRecognizerStateEnded)
   {
      CGPoint stopLocation = [sender locationInView:self.view];
      CGFloat dx = stopLocation.x - startLocation.x;
      CGFloat dy = stopLocation.y - startLocation.y;
      CGFloat distance = sqrt(dx*dx + dy*dy );
      NSLog(@"Distance: %f", distance);
   }
 }

 // this  method does all other actions related to swipes

- (void)handleSwipe:(UISwipeGestureRecognizer *)gestureRecognizer
{
 UISwipeGestureRecognizerDirection direction = [gestureRecognizer direction];
     CGPoint touchLocation = [gestureRecognizer locationInView:playerLayerView];

     if (direction == UISwipeGestureRecognizerDirectionDown && touchLocation.y >  (playerLayerView.frame.size.height * .5))
     {
        if (![toolbar isHidden])
        {
           if (selectedSegmentIndex != UISegmentedControlNoSegment)
           {
              [self dismissBottomPanel];
           }
           else
           {
             [self dismissToolbar];
           }
        }
     }
 }

لذا فإن المشكلة هي أن هاندلسويب لا يتم استدعاؤها أبدا...عندما أعلق خارج إيبانجيستوريكوغنيزر إعداد ، هاندلسويب يبدأ العمل.

أنا جديد جدا في برمجة التعرف على الإيماءات ، لذلك أفترض أنني أفتقد شيئا أساسيا هنا.

أي نوع من المساعدة هو محل تقدير كبير!

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

المحلول

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

لجعلها على حد سواء العمل ، وجعل صفك delegate لفتات وتنفيذ

– gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:

للعودة YES.

لتعيين واحد للعمل فقط إذا فشل الآخر ، استخدم requireGestureRecognizerToFail:.

نصائح أخرى

الإيماءات الانتقالية والمقاييس متشابهة جدا والتي تسبب الارتباك،

هناك عدد قليل من العلاجات:

  1. لا تقم بإعداد عموم واسحب على نفس الرأي - يمكن ضبطه على فئة فرعية مختلفة لمنع التشكيك.

  2. استخدم معروفا آخر للتسجيل للتبديل مثل الصنبور المزدوج أو نقرة 2 إصبع نظرا لأن هذا لا يمكن تفسيره على أنه عموم

  3. استخدم طريقة المفوض - التركيب: يجب أن

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

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