반응형
멀티터치는 기본적으로 탭(싱글클릭을 이용한 두드리기), 끌기(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 |
반응형
댓글