2010-03-19 13 views
5

यह मजाकिया लग सकता है, लेकिन मैंने UIView और कुछ ट्रिग का उपयोग करके यथार्थवादी रोटेशन के साथ घुटने को फिर से बनाने की कोशिश करने में घंटों बिताए। मैंने लक्ष्य हासिल किया, लेकिन अब मैं यह नहीं जान सकता कि कैसे घुटने बाएं या दाएं घूर्णन कर रहा है। गणित का सबसे उचित हिस्सा यहाँ है:छूने पर UIView की रोटेशन दिशा प्राप्त करें

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

    float dx = pt.x - iv.center.x; 
    float dy = pt.y - iv.center.y; 
    float ang = atan2(dy,dx); 

    //do the rotation 
    if (deltaAngle == 0.0) { 
     deltaAngle = ang; 
     initialTransform = iv.transform; 
    }else 
    { 
     float angleDif = deltaAngle - ang; 
     CGAffineTransform newTrans = CGAffineTransformRotate(initialTransform, -angleDif); 
     iv.transform = newTrans; 
     currentValue = [self goodDegrees:radiansToDegrees(angleDif)]; 
    } 
} 

आदर्श, मैं एक अंकीय मान का लाभ उठाने सकता है मुझे बताने की अगर रोटेशन सकारात्मक या नकारात्मक है।

उत्तर

3

यदि आपके घुटने का केंद्र बिंदु उस छवि का केंद्र है जिसका उपयोग आप अपने घुंडी के लिए कर रहे हैं तो आपको यह पता लगाने में सक्षम होना चाहिए कि स्पर्श केंद्र के बाएं/दाएं ओर शुरू होता है और ऊपर/नीचे की ओर जाता है। यदि स्पर्श बाईं ओर शुरू होता है और नीचे की ओर बढ़ रहा है तो इसे बाईं ओर घुमाया जा रहा है। केंद्र के दूसरी तरफ शुरू होने वाले स्पर्शों के विपरीत। आप यह पता लगा सकते हैं कि स्पर्शों को एक सरणी में लगातार एक्स निर्देशांक रखकर ऊपर या नीचे आगे बढ़ रहे हैं, जिसमें छूने वाला तरीका विधि और सरल तुलना करना है।

0

धन्यवाद रीमूवर। यह मेरी जरूरत के करीब है, लेकिन अंत में, चूंकि घुंडी वस्तु एक नियंत्रक वर्ग में एक घटना उत्तीर्ण कर रही है, इसलिए मुझे घूर्णन से मूल्य मापने के लिए एक तरीका चाहिए ... यानी: 340 * CClockWise पर 94% है। वैसे भी, मैंने उपर्युक्त विधि का उपयोग करके इसे हल कर लिया और वर्तमान प्रतिनिधि को एक प्रतिनिधि को पास कर दिया। प्रतिनिधि तो उस विधि ले जाएगा और इसके साथ ही निजी नाव है, यदि मूल्य अधिक या प्राप्त अंतिम मान से कम है तुलना:

// प्रतिनिधि आखिरी कॉल वापस #pragma निशान UIKnobViewDelegate से मापने के लिए एक निजी मान का उपयोग करता - (शून्य) डायलवैल्यू: (फ्लोट) मान { अगर (अंतिम वैल्यू == 0.00) { अंतिम वैल्यू = अंतिम वैल्यू; } यदि (मूल्य

वहां से, हमारे नियंत्रक इसे कुछ भी कर सकते हैं