2010-11-30 9 views
7

दौरान जवाब नहीं है मैं एक खींचने योग्य वर्ग कि UIImageView विरासत है। जब दृश्य एनिमेट नहीं होता है तो ड्रैग ठीक काम करता है। लेकिन जब इसे एनिमेट करने से छूने का जवाब नहीं मिलेगा। एक बार एनीमेशन पूरा हो जाने पर स्पर्श फिर से काम करता है। लेकिन मुझे स्पर्श पर एनीमेशन को रोकने और फिर स्पर्श होने पर फिर से शुरू करने की आवश्यकता है। मैं पूरा दिन बिताया यह शोध लेकिन कारण समझ नहीं सकता है।UIView touchesBegan एनीमेशन

यहाँ मेरी एनीमेशन कोड है।

[UIView animateWithDuration:5.0f 
    delay:0 
    options:(UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction) 
    animations:^{ 
    self.center = CGPointMake(160,240); 
    self.transform = CGAffineTransformIdentity; 
    } 
    completion:nil 
]; 

- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event { 
    NSLog(@"touch"); 
    CGPoint pt = [[touches anyObject] locationInView:self]; 
    startLocation = pt; 
    [self.layer removeAllAnimations]; 
    [[self superview] bringSubviewToFront:self]; 
} 

उत्तर

9

ऐसा इसलिए है क्योंकि आईओएस एनीमेशन शुरू होने पर आपके एनिमेटिंग व्यू को लक्ष्य स्थिति में रखता है, लेकिन इसे पथ पर खींचता है। तो यदि आप चलते समय दृश्य को टैप करते हैं, तो आप वास्तव में अपने फ्रेम से कहीं भी टैप करते हैं।

अपने animating देखने के init में, नहीं करने के लिए userInteractionEnabled सेट। तो टच इवेंट पर्यवेक्षण द्वारा संभाला जाता है।

self.userInteractionEnabled = NO; 

अपने पर्यवेक्षण के स्पर्शों में बीजगन विधि, अपने एनिमेटिंग व्यू की प्रस्तुति लेयर स्थिति की जांच करें। यदि वे स्पर्श स्थिति से मेल खाते हैं, तो उस दृश्य को स्पर्श करेंगेगन संदेश को रीडायरेक्ट करें।

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    CGPoint point = [[touches anyObject] locationInView:self.view]; 
    CGPoint presentationPosition = [[animatingView.layer presentationLayer] position]; 

    if (point.x > presentationPosition.x - 10 && point.x < presentationPosition.x + 10 
     && point.y > presentationPosition.y - 10 && point.y < presentationPosition.y + 10) { 
     [animatingView touchesBegan:touches withEvent:event]; 
    } 
} 
+0

शानदार। धन्यवाद! – bzlm

+0

btw मैं इस के साथ परेशानी लिया है स्थिति एनिमेट नहीं है, लेकिन एक और संपत्ति ('मेरे मामले में frame') है, तब भी जब ... आप अभी भी, नल है कि बस निगल लिया हो पाने भले ही दृश्य की' hitTest' और 'pointInside' विधियों को बुलाया जाता है और ठीक से वापस आ जाता है। इसके अलावा, मैं बस कर रहा हूं 'अगर ([पॉइंट इनसाइड: पॉइंट इनवेंट: इवेंट])' - ढलान के 10 अंक की आवश्यकता नहीं है – AlexChaffee