iOS에서 Pan과 Swipe의 차이점은 무엇입니까?


129

간단하게 들립니다 .. 트랙 패드를 잡고 손가락을 release 다음 손을 떼십시오 .

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];

팬에 댓글을 달면 스 와이프가 같은 동작으로 인식됩니다.

  • 팬과 스 와이프의 차이점은 무엇입니까?
  • iPhone 시뮬레이터에서 스 와이프를 시뮬레이션하는 방법은 무엇입니까?

1
@rickster, 내가 틀렸다면 나를 고치십시오. 맞다
Victor Engel

답변:


231

정의상, 스 와이프 제스처는 필연적으로 팬 제스처입니다. 둘 다 터치 포인트의 병진 이동과 관련이 있습니다. 차이점은 인식기 시맨틱에 있습니다. 팬 인식기는 병진 이동의 시작을 찾고 시간이 지남에 따라 어떤 방향 으로든 움직임을 계속보고하지만, 스 와이프 인식기는 사용자의 터치가 필요한 방향으로 선형으로 이동했는지 여부를 즉시 결정합니다.

기본적으로 두 인식기가 동일한 동작을 인식하지 않으므로 이동 및 스 와이프간에 충돌이 있습니다. 팬 인식기는 제스처가 더 단순하고 더 일반적이기 때문에 충돌을 "승리합니다": 스 와이프는 팬이지만 팬이 스 와이프하지 않을 수 있으므로 팬이 먼저 인식하고 다른 인식기를 제외합니다.

위임 방법 gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:을 사용하거나 팬 인식기를와 슬쩍 인식기에 의존하게하여 위임없이이 충돌을 해결할 수 있어야합니다 requireGestureRecognizerToFail:.

충돌이 해결되면 마우스를 빠르게 드래그하여 한 손가락 스 와이프를 시뮬레이션 할 수 있습니다. (마우스가 손가락보다 정확하기는하지만 장치에서 실제 작업을 수행하는 것보다 약간 더 까다 롭습니다.) Option & Shift 키를 누르면 두 손가락으로 팬 / 스 와이프 할 수 있습니다.


24
좋은 대답입니다. 그러나 팬 제스처가 더 일반적이기 때문에이기는 것이 아니라 오히려 연속 제스처 (스 와이프가 개별 제스처 임)이므로 팬이 스 와이프 전에 인식되기 때문입니다. 스 와이프는 손가락을 들어 올릴 때만 인식되며 팬은 손가락이 움직이기 시작한 직후에 인식됩니다. 스 와이프와 팬은 이벤트 PG에서 "두 제스처 인식기에 대한 특정 순서 선언"에 잘 설명되어 있습니다.
nevan king

27

손가락을 특정 방향으로 만 드래그하면 (스 와이프, 아래로 스 와이프, 왼쪽으로 스 와이프, 오른쪽으로 스 와이프) 스 와이프 제스처가 작동합니다. 예를 들어 테이블 뷰 컨트롤러의 스 와이프 가능한 셀

손가락을 원하는 방향으로 드래그하면 팬 제스처가 작동합니다. 당신은 그것에 가속 또는 감속을 줄 수 있습니다. 예를 들어, 한 장소에서 다른 장소로 객체를 이동하거나 스피너를 회전시키는 경우 ..


3

사과 문서에 따라. Apple UIPanGestureRecognizer 다음과 같이 팬과 스 와이프의 차이점 :-

UIPanGestureRecognizer 는 패닝 (드래깅) 제스처를 찾는 UIGestureRecognizer 의 구체적인 하위 클래스입니다 . 사용자는 뷰를 이동하는 동안 하나 이상의 손가락을 뷰에서 눌러야합니다. 이 제스처 인식기에 대한 동작 방법을 구현하는 클라이언트는 제스처의 현재 변환 및 속도를 요청할 수 있습니다.

패닝 제스처는 연속적입니다. 허용되는 최소 손가락 수 ( minimumNumberOfTouches )가 팬으로 간주 될만큼 충분히 움직일 때 시작 ( 시작 )됩니다 . 최소 손가락을 눌렀을 때 손가락이 움직이면 변경 (변경)됩니다. 그것은 (종료 종료 모든 손가락을 들어 올릴 때).

이 클래스의 클라이언트는 조치 메소드에서 현재 제스처 변환 (translation (in :) ) 및 변환 속도 (velocity (in :) )에 대해 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 시뮬레이터에서 동작을 구별하는 방법에 관한 것입니다. 이 답변은 슬쩍 제스처 또는 iPhone 시뮬레이터를 언급하지 않기 때문에 이러한 문제를 해결하지 못합니다.
빈스 오 설리번

@ VinceO'Sullivan 저는 Pan and Swipe의 정의를 설명하려고 노력할 것입니다. 두 가지를 구별하는 것이 이해되기를 바랍니다.
Rex

원래 게시물은 5 살이며 승인 된 답변이 있습니다 (약 200 개의 투표권 있음). 추가 할 유용한 것이 없다고 생각합니다 (지금 작동하는 방식과 허용 된 답변에서 작동하는 방식 사이에 차이가 없다면).
빈스 오 설리번

@ VinceO'Sullivan 간단한 예제와 애플 문서 정의로 쉽게 설명합니다. iOS의 주제와 사진 쇼 터치 패턴 모두에 더 초점을 맞추고 있다고 생각합니다.
Rex

0

http://hammerjs.github.io/ 에 따르면 차이점은 다음과 같습니다.

  • 이동 : 동일한 큰보기에서 길 찾기
  • 스 와이프 : 여러보기 간 전환

제스처는 동일합니다. 한 손가락을 사용하고 움직입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.