티스토리 뷰

Mobile/ios

[ios] ios 17: 핀치 제스처

춘햄 2022. 12. 23. 13:37

핀치 제스처 또한 iOS에서 가장 많이 사용하는 동작 중 하나로, 두 손가락을 화면에 터치한 후 간격을 벌리고 좁히는 동작으로 화면을 확대, 축소할 때 많이 사용한다.

 

기본적으로 제스처를 다루는 방법은 앞서 진행했던 스와이프 제스처와 아주 비슷하기 때문에 그렇게 어려운 내용은 없다.

 

핀치 제스처로 폰트를 조절하는 예제와 이미지의 크기를 조절하는 예제를 다뤄보려고 한다.


우선, 텍스트의 폰트를 조절하기 위해 스토리보드에 레이블을 하나 올려두자.

코드도 굉장히 간단하다.

 

import UIKit

class ViewController: UIViewController {
    @IBOutlet var txtPinch: UILabel!
    
    var initialFontSize:CGFloat!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        // UIPinchGestureRecognizer 객체 생성 후 @objc 메서드를 넘겨줌
        let pinch = UIPinchGestureRecognizer(target: self, action: #selector(ViewController.doPinch(_:)))
        
        // View에 GestureRecognizer 등록
        self.view.addGestureRecognizer(pinch)
    }

    @objc func doPinch(_ pinch: UIPinchGestureRecognizer) {
        if (pinch.state == UIGestureRecognizer.State.began) {
            initialFontSize = txtPinch.font.pointSize
        } else {
            txtPinch.font = txtPinch.font.withSize(initialFontSize * pinch.scale)
        }
    }

}

UIPinchGestureRecognizer 객체를 하나 생성하여, 제스처를 받았을 때 호출할 @objc함수를 인자로 넣어주고 View에 등록하기만 하면 된다.


이미지도 마찬가지로 구성하면 된다.

import UIKit

class ViewController: UIViewController {

    @IBOutlet var imgPinch: UIImageView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        // UIPinchGestureRecognizer 선언
        let pinch = UIPinchGestureRecognizer(target: self, action: #selector(ViewController.doPinch(_:)))
        
        // view에 Pinch 제스처 등록
        self.view.addGestureRecognizer(pinch)
    }
    
    @objc func doPinch(_ pinch: UIPinchGestureRecognizer) {
        // 이미지를 스케일에 맞게 변환
        imgPinch.transform = imgPinch.transform.scaledBy(x: pinch.scale, y: pinch.scale)
        
        // 다음 변환을 위한 핀치 속성 = 1
        pinch.scale = 1
    }


}

 

 

끝!!

Comments