2011-07-07 14 views
12

यह सोच रहा था कि मैं http://www.cardflick.co/ या https://squareup.com/cardcase डेमो वीडियो जैसे UIView को फ्लिकिंग या फ़्लिंग करने के बारे में सोचूंगा।आईओएस ड्रैग, फ्लिक या फ्लिंगिंग UIView

मुझे पता है कि आइटम कैसे खींचें, लेकिन आप उन्हें गुरुत्वाकर्षण/जड़ता कैसे देते हैं। क्या यह आईओएस द्वारा संभाला जाता है?

उत्तर

42

प्रभाव है कि आप गुरुत्वाकर्षण के एक राजा/जड़ता आसानी बाहर के माध्यम से उत्पादन किया जा सकता अनुकरण के रूप में वर्णन कर रहे हैं की तरह (तेज, अंत शुरू धीमी गति से) और आसानी में (तेजी से शुरू धीमी गति से, अंत) समय कार्य

आईओएस में आसान और आसान करने के लिए समर्थन आईओएस में उपलब्ध है, इसलिए मुझे नहीं लगता कि आपको किसी बाहरी पुस्तकालय की आवश्यकता है और न ही कड़ी मेहनत है (हालांकि, जैसा कि आप कल्पना कर सकते हैं, आपके प्रभाव को बहुत अच्छी ट्यूनिंग की आवश्यकता होगी)।

यह एक आसानी बाहर प्रभाव के साथ दी गई स्थिति के लिए एक वस्तु का अनुवाद चेतन जाएगा:

[UIView animateWithDuration:2.0 delay:0 
     options:UIViewAnimationOptionCurveEaseOut 
     animations:^ { 
       self.image.center = finalPosition; 
     } 
     completion:NULL]; 
} 

आप एक UIPanGestureRecognizer के माध्यम से अपना इशारा संभाल रहे हैं, तो इशारा पहचानकर्ता के लिए दो महत्वपूर्ण जानकारी के साथ प्रदान करेगा अंतिम स्थिति की गणना करें: velocity और translation, जो क्रमशः प्रतिनिधित्व करते हैं कि वस्तु कितनी तेज़ी से और कितनी तेजी से स्थानांतरित की गई थी।

आप इस तरह अपने ध्यान में रखते हुए एक पैन इशारा पहचानकर्ता स्थापित कर सकते हैं (इस वस्तु आप चेतन चाहते हैं हो सकता है, मुझे लगता है कि):

UIPanGestureRecognizer* panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)]; 
    [yourView addGestureRecognizer:panGestureRecognizer]; 
      [panGestureRecognizer release]; 

और फिर अपने हैंडलर में एनीमेशन संभाल:

- (void)handlePanFrom:(UIPanGestureRecognizer*)recognizer { 

    CGPoint translation = [recognizer translationInView:recognizer.view]; 
    CGPoint velocity = [recognizer velocityInView:recognizer.view]; 

    if (recognizer.state == UIGestureRecognizerStateBegan) {  
    } else if (recognizer.state == UIGestureRecognizerStateChanged) { 
     <track the movement> 
    } else if (recognizer.state == UIGestureRecognizerStateEnded) { 
     <animate to final position> 
    } 
} 
+0

अगर एनीमेशन पूरा होने से पहले आप फिर से पैन करना चाहते हैं तो मुझे एनीमेशन को रोकने की ज़रूरत है तो मुझे क्या करना चाहिए? एनीमेशन हमेशा पूरा होने तक चलता है। – Howard

+0

"इंटरप्टिबल एनिमेशन" को गुगल करने का प्रयास करें या एक नया प्रश्न पोस्ट करें (और अगर आपको पसंद है तो टिप्पणियों में मुझे पिंग करें)। – sergio

+0

मैंने पाया कि एनीमेशन को पूरा करने से पहले मेरा काम पूरा हो गया है। धन्यवाद। – Howard

0

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

1

आईओएस में गुरुत्वाकर्षण/जड़ता के लिए कोई अंतर्निहित एपीआई नहीं है। आपका सबसे अच्छा विकल्प हैं:

  1. एनिमेशन के साथ प्रभाव अनुकरण: यदि आप (यह बातें उछाल की जरूरत नहीं है) एक लक्ष्य की ओर एक वस्तु flicking कर रहे हैं, तो आप शायद एक बहुत अच्छा परिणाम सिर्फ भेज कर प्राप्त कर सकते हैं यह लक्ष्य और एनीमेशन समय वक्र tweaking करने के लिए।

  2. भौतिकी पुस्तकालय का उपयोग करें। Chipmunk एक उच्च गुणवत्ता वाला है और बहुत सारे आईओएस समर्थन उपलब्ध हैं। आप ऑब्जेक्ट्स सेट अप करते हैं, उन्हें वजन देते हैं, उनके आकार का वर्णन करते हैं, और फिर लाइब्रेरी कोड आपको अपडेट (x, y) निर्देशांक प्रदान करेगा ताकि आप स्क्रीन पर अपनी ऑब्जेक्ट्स अपडेट कर सकें।

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