본문 바로가기
Swift

Multi touch gesture

by 루에 2015. 10. 23.
반응형

멀티터치는 기본적으로 탭(싱글클릭을 이용한 두드리기), 끌기(pan), 밀기(swipe), 핀치(pinch), 회전(rotate), 롱 터치, 화면모서리 끌기(screen edge pan)가 제공된다.


사용방법은 멀티터치를 할 뷰에 라이브러리의 제스쳐 인식기(5가지)를 안으로 끌어다놓으면 설정된다.


가장 중요한 것은 xcode에서 기본적으로 멀티터치를 제공하지 않는다는 점이다. 인스펙터에 보면



Interaction 항목에 있는 두 가지를 모두 체크해야 활성화된다.


아래는 제스쳐 인식기를 이용한 기본적인 코드이다. 코드를 보고 활용하면 된다.


간단히 설명하자면, 제스쳐 인식기 객체를 만들고 뷰 컨트롤러를 담는다. 그리고 이미지뷰에 인식기를 등록하고 selector로 지정한 메소드에서 코드를 구현한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 
import UIKit
 
class ViewController: UIViewController {
  @IBOutlet weak var imageView: UIImageView!
  
  override func viewDidLoad() {
    super.viewDidLoad()
    
    let pinchGesture = UIPinchGestureRecognizer(target: self, action: Selector("handlePinch:"))
    imageView.addGestureRecognizer(pinchGesture)
    
    let rotateGesture = UIRotationGestureRecognizer(target: self, action: Selector("handleRotate:"))
    imageView.addGestureRecognizer(rotateGesture)
    
    let tapGesture = UITapGestureRecognizer(target: self, action: "handleTap:")
    imageView.addGestureRecognizer(tapGesture)
    
    let panGesture = UIPanGestureRecognizer(target: self, action: "handlePan:")
    imageView.addGestureRecognizer(panGesture)
  }
  
  func handlePinch(gesture : UIPinchGestureRecognizer) {
    let scale = gesture.scale
    let transform = CGAffineTransformScale(imageView.transform, scale, scale)
    imageView.layer.setAffineTransform(transform)
    
    // 연속된 제스처 이벤트이므로 다시 초기화
    gesture.scale = 1.0
  }
  
  func handleTap(gesture : UITapGestureRecognizer) {
    let point = gesture.locationInView(gesture.view)
    print("탭 좌표 : \(point)")
  }
  
  func handleRotate(gesture : UIRotationGestureRecognizer) {
    print("회전")
    let rotation = gesture.rotation
    let transform = CGAffineTransformRotate(imageView.transform, rotation)
    imageView.layer.setAffineTransform(transform)
    
    // 연속된 제스처 이벤트이므로 초기화
    gesture.rotation = 0.0
  }
  
  func handlePan(gesture : UIPanGestureRecognizer) {
    let translation = gesture.translationInView(gesture.view!)
    let transform = CGAffineTransformTranslate(imageView.transform, translation.x, translation.y)
    
    imageView.layer.setAffineTransform(transform)
    // 초기화
    gesture.setTranslation(CGPointZero, inView: gesture.view)
  }
}
 
cs


반응형

댓글