navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(shareTapped))
UINavigationController 는 기본적으로 UINavigationBar라는 막대를 가지며, 이 bar에 메서드를 호출하는 버튼을 추가할 수 있다.
navigationItem.rightBarButtonItem : 뷰 컨트롤러의 NavigationItem에 rightBarButtonItem을 할당한다.
UIBarButtonItem(barButtonSystemItem:, target:,action:)
@objc func shareTapped() {
guard let image = imageView.image?.jpegData(compressionQuality: 0.8) else {
print("No image found")
return
}
let vc = UIActivityViewController(activityItems: [image], applicationActivities: [])
vc.popoverPresentationController?.barButtonItem = navigationItem.rightBarButtonItem
present(vc, animated: true)
}
@objc : 이 메서드는 Objective-C 운영체제(UIBarButtonItem)에서 호출되므로 Objective-C코드에서 사용할 수 있음을 나타낸다.
imageView내부에 이미지가 있을 수도 있고, 없을 수도 있기 때문에 guard 문을 사용하여 안전하게 읽고, JPEG데이터로 변환한다.
UIActivityController : 다을 앱이나 서비스로 콘텐츠를 공유하는 iOS 메서드이다.
vc.popoverPresenctationController.barButtonItem = navigationItem.rightBarButtonITem : activity View controller가 고정되어야하는 위치, 즉 표시되어야하는 위치를 알려준다.