كيفية استدعاء طريقة مرة واحدة فقط أثناء - (الفراغ) اللمس؟

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

سؤال

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

مشكلتي هي، أريد فقط أن تفعل الأشياء عندما أدخل الإطار - ليس عندما أقوم بنقل إصبعي داخل الإطار.

لا أحد يعرف كيف يمكنني استدعاء أساليب بلدي مرة واحدة فقط أثناء وجودي داخل الإطار، وما زلت تسمح لي بالاتصال بها مرة أخرى إذا أعد إدخالها في نفس اللمس.

شكرا لك.

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [[event touchesForView:self.view] anyObject];

    CGPoint location = [touch locationInView:touch.view];

    if(CGRectContainsPoint(p1.frame, location))
    {
            //I only want the below to me called 
            // once while I am inside this frame
        [self pP01];
        [p1 setHighlighted:YES];
    }else {
        [p1 setHighlighted:NO];
    }
}
هل كانت مفيدة؟

المحلول

يمكنك استخدام سمة بعضها للتحقق مما إذا كان الرمز يسمى بالفعل عندما كنت تدخل منطقة معينة. يبدو وكأن الحالة المميزة من p1 كائن (غير متأكد من ما هو عليه) قد يكون مناسبا لذلك:

if(CGRectContainsPoint(p1.frame, location))
{
   if (!p1.isHighlighted){ // We entered the area but have not run highlighting code yet
        //I only want the below to me called 
        // once while I am inside this frame
      [self pP01];
      [p1 setHighlighted:YES];
   }
}else { // We left the area - so we'll call highlighting code when we enter next time
    [p1 setHighlighted:NO];
}

نصائح أخرى

Simply add a BOOL أن تحقق في اللمس وإعادة تعيين في اللمس

if( CGRectContainsPoint([p1 frame],[touch locationInView:self.view])) {
   NSLog (@"Touch Moved over p1");
  if (!p14.isHighlighted) {
   [self action: p1];
   p1.highlighted = YES; 
   }
  }else {
   p1.highlighted = NO;
  }

حاول استخدام اتصال uibutton واستخدام اتصال "سحب السحب أدخل" في باني واجهة.

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