कैसे UITouch घटनाओं की एक अनुक्रम को रद्द करने के?

वोट
20

मैं एक है UIImageका मानना है कि घटनाओं को छूने के लिए प्रतिक्रिया करता है। मैं स्पर्श अनुक्रम, यानी, के लिए आगे कॉल रद्द करना चाहते हैं touchesMoved:, स्पर्श कुछ सीमा के बाहर हो जाता है। मैं उसे कैसे कर सकता हूँ?

मुझे पता है कि में touchesMoved:मैं स्पर्श वस्तु के निर्देशांक का निरीक्षण किया और इसे अनदेखा कर सकते हैं, लेकिन क्या मैं नहीं जानता कि कुल मिलाकर अनुक्रम बंद करने का तरीका है। मैं किसी भी विधि में दर्ज नहीं दिख रहा है Apple डेवलपर UIResponderसंदर्भ है कि मैं एक स्पर्श अनुक्रम रद्द करने के लिए कह सकते हैं।

10/02/2009 को 19:37
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


12 जवाब

वोट
6

यह समाधान एक सा kludgy हो सकता है, लेकिन आप को लागू करने और मैन्युअल रूप से कह सकते हैं

- (void) touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

मैं कुछ फेरबदल मैं एप्पल के पर moveme नमूना एप्लिकेशन पर किया था पर शिथिल इस समाधान आधारित कर रहा हूँ iPhone नमूना कोड साइट है जहाँ मैं संशोधित touchesMovedइस तरह देखने के लिए विधि:

- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
     UITouch *touch = [touches anyObject];
     if ([touch view] == placardView)
         CGPoint location = [touch locationInView:self];
         placardView.center = location;
         // I added the following line:
         [self touchesCancelled:touches withEvent:event];
         return;
}
10/02/2009 को 20:51
का स्रोत उपयोगकर्ता

वोट
3

नहीं करने के लिए UIImageView के userInteractionEnabled संपत्ति की स्थापना अस्थायी प्रयास करें

28/11/2011 को 04:30
का स्रोत उपयोगकर्ता

वोट
3

आप कॉल करने की आवश्यकता [super touchesMoved:withEvent:]आदेश सुपर व्यू कार्यक्रम से साफ लेकिन अधिक महत्वपूर्ण है, तो आप की जरूरत है यह बताने के लिए में नहीं कहते हैं [super touchesCancelled:withEvent:]

यहाँ है कि मैं क्या एक सेल पर इस्तेमाल किया यह चयनित हो रही है जब मैं एक कड़ी चोट का पता चला से रखने के लिए है:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    if (!showingEdit) {
        if (IS_FAR_ENOUGH_TO_BE_A_SWIPE) {
            RESPOND_TO_SWIPE
            showingEdit = YES;
            [super touchesCancelled:touches withEvent:event];
        } else {
            [super touchesMoved:touches withEvent:event];
        }
    }
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    if (!showingEdit) {
        [super touchesEnded:touches withEvent:event];
    }
}
13/05/2010 को 01:50
का स्रोत उपयोगकर्ता

वोट
2

मैं यह संभव है क्योंकि मैं इसे दस्तावेज और इन समाधानों में से कोई भी काम नहीं दिख रहा है नहीं लगता है।

21/11/2011 को 05:23
का स्रोत उपयोगकर्ता

वोट
2

मैं हाल ही में एक ही समस्या का सामना करना पड़ा और इसे हल करने के लिए एक मानक तरीका मिल गया है। आप अपने पूरे एप्लिकेशन को touchesMoved घटनाओं डिलीवरी बंद करने के [[UIApplication sharedApplication] beginIgnoringInteractionEvents] का उपयोग कर सकते हैं। [[UIApplication sharedApplication] endIgnoringInteractionEvents] का उपयोग कर जब आप छूता है फिर से प्राप्त करने की आवश्यकता के लिए उन्हें सक्षम करने के लिए सुनिश्चित करें।

05/04/2010 को 10:30
का स्रोत उपयोगकर्ता

वोट
1

मैं अपने superview से देखने को दूर करने और यह सीधे वापस जोड़कर इस लक्ष्य को हासिल।

[view retain];
UIView *sv = view.superview;
[view removeFromSuperview];
[sv addSubview:view];
[view release];

यह दृश्य तो किसी भी शेष छूता दृश्य पर प्राप्त नहीं होगा करने के लिए प्रत्युत्तर श्रृंखला टूट जाता है। अगले स्पर्श अभी भी सामान्य रूप में प्राप्त हो जाएगा।

03/08/2016 को 10:44
का स्रोत उपयोगकर्ता

वोट
1

इस कोड को मदद मिलेगी। मैं में स्पर्श घटना को निष्क्रिय touchesMoved:विधि और मैं में स्पर्श घटना को सक्षम करने हूँ touchesCancelled:विधि

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

     //Condition when you want to disable touch event

     [[UIApplication sharedApplication] beginIgnoringInteractionEvents];

     .......
     .......
     Your code
     .......
     .......
 }


- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    [[UIApplication sharedApplication] endIgnoringInteractionEvents];
}
21/08/2014 को 11:31
का स्रोत उपयोगकर्ता

वोट
1

"ब्रूट बल" समाधान के आधार अगर यह अपनी आवश्यकताओं सूट: निकालें और subview कि अंतिम रूप प्राप्त करता है या उन्हें का जवाब (बेशक फ्रेम और सामग्री की देखभाल) फिर से आरंभ कर देगा।

24/03/2013 को 21:56
का स्रोत उपयोगकर्ता

वोट
0

मैं तो बस कुछ इस तरह हल करने के लिए कोशिश कर रहा था, और पाया समाधान में से कोई भी सूचीबद्ध है कि उसे मेरे लिए काम किया। सबसे अच्छा मैं प्रबंधन कर सकते हैं अस्थायी रूप से छूता है अनदेखी की गई थी, लेकिन तब वे फिर से शुरू किया जब स्पर्श दृश्य फिर से प्रवेश किया।

अंत में इसे हल।

  1. "अक्षम" एक बूलियन ध्वज बुलाया सेट करें
  2. touchedMoved में, पहले जांच करें कि स्पर्श वांछित दृश्य के अंदर है। यदि ऐसा नहीं है, हाँ करने के लिए विकलांग ध्वज सेट।
  3. touchedMoved में में फिर भी, अपने क्रिया करने से पहले ध्वज की जाँच करें। तो, इस बिंदु पर, कुछ नहीं अगर वे दृश्य से बाहर रहते समय होगा।
  4. touchesEnded में, नहीं करने के लिए विकलांग ध्वज सेट। तो स्पर्श अनुक्रम को प्रभावी ढंग से रोक दिया जब तक उपयोगकर्ता अपने उंगली लिफ्टों है।

मुझे लगता है कि जब तक आप सचमुच रद्द स्पर्श अनुक्रम की आवश्यकता होगी, के लिए एक विशेष कारण है यह आपके लिए काम करेंगे।

13/01/2013 को 15:41
का स्रोत उपयोगकर्ता

वोट
0

iOS5 पर UITouch में एक निजी विधि प्रतीत हो रहा है

-(void)setSentTouchesEnded:(BOOL)ended;

सेब के क्रियान्वयन के आधार पर यह ईवेंट भेजने से रोक सकता है

ऐसा करने का एक और तरीका है साहचर्य वस्तुओं का उपयोग करेंगे

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    if ([(NSNumber *)objc_getAssociatedObject(touch, &outKey) boolValue])
        return;
    if (sometouchisoutsideofview) {
        objc_setAssociatedObject(touch, &outKey, [NSNumber numberWithBool:YES], OBJC_ASSOCIATION_RETAIN);
    }
}
25/11/2011 को 19:44
का स्रोत उपयोगकर्ता

वोट
-1

आप UITouch के लिए श्रेणी बना सकते हैं। आप घोषित करने के लिए कर सकते हैं

@property (nonatomic,strong,readwrite) UIView *view;

और जब आप नहीं के बराबर करने के लिए touch.view बदलने के लिए, उदाहरण के लिए, आप संपर्क घटनाओं भेजने के अंत अनुकरण कर सकते हैं

17/04/2013 को 20:43
का स्रोत उपयोगकर्ता

वोट
-2

आपको लगता है कि जांच कर सकते हैं, स्पर्श बिंदु स्थानों पर स्थित हैं CGRect या नहीं (यानी। अंक अपने imageView की आयत में हैं)। वे कहते हैं कि रेक्ट में नहीं हैं, तो स्पर्श रद्द कर दिया जाएगा।

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
 {
UITouch *touch = [touches anyObject];
CGPoint touchLocation = [touch locationInView:self.view];

    if (CGRectContainsPoint(myImageView, touchLocation))
    {
       lastPoint = [touch locationInView: myImageView];
    }

    NSLog(@"Last :%.2f - %.2f",lastPoint.x, lastPoint.y);   
  }

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

     if (CGRectContainsPoint(myImageView.frame, touchLocation))
     {
       currentPoint = [touch locationInView: myImageView];
     }
 }
24/11/2011 को 06:44
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more