2012-04-01 21 views
9

तो मेरे पास UIView का सबक्लास है जो छूने का अनुमान लगाता है। दृश्य का पता केवल तभी स्पर्श होता है जब स्पर्श वर्तमान दृश्य के अंदर शुरू होता है। जब स्पर्श दृश्य के बाहर शुरू होते हैं और वे मेरे कस्टम दृश्य स्पर्श के अंदर जाते हैं तो हटाया नहीं जाता है। चल रहे स्पर्शों का पता लगाने के लिए कोई समाधान जो वर्तमान दृश्य में शुरू नहीं हुआ है?आईओएस - UIView में स्पर्श का पता लगाना?

@implementation MycustomView 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    // This only gets called if touches have started in the current View 
} 

@end 
+1

इस दस्तावेज और इरादा व्यवहार है। शायद अगर आप * अंतर्दृष्टि * में कुछ अंतर्दृष्टि देते हैं तो आप * कैसे * के साथ आपकी मदद कर सकते हैं। – NJones

+0

मेरे पास स्क्रीन पर कई कस्टम दृश्य हैं जिन्हें मैं UIViews को पहचानना चाहता हूं क्योंकि स्पर्श उनके ऊपर – aryaxt

उत्तर

20

निम्नलिखित समाधान काम किया। मेरे पास MyCustomView के कई उदाहरण हैं; स्पर्श के लिए कदम मैं विचारों कि छुआ जा रहा है

मैं अपने superView को MyCustomView से स्पर्श का पता लगाने चलती समाप्त हो गया पता लगाने के लिए चाहते हैं, इसलिए निम्न कोड MyCustomView वर्ग में नहीं रह गया है के रूप में:

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

    for (UIView *view in self.contentView.subviews) 
    { 
     if ([view isKindOfClass:[MyCustomView class]] && 
      CGRectContainsPoint(view.frame, touchLocation)) 
     { 

     } 
    } 
} 
1

इस इसे ठीक करना चाहिए:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    for (UIView* subView in self.subviews) 
    { 
     if([subView pointInside:[self convertPoint:touch toView:subView] withEvent:event]) 
     { 
      //do your code here 
     } 
    } 
} 
+0

पर चलता है, यह वही व्यवहार करता है जो मेरे पास पहले से है। मेरे स्पर्श 5 अलग-अलग UIViews को पास करते हैं, और यह हमेशा पहला दृश्य देता है कि छल्ले – aryaxt

+0

से छूए गए स्पर्शों की प्रतिलिपि बनाई गई विधि .. यह देखने के लिए कि आप वहां क्या कर रहे हैं .. – skytz

+0

कोड ठीक है जो आपने पोस्ट किया है, सिवाय इसके कि मेरे पास एक एनएसएलएल है इसमें: एनएसएलओजी (@ "% @", [स्पर्श दृश्य]); – aryaxt

0

एक ही रास्ता ऐसा करने के लिए (हालांकि अन्य हो सकते हैं) सबव्यू के लिए उपयोगकर्ता इंटरैक्शन को अक्षम करना है और अपने माता-पिता को आंदोलन को ट्रैक करना है (hitTest विधि का उपयोग यह पता लगाने के लिए करें कि स्पर्श वर्तमान में किस दृश्य को खत्म कर रहा है)।

0

इस प्रयास करें ....

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    for(UITouch *touch in touches) 
    { 
     CGPoint touchPointFirstBtn = [touch locationInView:self.ChordView]; 
     if(CGRectContainsPoint(_btnC.frame, touchPointFirstBtn)) 
     { 
      if (!_btnC.isHighlighted) 
      { 
       if(!Boolean) 
       { 
        title = @"C"; 
        [_tlbView reloadData]; 
        NSLog(@"%@",@"touches C"); 

       } 
       [_btnC setHighlighted:YES]; 
       Boolean = YES; 

      } 
     } 
     else 
     { 
      [_btnC setHighlighted:NO]; 
      Boolean = NO; 
     } 
} 
संबंधित मुद्दे