UIPopoverPresentationController에서 표시 위치에 대해 시도해 보았습니다.
소개
종래 사용하고 있던
UIPopoverController
클래스가 iOS9에서 폐지되어 새로운 클래스(UIPopoverPresentationController)로 바꾸는 작업을 하고 있었습니다만, 문서를 읽어도 모르는 적이 있었으므로 메모해 둡니다.몰랐던 것
Popover 표시 장소를 결정하는 프로퍼티
sourceView
, sourceRect
에 무엇을 지정하면 좋을까.Apple 문서에는 이렇게 설명되어 있습니다.
그래. . . .
코드를 작성해 보았습니다.
코멘트에 간단한 설명을 쓰고 있습니다만, yellowView와 redRect의 관계를 주목.
ViewController.swift
class ViewController: UIViewController {
@IBOutlet weak var yellowView: UIView!
let redRect = CGRect(x: 200, y: 100, width: 50, height: 10)
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let testView = UIView(frame: redRect)
testView.backgroundColor = UIColor.red
yellowView.addSubview(testView)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func openPopover(_ sender: UIButton) {
let contentVC = PopoverContentViewController(style: .plain)
//Popoverスタイル
contentVC.modalPresentationStyle = .popover
//Popoverコンテンツのサイズ
contentVC.preferredContentSize = CGSize(width: 150, height: 100)
//場所を決める
contentVC.popoverPresentationController?.sourceView = yellowView
contentVC.popoverPresentationController?.sourceRect = redRect
// contentVC.popoverPresentationController?.sourceView = sender
// contentVC.popoverPresentationController?.sourceRect = sender.bounds
//方向
contentVC.popoverPresentationController?.permittedArrowDirections = .any
contentVC.popoverPresentationController?.delegate = self
present(contentVC, animated: true, completion: nil)
}
}
extension ViewController : UIPopoverPresentationControllerDelegate {
}
그리고 결과를 보면,
알다시피
정말 쉬운 일이었습니다.
sourceView는 sourceRect의 기준이 되는 영역(View)이 됩니다.
그리고 sourceRect는 Popover를 표시하는 영역입니다.
sourceView
가 UIScrollView
또는 UITableView
의 ContentView
의 경우, sourceRect
의 지정에 offset 에 근거해 지정하는 것입니다.예제 코드에서는 작성하지 않았지만 tableView의 셀을 탭하면 offset을 반영한
sourceRect
를 지정했는데 예상대로 표시되는 것을 확인했습니다.이상.
Reference
이 문제에 관하여(UIPopoverPresentationController에서 표시 위치에 대해 시도해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/dolfalf/items/dad9dbc76d2e816ca081텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)