IOS में Pan और Swipe में क्या अंतर है?


129

सरल लगता है .. ट्रैकपैड को पकड़ो, उंगली को हिलाओ, जारी करें .. लेकिन किसी तरह स्वाइप को ट्रिगर नहीं किया जा रहा है (इसके बजाय पैन को ट्रिगर किया गया है)

UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] 
      initWithTarget:v action:@selector(handleSwipe:)];
swipeGesture.direction= UISwipeGestureRecognizerDirectionUp;
[v addGestureRecognizer:swipeGesture];

पान को इसके बजाय उपरोक्त अनुक्रम से पहचाना जाता है।

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] 
      initWithTarget:v action:@selector(handlePan:)];
[v addGestureRecognizer: panGesture];

अगर पैन पर टिप्पणी की जाती है, तो उसी इशारे से स्वाइप को मान्यता दी जाती है .. इसके साथ 2 प्रश्न:

  • पैन और स्वाइप में क्या अंतर है?
  • IPhone सिम्युलेटर पर कोई स्वाइप कैसे अनुकरण कर सकता है?

1
@rickster, मुझे सही करें अगर मैं गलत हूं, लेकिन स्वाइप चार दिशाओं का उपयोग करता है, ऊपर, नीचे, बाएं, दाएं, और पैन कोई भी दिशा हो सकती है। सही
विक्टर एंगेल

जवाबों:


231

परिभाषा के अनुसार, एक कड़ी चोट इशारा भी एक पैन इशारा है - दोनों में स्पर्श बिंदुओं के अनुवाद संबंधी आंदोलन शामिल हैं। अंतर पहचानकर्ता शब्दार्थ में होता है: एक पैन पहचानकर्ता अनुवादकारी आंदोलन की शुरुआत के लिए देखता है और समय के साथ किसी भी दिशा में आंदोलन की रिपोर्ट करना जारी रखता है, जबकि एक स्वाइप पहचानकर्ता एक तात्कालिक निर्णय लेता है कि क्या उपयोगकर्ता का स्पर्श आवश्यक दिशा में रैखिक रूप से चला गया है।

डिफ़ॉल्ट रूप से, कोई भी दो पहचानकर्ता एक ही इशारे को नहीं पहचानेंगे, इसलिए पैन और स्वाइप के बीच एक संघर्ष है। सबसे अधिक संभावना है, आपका पैन पहचानकर्ता संघर्ष को "जीतता है" क्योंकि इसका इशारा सरल / अधिक सामान्य है: एक स्वाइप एक पैन है, लेकिन पैन एक स्वाइप नहीं हो सकता है, इसलिए पैन पहले पहचानता है और अन्य पहचानकर्ताओं को बाहर करता है।

आपको प्रतिनिधि पद्धति का उपयोग करके इस संघर्ष को हल करने में सक्षम होना चाहिए gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:, या शायद प्रतिनिधि के बिना पैन पहचानकर्ता के साथ स्वाइप पहचानकर्ता पर निर्भर होना चाहिए requireGestureRecognizerToFail:

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


24
अच्छा उत्तर। लेकिन मुझे नहीं लगता कि यह पैन जेस्चर जीतता है क्योंकि यह अधिक सामान्य है, बल्कि इसलिए कि यह एक निरंतर इशारा है (जहां एक स्वाइप एक असतत इशारा है) इसलिए एक पैन एक स्वाइप से पहले पहचाना जाता है। स्वाइप को केवल उंगली उठाए जाने पर ही पहचाना जाता है, उंगली के हिलने के तुरंत बाद पैन को पहचान लिया जाता है। इवेंट पीजी में "दो जेस्चर पहचानकर्ताओं के लिए एक विशिष्ट आदेश की घोषणा" के तहत स्वाइप बनाम पैन को अच्छी तरह से कवर किया गया है।
नेवण राजा king

27

स्वाइप जेस्चर तब काम करेगा जब आप अपनी उंगली को केवल कुछ दिशाओं में खींचें (ऊपर स्वाइप करें, नीचे स्वाइप करें, लेफ्ट स्वाइप करें, राइट स्वाइप करें)। उदाहरण के लिए टेबल व्यू कंट्रोलर में स्वाइप करने योग्य सेल।

जब आप अपनी उंगली किसी भी दिशा में खींचते हैं, तो पैन जेस्चर काम करेगा। आप इसे त्वरण या मंदी दे सकते हैं। एफओआर उदाहरण, एक वस्तु को एक स्थान से दूसरे स्थान पर ले जाना या स्पिनर को स्पिन करना ।।


3

सेब दस्तावेज के अनुसार। Apple UIPanGestureRecognizer एक पैन और नीचे के रूप में एक कड़ी चोट के बीच का अंतर: -

UIPanGestureRecognizer का एक ठोस उपवर्ग है UIGestureRecognizer कि दिखता है (खींच) पैनिंग के लिए इशारों। उपयोगकर्ता को पैन करते समय एक या अधिक उंगलियों को एक दृश्य पर दबाया जाना चाहिए। इस जेस्चर पहचानकर्ता के लिए एक्शन विधि को लागू करने वाले ग्राहक इसे इशारे के वर्तमान अनुवाद और वेग के लिए पूछ सकते हैं।

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

इस वर्ग के ग्राहक, अपने एक्शन तरीकों में, इशारे के वर्तमान अनुवाद ( अनुवाद में (:) में ) और अनुवाद के वेग (वेग में :) ) के लिए UIPANGestureRecognizer ऑब्जेक्ट को क्वेरी कर सकते हैं । वे उस दृश्य को निर्दिष्ट कर सकते हैं जिसका समन्वय प्रणाली अनुवाद और वेग मूल्यों के लिए उपयोग किया जाना चाहिए। ग्राहक अनुवाद को वांछित मूल्य पर रीसेट भी कर सकते हैं।

स्विफ्ट 3 UIPANGestureRecognizer डेमो उदाहरण: - संसाधन लिंक

import UIKit

class ViewController: UIViewController {
// this records our circle's center for use as an offset while dragging
var circleCenter: CGPoint!

override func viewDidLoad() {
    super.viewDidLoad()

    // Add a draggable view
    let circle = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 100.0, height: 100.0))
    circle.center = self.view.center
    circle.layer.cornerRadius = 50.0
    circle.backgroundColor = UIColor.green()

    // add pan gesture recognizer to
    circle.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(self.dragCircle)))

    self.view.addSubview(circle)
}

func dragCircle(gesture: UIPanGestureRecognizer) {
    let target = gesture.view!

    switch gesture.state {
    case .began, .ended:
        circleCenter = target.center
    case .changed:
        let translation = gesture.translation(in: self.view)
        target.center = CGPoint(x: circleCenter!.x + translation.x, y: circleCenter!.y + translation.y)
    default: break
    }
  }
}

सेब दस्तावेज के अनुसार। Apple UITapGestureRecognizer

UITapGestureRecognizer का एक ठोस उपवर्ग है UIGestureRecognizer कि एक या कई नल के लिए दिखता है। पहचाने जाने वाले हावभाव के लिए, उंगलियों की निर्दिष्ट संख्या को दृश्य को कई बार निर्दिष्ट संख्या में टैप करना होगा।

हालांकि नल असतत इशारे हैं, लेकिन वे हावभाव पहचानकर्ता के प्रत्येक राज्य के लिए असतत हैं; इस प्रकार संबंधित क्रिया संदेश तब भेजा जाता है जब इशारा शुरू होता है और इशारे की समाप्ति स्थिति तक (और शामिल) प्रत्येक मध्यवर्ती स्थिति के लिए भेजा जाता है। कोड जो नल के इशारों को संभालता है उसे इशारे की स्थिति के लिए परीक्षण करना चाहिए।

स्विफ्ट 3 UITapGestureRecognizer डेमो उदाहरण संसाधन लिंक

override func viewDidLoad() {
   super.viewDidLoad()

   let tap = UITapGestureRecognizer(target: self, action: #selector(doubleTapped))
   tap.numberOfTapsRequired = 2
   view.addGestureRecognizer(tap)
}
func doubleTapped() {
     // do something cool here
     print("Test TapGesture")
}

उदाहरण छवि पहचानकर्ता के लिएयहाँ छवि विवरण दर्ज करें


सवाल पैन और स्वाइप क्रियाओं के बीच अंतर और iPhone सिम्युलेटर पर उनके बीच अंतर करने के तरीके के बारे में है। यह जवाब उन मुद्दों में से किसी को भी संबोधित नहीं करता है, क्योंकि इसमें न तो स्वाइप जेस्चर और न ही आईफोन सिमुलेटर का उल्लेख है।
विंस ओ'सुलीवन

@ विंसो सुलिवन मैं पान और स्वाइप की परिभाषा समझाने की कोशिश करूंगा। मुझे उम्मीद है कि दोनों के बीच अंतर करने के लिए समझ में आएगा।
रेक्स

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

@ विंसो सुलिवान मैं इसे सरल उदाहरण और ऐप्पल डॉक्यूमेंट डिफेक्शन के साथ आसान तरीके से समझाता हूं। मुझे लगता है कि यह विषय और तस्वीर दोनों पर अधिक ध्यान केंद्रित करता है जो कि iOS में टच पैटर्न दिखाता है।
रेक्स

0

Http://hammerjs.github.io/ के अनुसार , मुझे लगता है कि अंतर है:

  • pan: दिशाओं को एक ही बड़े दृश्य में ले जाएं
  • स्वाइप: कई दृश्यों के बीच स्विच करें

इशारा समान है, दोनों एक उंगली का उपयोग करते हैं और चलते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.