아이폰으로 도례를 간단하게 표시하다

8682 단어 Swift
아이폰으로 도례를 표시할 때subview를 준비하고 리메이크draw() 방법을, UIBezierPath(roundedRect:cornerRadius:)로 각환의 직사각형과 삼각형을 열심히 그렸는데 사실 아주 간단한 방법이 있는데...!
아이폰에도 팝오버가 뜨네요!

아이폰으로 Popover 표시


Popover에 따르면 아이패드만 있는 줄 알았는데UIPopoverPresentationControllerDelegateadaptivePresentationStyle(for:traitCollection:)를 실현하고 답장UIModalPresentationStyle.none하면 아이폰에도 Popover가 나온다.
class ViewController: UIViewController {

    @IBAction func didTouchButton(_ sender: UIButton) {
        let vc = PopoverViewController()
        // モーダル表示スタイルをポップオーバーに指定
        vc.modalPresentationStyle = .popover
        // 内容のサイズを指定
        vc.preferredContentSize = CGSize(width: 100, height: 100)
        // アンカービューを指定
        vc.popoverPresentationController?.sourceView = sender
        // アンカー領域を指定
        vc.popoverPresentationController?.sourceRect = CGRect(origin: CGPoint.zero, size: sender.bounds.size)
        // 矢印の方向を指定
        vc.popoverPresentationController?.permittedArrowDirections = .any
        // デリゲートを設定
        vc.popoverPresentationController?.delegate = self
        // 吹き出しを表示
        present(vc, animated: true, completion: nil)
    }
}

extension ViewController: UIPopoverPresentationControllerDelegate {
    // デフォルトの代わりにnoneを返すことで、iPhoneでもpopover表示ができるようになる
    func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
        return .none
    }

    // Popoverの外をタップしたら閉じるべきかどうかを指定できる(吹き出し内のボタンで閉じたい場合に利用)
    func popoverPresentationControllerShouldDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) -> Bool {
        return false
    }
}

class PopoverViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // 吹き出しの背景色を指定(view.backgroundColorを指定しても、吹き出しの三角形の部分が白いまま)
        popoverPresentationController?.backgroundColor = UIColor.blue
    }
}

총결산


적합UIPopoverPresentationControllerDelegate하기 때문에 아이폰도 의외로 간단하게 도례를 나타낼 수 있다.화살표를 열심히 그리지 않아도 위치는 쉽게 조절할 수 있어 앞으로 잘 활용하고 싶다.

보태다


어떻게 지정sourceViewsourceRect합니까?
근거애플 공식 문서...
  • sourceView :The view containing the anchor rectangle for the popover.
  • sourceRect :The rectangle in the specified view in which to anchor the popover.

  • 이 두 속성을 사용하여popover의 닻과 상대적인 디스플레이 영역을 설정합니다.그러나 지정된 방법은 잠긴 뷰에 따라 달라집니다.
    // ① 親ビューをsourceViewに指定する場合
    vc.popoverPresentationController?.sourceView = self.view
    vc.popoverPresentationController?.sourceRect = button.frame
    
    // ② ボタンをsourceViewに指定する場合
    vc.popoverPresentationController?.sourceView = button
    vc.popoverPresentationController?.sourceRect = CGRect(origin: CGPoint.zero, size: button.bounds.size)
    

    좋은 웹페이지 즐겨찾기