/ / स्वाइप की दिशा निर्धारित करने वाला स्टेटमेंट - आईओएस, स्विफ्ट

स्वाइप की दिशा निर्धारित करने वाला स्टेटमेंट - आईओएस, स्विफ्ट

मैं एक अगर बयान के वेग की जाँच कर रहा हैऑब्जेक्ट I "मूविंग (एक छवि)। कथन का बिंदु यह निर्धारित करना है कि किस तरह से छवि को प्रभावित किया जा रहा है, और एक बार ऐसा करने पर, यह या तो एक्स या वाई प्लेन को लॉक कर देता है, ताकि यह" सॉ स्मूथ लेफ्ट "और" सही आंदोलन, या चिकनी और नीचे आंदोलन।

जैसा कि कोड नीचे है (दाईं ओर पहले की जाँच)आंदोलन, फिर छोड़ दिया, इसलिए) यदि आप बाएं या दाएं जा रहे हैं, तो आंदोलन बहुत चिकना है। हालांकि, कभी-कभी, जब आंदोलन को ऊपर या नीचे प्रभावित करने की कोशिश की जाती है, तो यह बाएं और दाएं आंदोलन में बंद हो जाता है। यह मैं विश्वास है क्योंकि यह बाएँ और दाएँ आंदोलन के लिए बयान में पहली बार देख रहा है। अगर मैं ऊपर और नीचे की ओर पहले जाँच किया जा रहा है, बाएँ और दाएँ आंदोलन के बजाय तड़का हुआ हो जाता है। क्या ऐसा करने के लिए इससे अच्छा तरीका है?

let velocity = recognizer.velocity(in: self.view)
if velocity.x > 75 {
movingRight = true
myBlocks[objectDragging].center.y = CGFloat(initPosy)
} else if velocity.x < -75 {
movingLeft = true
myBlocks[objectDragging].center.y = CGFloat(initPosy)
} else if velocity.y < -30 {
movingUp = true
myBlocks[objectDragging].center.x = CGFloat(initPosx)
} else {
movingDown = true
myBlocks[objectDragging].center.x = CGFloat(initPosx)
}

उत्तर:

जवाब के लिए 2 № 1

इसके साथ एक समस्या का उदाहरण यह है कि जब आपके पास बहुत तेज़ गति होती है और थोड़ी सी दाईं ओर, जैसे: x = 78, y = -450 यह निश्चित रूप से ऊर्ध्वाधर आंदोलन का एक उदाहरण है, लेकिन आपके एल्गोरिथ्म को यह जानने के लिए कि आपको तुलना करने की आवश्यकता है velocity.x तथा velocity.y मान। ऐसा करने का बेहतर तरीका यह होगा कि इसकी जांच करें कि किस अक्ष में वेग का उच्चतम निरपेक्ष मूल्य है। आपके मामले में भी इसे बढ़ाया जाना चाहिए (जैसा कि क्षैतिज गति के लिए दहलीज 75 है और ऊर्ध्वाधर आंदोलन 30 के लिए है)।

if abs(velocity.x) > abs(velocity.y * 2.5) {
// this is horizontal movement
}
else {
// this is vertical movement
}

उत्तर № 2 के लिए 1

शायद आपको जांचना चाहिए कि किस दिशा में पहले अधिक परिमाण है, और फिर यह तय करें कि क्या यह सकारात्मक या नकारात्मक है।

let velocity = recognizer.velocity(in: self.view)
if abs(velocity.x) > abs(velocity.y) {
//going left/right
if velocity.x > 0 {
movingRight = true
myBlocks[objectDragging].center.y = CGFloat(initPosy)
} else {
movingLeft = true
myBlocks[objectDragging].center.y = CGFloat(initPosy)
}
} else {
if velocity.y > 0 {
movingUp = true
myBlocks[objectDragging].center.x = CGFloat(initPosx)
} else {
movingDown = true
myBlocks[objectDragging].center.x = CGFloat(initPosx)
}
}

जैसा कि @johnyu का सुझाव है - आप क्षैतिज बनाम ऊर्ध्वाधर आंदोलन की तुलना करने के लिए एक कारक का उपयोग कर सकते हैं।