100 days of Swift - Day 22

sun02·2021년 9월 8일
0

100 days of Swift 

목록 보기
20/40

navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(shareTapped))
  • UINavigationController 는 기본적으로 UINavigationBar라는 막대를 가지며, 이 bar에 메서드를 호출하는 버튼을 추가할 수 있다.

  • navigationItem.rightBarButtonItem : 뷰 컨트롤러의 NavigationItem에 rightBarButtonItem을 할당한다.

    • 이 navigation item은 관련 정보를 표시할 수 있도록 navigation bar에서 사용된다.
    • 이 뷰 컨트롤러가 표시될 때 navigation bar의 오른쪽에 표시되는 버튼을 설정한다.
  • UIBarButtonItem(barButtonSystemItem:, target:,action:)

    • barButtonSystemItem 의 .action은 상자에서 나오는 화살표 이미지로, 탭할 경우 사용자가 무언가를 할 수 있음을 나타낸다.
    • target과 action 매개변수는 UIBarButtonItem에 어떤 메소드를 호출해야하는지 알려주기 때문에 함께 사용된다.
    • target : shareTapped()메서드가 현재 뷰 컨트롤러-self에 속해있음을 나타낸다.
    • action : "네가 탭하면 shareTapped()메서드를 호출한다"

@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코드에서 사용할 수 있음을 나타낸다.

    • #selector를 사용하여 메서드를 호출할 때 항상 @objc를 사용해야한다.
    • Objective-C코드가 Swift 메서드를 호출해야하는 경우 필요하다.
  • imageView내부에 이미지가 있을 수도 있고, 없을 수도 있기 때문에 guard 문을 사용하여 안전하게 읽고, JPEG데이터로 변환한다.

    • CompressionQuality : 최대 품질(1.0)과 최소 품질(0.0) 사이의 값을 지정할 수 있다. / 0.0에 가까울 수록 화질 저하되고 용량 감소
  • UIActivityController : 다을 앱이나 서비스로 콘텐츠를 공유하는 iOS 메서드이다.

    • 앱에 공유 기능을 추가할 대 가장 처음 호출되는 포트로 공유하려는 데이터의 종류를 알려주면 가장 좋은 방법을 찾아낸다.
  • vc.popoverPresenctationController.barButtonItem = navigationItem.rightBarButtonITem : activity View controller가 고정되어야하는 위치, 즉 표시되어야하는 위치를 알려준다.

0개의 댓글