2012-01-30 27 views
7

मेरे पास एक ऐसा दृश्य है जिसे उपयोगकर्ता बढ़ने या घटाने के लिए चुटकी कर सकता है। मैं इसे दो अक्षों के साथ काम करना चाहता हूं - यदि चुटकी अधिकतर क्षैतिज है, तो यह वस्तु क्षैतिज रूप से बढ़ेगी/घट जाएगी, लेकिन यदि चुटकी अधिकतर लंबवत है, तो यह वस्तु को लंबवत रूप से बढ़ाना/छोटा कर देगा।क्या मैं क्षैतिज और ऊर्ध्वाधर चुटकी के बीच अंतर करने के लिए UIPinchGestureRecognizers का उपयोग कर सकता हूं?

क्या मैं इसे एक या दो चुटकी पहचानकर्ताओं के साथ प्राप्त कर सकता हूं, और यदि हां, तो कैसे?

उत्तर

12

आप इसके लिए UIPinchGestureRecognizer का उपयोग करने में सक्षम हो सकते हैं, लेकिन आपको यह पता लगाने के लिए कोड लिखना होगा कि चुटकी क्षैतिज या लंबवत है या नहीं। मैंने इसका परीक्षण नहीं किया है:

typedef enum { 
    PinchAxisNone, 
    PinchAxisHorizontal, 
    PinchAxisVertical 
} PinchAxis; 

PinchAxis pinchGestureRecognizerAxis(UIPinchGestureRecognizer *r) { 
    UIView *view = r.view; 
    CGPoint touch0 = [r locationOfTouch:0 inView:view]; 
    CGPoint touch1 = [r locationOfTouch:1 inView:view]; 
    CGFloat tangent = fabsf((touch1.y - touch0.y)/(touch1.x - touch0.x)); 
    return 
     tangent <= 0.2679491924f ? PinchAxisHorizontal // 15 degrees 
     : tangent >= 3.7320508076f ? PinchAxisVertical // 75 degrees 
     : PinchAxisNone; 
} 
+0

शानदार दृष्टिकोण! – perrohunter

+0

अच्छा, लेकिन 1. मुझे लगता है कि आप 'fabsf ((touch1.y - touch0.y)/(touch1.x - touch0.x) का अर्थ है)' ', पिछले घटक के लिए' x' के साथ। 2. आपको पहले पूरी तरह लंबवत की जांच करनी चाहिए, 'अगर (touch1.x == touch0.x) वापसी PinchAxisVertical; 'शून्य से विभाजित रोकने के लिए; 3. ध्यान दें कि यह आपकी उंगलियों के सापेक्ष आंदोलन को एक-दूसरे के संबंध में आपकी दो अंगुलियों के कोण का परीक्षण नहीं करता है। मूल त्रिकोणमिति को वास्तव में डेल्टा पर देखा जाने वाला कुछ भी लागू किया जा सकता है, लेकिन यह "आपकी उंगलियों के आंदोलन के कोण" के बजाय "आपकी उंगलियों की स्थिति का कोण" है। – Rob

+0

आप पिछले 'y' को 'x' होने की आवश्यकता के बारे में सही हैं। मैंने इसे ठीक कर दिया है। इसे नोट करने के लिए धन्यवाद। हालांकि, शून्य से विभाजन की जांच करने की कोई आवश्यकता नहीं है, क्योंकि यह फ़्लोटिंग-पॉइंट अनंतता उत्पन्न करेगा, जिसके बाद की सशर्त अभिव्यक्ति सही ढंग से संभालती है। –

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

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