티스토리 뷰

반응형


안녕하세요 :) Zedd입니다.

iOS 13 ) UIModalPresentationStyle (1)에 이어 

UIAdaptivePresentationControllerDelegate메소드들을 공부해보도록 할게요.

뭔 Delegate인지 부터 알아야겠죠?



UIAdaptivePresentationControllerDelegate





UIAdaptivePresentationControllerDelegate에 새로운 메소드들이 추가되었는데요. 일단 UIAdaptivePresentationControllerDelegate가 어떤 프로토콜인지 알아봅시다.


presentation controller와 함께 app의 trait변화에 응답하는 방법을 결정하는 일련의 메소드..

(in conjunction with이 ~와 함께, ~와 관련하여..라는 뜻을 가지고 있대요..?)


라고 합니다. 


이 프로토콜을 준수하는 객체를 구현 한 후, 해당 객체를 적절한 UIPresentationController 객체의 delegate 프로퍼티에 할당하삼

Delegate는 콘텐츠를 표시하기 위해 새로운 presentation style 또는 완전히 새로운 ViewController를 제안 할 수 있습니다. 


ㅁ..


ㅇㅋ..



자 그럼 무슨 메소드가 추가된거임?



요 4개.

전부 iOS 13+ 부터 사용가능한 메소드들입니다.


근데 ㅇㅐ플넘들 이름 하나는 잘 지어서 이름만 봐도 언제 불릴지 알 것 같음....

첫번째꺼부터 봅시다.



그 전에!!!!!!!!!!!!!!!!!

그 전에..네...그 전에 하나만 공부하고 갑시다.

isModalInPresentation. iOS 13.0+ 부터 사용 가능합니다.

즉 새로나와따..

이거 먼저 봅시다.


정의는 view controller가 modal behavior를 적용하는지 여부를 나타내는 boolean값.



자;; 더 보겠습니다.

일단 default value는 false입니다!

이걸 true로 set하면,  

UIKit은 viewController의 bounds 바깥에서 일어나는 이벤트를 무시하고,

view controller가 화면에 있는 동안, interactive dismissal(그 제스쳐로 내리는거)도 막음 ㅋㅎ


false니까!! 지금처럼 interactive dismissal도 할 수 있는거임ㅇㅇ



이러케


true로 주면..?



이렇게 interactive dismissal가 안먹히게 됩니다. 신기하넹


자 일단 위에서 isModalInPresentation을 true로 한 걸 다시 원복해주고 시작할게요. 


그리고 진짜 첫번째 메소드 볼라했는데 또 세팅작업이 필요합니다..

모?


UIAdaptivePresentationControllerDelegate

ㅇㅇ


아니 얘가...제가 잘 모르겠는데..저는 그냥 navigationController로 안감싸주고 시작했는데...얘 delegate설정이

 


이런식이더라구요? 네..암튼 하라는데로 해줍니다.

SecondViewController는 우리가 modal로 띄울 viewController입니다.



"진짜" 첫번째 메소드부터 봅시다.



아니 이 자신감 뭐지?...

정의도 없다?...


자 이름만 보면 아하 내가 Dismiss를 시도할때..

그러니까 interactive dismissal을 하면 얘가 불리겠구나! 하고 생각...

저는 생각...했는데요..


실제로 해보면,




자 이상태에서 실제로 해보면, -DidAttemptToDismiss가 불리지 않습니다!

근데 위에서 우리가 본 isModalInPresentation프로퍼티를 true로 set하면,

-DidAttemptToDismiss가 불리게 됩니다. 


띠용

암튼 해봄;;



true로 주겠음


그리고 빌드해보겠



자 이렇게 presentationControllerDidAttemptToDismiss가 불리는 것을 알 수 있습니다.


왜그러냐구요..?



몰라...

WWDCㅇㅔ서 말했으니....그런거겠죠....?

자 암튼 위 그림에서 볼 수 있듯이 

isModalInPresentation이 True면, -DidAttemptToDismiss가 불리게 됩니다. 


자 그럼 다시 isModelInPresentation을 false로 원복하고,

사실 순서는 상관없긴 하지만, 4번째, 2번째 메소드를 봅시다. 

-WillDismiss와

-DidDismiss입니다.


이건 뭐 이름만 봐도...알 수 있죠.


ㅇㅇ 생각하는 그거임..


자 다음은 마지막 메소드인



-ShouldDismiss입니다.


다른넘들과 다르게



Bool을 리턴합니다. 


아 장난하나 ㅈ정의가 없어 정의가

ㅡㅡ


true를 리턴하니, 걍 똑같습니다. 

interactive dismissal 제스쳐도 잘 먹고...Will/DidDismiss도 잘 불립니다.


그럼 false를 리턴해보겠삼



interactive dismissal 제스쳐가 막히는걸 볼 수 읶ㅆ음

엥 이거 isModalInPresentation을 true로 한 결과랑 똑같네?



네..



뭐 그렇다고 하는데 어쩌겠음.//..ㅋ....


애플이 올려준 예제 프로젝트는



이렇게 뭔가 원래의 text에서 변경사항이 생긴 뒤, 

interactive dismissal을 하려고 하면 action sheet를 띄워서 

변경사항을 저장할건지 버릴건지 선택하게 하죠! 당연히 



편집하는 viewController에서 isModalInPresentation을 변경이 일어났는지 안일어났는지에 

따라 값을 넣어주네요.

나 변경한거 하나도 없는데 interactive dismissal 제스쳐가 막히는것도 이상하니까요.


+ ) 한가지 안 사실은..textView가 변경될때 뭐 다른 view들도 마찬가지겠지만..viewWillLayoutSubviews에 할 생각은 안해봤는데..애플에게 배우고 갑니다,,,,


참고로


hasChagnes는 이렇게 정의되어있음!


자 암튼 UIAdaptivePresentationControllerDelegate메소드들은 다 봤습니다. 



 + ) 근데..



이거 ㅈㅓ만 이러나욥...저 presented view controller에 button이. 



자기를 dismiss하는앤데

암튼 animated를 true로 줬는데 걍 팍 사라지고 진짜 가끔 animation..되면서 dismiss됨..

?_?


제가 아직 베타 Seed 1인데..버그겠죠? :ㅇ..?

지금 Xcode 11.1이니까..고쳐졌겠지? ^^...


아무튼 끝!!



반응형