아이폰으로 도례를 간단하게 표시하다
8682 단어 Swift
draw()
방법을, UIBezierPath(roundedRect:cornerRadius:)
로 각환의 직사각형과 삼각형을 열심히 그렸는데 사실 아주 간단한 방법이 있는데...!아이폰에도 팝오버가 뜨네요!
아이폰으로 Popover 표시
Popover에 따르면 아이패드만 있는 줄 알았는데
UIPopoverPresentationControllerDelegate
의adaptivePresentationStyle(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
하기 때문에 아이폰도 의외로 간단하게 도례를 나타낼 수 있다.화살표를 열심히 그리지 않아도 위치는 쉽게 조절할 수 있어 앞으로 잘 활용하고 싶다.보태다
어떻게 지정
sourceView
과sourceRect
합니까?근거애플 공식 문서...
sourceView
:The view containing the anchor rectangle for the popover. sourceRect
:The rectangle in the specified view in which to anchor the 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)
Reference
이 문제에 관하여(아이폰으로 도례를 간단하게 표시하다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/TAAT626/items/6eadd60d3d72d9eb7aa0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)