iOS에서 반모달/하프모달 구현에 대한 요약
11722 단어 iOSAdventCalendarSwift우이Xcode
소개
향후 구현의 참고가 되도록 정보를 정리하고 싶었습니다.
반모달/하프모달이란?
・モードの完全遷移が起こらない
・モードを多重化しながらパラレルに対話可能
・モードを終了させずにモードからの一時退避が可能
・擬似的なマルチウインドウ・インターフェイスに応用可能
・スワイプなどインタラクションコストの低い操作方法によってモードの切り替えが可能
구현 방법
UIModalPresentationStyle 사용
let vc = UIViewController()
vc.modalPresentationStyle = .pageSheet
present(vc, animated: true, completion: nil)
라이브러리 사용
SCENEE/FloatingPanel
slackhq/PanModal
직접 구현
철저 조사
cocoacontrols 등을 사용하면 많은 라이브러리를 찾을 수 있습니다.
UIViewControllerTransitioningDelegate
let vc = UIViewController()
vc.modalPresentationStyle = .custom
vc.transitioningDelegate = self
present(vc, animated: true, completion: nil)
extension UIViewController: UIViewControllerTransitioningDelegate {
public func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
return UIPresentationController(presentedViewController: presented, presenting: presenting)
}
public func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return PresentationAnimator()
}
public func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return DismissionAnimator()
}
}
PSPDFTouchForwardingView
final class PSPDFTouchForwardingView: UIView {
final var passthroughViews: [UIView] = []
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
guard let hitView = super.hitTest(point, with: event) else { return nil }
guard hitView == self else { return hitView }
for passthroughView in passthroughViews {
let point = convert(point, to: passthroughView)
if let passthroughHitView = passthroughView.hitTest(point, with: event) {
return passthroughHitView
}
}
return self
}
}
private var touchForwardingView: PSPDFTouchForwardingView?
override func presentationTransitionWillBegin() {
super.presentationTransitionWillBegin()
touchForwardingView = PSPDFTouchForwardingView(frame: containerView!.bounds)
containerView?.insertSubview(touchForwardingView, at: 0)
}
요약
참고 링크
Reference
이 문제에 관하여(iOS에서 반모달/하프모달 구현에 대한 요약), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/t_osawa_009/items/b4cab51f98e7aa1d3228텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)