티스토리 뷰

iOS

iOS ) Gesture Recognizer - Screen Edge Pan

Zedd0202 2018. 1. 2. 18:14
반응형

녕하세요 :) Zedd입니다.

오늘은 Screen Edge Pan Gesture를 알아봅시당.


Screen Edge Pan Gesture Recognizer



Pan  Gesture는 저번시간에 배웠죠?

: <Gesture Recognizer - Pan>

근데 Screen Edge Pan Gesture래요. 뭔가 뭔가 느낌으로 끝부분..? 스크린의 가장자리부분 Gesture? 근데 그냥 Gesture도 아니고 Pan Gesture?

라는 느낌이 드네요. 

그러니까 좀 정리해보면  Screen Edge Pan Gesture Recognizer는 뭔가 스크린의 가장자리에서 Panning(드래그)하는 Gesture를 감지하는 것 같네요..

일단 Apple문서의 정의를 봅시다.


"A gesture recognizer that looks for panning (dragging) gestures that start near an edge of the screen."

"화면 가장자리 근처에서 시작하는 panning(드래그) gestures를 찾는 gesture recognizer입니다"


오...맞았음...

그럼 우리가 아는 Screen Edge Pan Gesture는 모가 있을까요?

⭐️뒤로가기⭐️






네비게이션 컨트롤러에서는 딱히~~~gesture를 우리가 등록해주지 않았음에도 불구하고 스크린 가장자리에 대고 쫙 밀면 뒤로 가지죠?

위 움짤에서 볼 수 있듯이 중간에서 밀면 반응하지 않구요!!!!!

여기서 Screen Edge Pan Gesture Recognizer가 사용됐다고 볼 수 있겠네요 :)

뒤로가기 말고도, 스크린 가장자리 밑에서의 Gesture는 컨트롤센터를 보여주고..이런것도 다 Screen Edge Pan Gesture Recognizer겠죠? 




Apple문서를 조금 더 자세하게 봅시다.


시스템에서는 Screen Edge Pan Gesture를 사용하여 ViewController전환을 시작합니다. 이 클래스를 사용하여 자신의 액션에 대해 동일한 Gesture동작을 복제할 수 있습니다.

Screen Edge Pan Gesture Recognizer를 만든 후에는 Gesture Recognizer를 View에 연결하기 전에 edges프로퍼티에 적절한 값을 할당하세요.

이 프로퍼티를 사용하여 Gesture를 시작할 가장자리를 지정할 수 있습니다. 이 Gesture Recognizer는 첫번째 터치를 넘어서는 모든 터치를 무시합니다.


라고 합니다.. 한줄한줄이 힌트로 넘쳐나네요. XD

일단 해봅시다...그 일단은 네비게이션컨트롤러에서는 "기본"으로 Screen Edge Pan Gesture Recognizer가 장착되어있으니..

예제를 모할까 생각해보다가 우리가 왼쪽 스크린 가장자리를 밀면 한단계 낮은 View로 돌아갈 수 있었죠?

그럼..오른쪽 스크린 가장자리를 밀면...위 움짤에서 버튼을 누른것과 같은 행동을 해주게 만들어봅시다.


우리 늘...하던 거 있죠?

일단 프로젝트를 만들어주시고, Screen Edge Pan Gesture Recognizer를 View에 추가해주세요. IBOutlet과 IBAction을 만들어주는 것도 잊지마세용 :)

일단 Apple이 뭐라고 그랬죠??????

"Screen Edge Pan Gesture Recognizer를 만든 후에는 Gesture Recognizer를 View에 연결하기 전에 edges프로퍼티에 적절한 값을 할당하세요."

그렇습니다.. 니가 어느 Screen Edge Pan Gesture를 인식하게 할거니????를 정해주는 작업입니다. 

저희는 "오른쪽" 가장자리를 밀면 다른 View가 Push되게 해주고 싶죠?

그럼 오른쪽으로 설정하면 되겠네요!

viewDidLoad()에


  1.  screenEdgePanGestureRecognizer.edges = .right



위 코드를 넣어주었어요.



  1.  @IBAction func edgePanGestureAction(_ sender: Any) {

            print("edgePanGesture")

        }



저는 일단 무조건 print문 하나 해보고 시작하는데,





다른 Gesture들처럼 엄청 많이 불릴 줄 알았는데...왜 2개밖에 안불리지......

하고 Screen Edge Pan Gesture Recognizer 이거는 다른 Gesture들이랑 좀 다른가? 했는데...

혹시나해서 폰으로 해보니까 다른 Gesture들처럼 엄청 많이 불림 ㅎㅎ...여러분들 폰으로 테스트 하세요...

암튼 그래서 


  1.   @IBAction func edgePanGestureAction(_ sender: Any) {

           performSegue(withIdentifier: "Segueshow", sender: self)

        }



이렇게 했더니......




 

Screen Edge Pan Gesture Recognizer의 IBAction은 여러번 불리기 때문에 당연히 performSegue도 여러번 불림.........ㅎㅋㅎㅋㅎ....

폰에서는 2번보다 훨씬 더 많이 불린답니다;;;;;;ㅎㅎ;;;

저는 flag변수 써서 처리해줬는데...다른방법이 있다면 추천 부탁드려요.. delegate에도 딱 action이 한번만 불리게 하는 그런건 없어서...ㅠㅠ


  1.   override func viewWillAppear(_ animated: Bool) {

            flag = true

        }

     @IBAction func edgePanGestureAction(_ sender: Any) {

        if flag { performSegue(withIdentifier: "Segueshow", sender: self) }

        flag = false

        }



viewWillAppear에서 flag를 true로 안만들어주면, 한번 Screen Edge Pan Gesture Recognizer action이 불리고나면 다시는 안불리겠죠?

그러니까 꼭해줘야합니다!

저는 이 방법밖에,.....모르겠네요..ㅎㅎ

아무튼 다른 Gesture보다는 간단한 것 같아요 :)


그리고 Screen Edge Pan Gesture Recognizer역시 Pan Gesture Recognizer입니다.

즉!! 저번시간에 했었던 translation이라던가 velocity등, Pan Gesture Recognizer에서 할 수 있는 기능들을 다 할 수 있어요!

하지만........스크린 가장자리에서 굳이 해야겠냐는 문제...

아무튼 오늘도 도움이 되었길 바래요 :) 

위 코드를 좀 더 예쁘게? 할 수 있는 방법이라던가 궁금한점, 지적할 점 등은 댓글이나 PC화면 오른쪽 하단의 채널서비스를 이용해주세요 XD..



반응형