2011-02-12 16 views
8

मैं एक UIView पर टैप करना चाहता हूं और खींच सकता हूं और वह दृश्य मेरी अंगुली का पालन करता है, काफी सरल है। लेकिन ऐसा करने का सबसे आसान तरीका ऑब्जेक्ट सेंटर को सेट करना है जहां टैप हुआ था (जो मैं नहीं चाहता हूं), मैं इसे स्थानांतरित करना चाहता हूं जैसे आपने ऑब्जेक्ट को कहीं भी टैप किया हो।UIView को उंगली के नीचे खींचें

ऐसा करने का एक बहुत ही उपयोगी तरीका था और यह आईट्यून्स यू वीडियो में से एक में संदर्भित था। लिपि ने डेल्टाएक्स, डेल्टाई का उपयोग उस छवि को खींचने के लिए नहीं किया था जहां आपने अपनी उंगली के नीचे केंद्र रखने के बजाय उस पर टैप किया था, लेकिन मुझे याद नहीं आया कि वह कोड क्या था!

क्या किसी के पास इस कोड का संदर्भ है? या शायद uiview.center = tap.center अवधारणा के बिना उंगली के नीचे UIViews को स्थानांतरित करने का एक प्रभावी तरीका है?

+1

जवाब करता है मदद? यदि ऐसा है तो कृपया इसे सही के रूप में जांचें या अन्यथा उत्तर दें ... – TigerCoding

+0

उसने जवाब दिया - वह वह नहीं था जिसे वह ढूंढ रहा था। – xil3

+0

कभी समाधान ढूंढें? मैं उस व्यक्ति को देखने के लिए उत्सुक हूं जिसने डेल्टा का उपयोग नहीं किया जैसा आपने दावा किया था। – sean

उत्तर

0

मुझे लगता है कि आप शिकारी अनुप्रयोग के बारे में बात कर रहे हैं ...

// Tell the "stalker" rectangle to move to each touch-down 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [UIView beginAnimations:@"stalk" context:nil]; 
    [UIView setAnimationDuration:1]; 
    //[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 

    // touches is an NSSet. Take any single UITouch from the set 
    UITouch *touch = [touches anyObject]; 

    // Move the rectangle to the location of the touch 
    stalker.center = [touch locationInView:self]; 
    [UIView commitAnimations]; 
} 
+1

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

+1

@ Parad0x13 अरे क्या आपको अपनी जांच के लिए कोई समाधान मिला है? तो कृपया मुझे बताएं क्योंकि मुझे एक ही स्थिति का सामना करना पड़ रहा है और मुझे इसे हल करने की जरूरत है। –

0

आप दोनों बिंदु जहां छुआ (टी) और देखने की वर्तमान स्थिति को बचा सकता है (ओ)। स्पर्श में, आप इसे (ओ-टी) जोड़कर नए बिंदु के आधार पर ले जा सकते हैं।

+0

ठीक है, मैं यह कर सकता था। लेकिन ऐसा करने के लिए एक और क्लीनर तरीका है। UIView के लिए मूल रूप से एक ढांचा है जो गणित करने के बिना मैं जो चाहता हूं उसे पूरा कर सकता हूं – Parad0x13

+1

मैं क्षमा चाहता हूं। क्या आप पूछ रहे हैं या पुष्टि कर रहे हैं? :) यदि आपको ऐसा ढांचा मिल गया है, तो ज्ञान को सार्वजनिक बनाने के लिए यहां एक टिप्पणी जोड़ें (या अपने स्वयं के प्रश्न का उत्तर दें)! ;) –

6

यहां ऐप्पल की मूवमे परियोजना से कोड है, यह touchesMoved विधि में ऐसा करने के लिए है। यह UIView (PlacardView) को स्पर्श करने और उपयोगकर्ता के स्पर्श के स्थान पर जाने के लिए अनुमति देता है। उम्मीद है की यह मदद करेगा।

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 

UITouch *touch = [touches anyObject]; 

// If the touch was in the placardView, move the placardView to its location 
if ([touch view] == placardView) { 
    CGPoint location = [touch locationInView:self]; 
    placardView.center = location; 
    return; 
    } 
} 
+4

इसके साथ समस्या यह है कि यदि आप दृश्य में शुरू किए बिना अपनी अंगुली की घटना को स्थानांतरित करते हैं, तो यह इसकी स्थिति बदल देगा, और इससे कूद निकलता है। –

+0

यह पहले से ही सही दिशा में इशारा कर रहा है! लेकिन जब मैंने इसे पढ़ा तो मैंने यही सोचा :) –

9

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

ताकि आप gesture.view में प्रवेश करने की नहीं होने पर, आपको अपनी स्थिति में इस अनुकूलन कर सकते हैं ... आदि

-(void)dragging:(UIPanGestureRecognizer *)gesture 
{ 
    if(gesture.state == UIGestureRecognizerStateBegan) 
    { 
     //NSLog(@"Received a pan gesture"); 
     self.panCoord = [gesture locationInView:gesture.view]; 


    } 
    CGPoint newCoord = [gesture locationInView:gesture.view]; 
    float dX = newCoord.x-panCoord.x; 
    float dY = newCoord.y-panCoord.y; 

gesture.view.frame = CGRectMake(gesture.view.frame.origin.x+dX, gesture.view.frame.origin.y+dY, gesture.view.frame.size.width, gesture.view.frame.size.height); 
} 

स्विफ्ट 4:

@objc func handleTap(_ sender: UIPanGestureRecognizer) { 
     if(sender.state == .began) { 
      self.panCoord = sender.location(in: sender.view) 
     } 

     let newCoord: CGPoint = sender.location(in: sender.view) 

     let dX = newCoord.x - panCoord.x 
     let dY = newCoord.y - panCoord.y 

     sender.view?.frame = CGRect(x: (sender.view?.frame.origin.x)!+dX, y: (sender.view?.frame.origin.y)!+dY, width: (sender.view?.frame.size.width)!, height: (sender.view?.frame.size.height)!) 
    } 
+2

आपके कोड में "panCoord" क्या है? –

+0

मेरी माफ़ी, पैनकॉर्ड स्थानीय सीजीपॉइंट है जो इस बात पर नजर रखता है कि वर्तमान में इसे कहां रखा जा रहा है। मुझे एहसास नहीं था कि निर्भरता वहां थी और अनसुलझा। –

+0

"कहां से स्थानांतरित करें" के वर्तमान स्थान को स्टोर करने के लिए कृपया एक CGPoint panCoord जोड़ें, धन्यवाद श्रीमान! –

संबंधित मुद्दे