22일차 - 21.06.29

수킴·2021년 6월 29일
0

100DaysOfSwift

목록 보기
23/37
post-thumbnail

학습키워드

  • UIBarButtonItem
  • UIActivityViewController

1. About technique projects

  • Project1 파일을 복사하여 Project3으로 명명
  1. 터미널에서 복사하는 방법

    cp -r Project1 Project3

    하위 디렉토리 및 파일까지 모두 복사

  2. 폴더 드래그 후 Option

2. UIActivityViewController explained

UIActivityViewController : 앱에서 표준서비스를 제공하는데 사용하는 뷰컨트롤러

  • 이 뷰컨트롤러를 사용해서 데이터를 복사하거나, email,SMS, 소셜미디어 사이트등등 에 공유할 수 있습니다.
  • 공유, 이미지 저장, 연락처 할당, AirPrint를 통한 인쇄 등 여러가지 기능을 제공합니다.
  • UIActivityViewController 개발자 공식문서

네비게이션바에 버튼추가하기

  • 예제코드

    navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(shareTapped))

    네비게이션바의 오른쪽에 나타나는 버튼을 설정합니다.

    UIBarButtonItem데이터타입의 새로운 인스턴스를 만듭니다.

공유버튼 클릭했을 때 UIActivityViewController 보여주기

@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에 접근해야하는 메서드를 작성할 때 사용하는 키워드
    • Objective-C 운영체제에 의해 호출되므로 Objective-C 코드에서 사용할 수있는 것으로 표시해야하기 때문에 이 키워드를 붙여서 표시합니다. (#selector 사용될 때 항상 사용해야합니다.)
  • jpegData(compressionQuality: 0.8) : 이미지를 JPEG데이터로 변환해주고 품질을 1.0(최대품질) ~ 0.0 (최소 품질) 사이의 값으로 지정할 수 있습니다.
  • vc.popoverPresentationController?.barButtonItem : iPad에서는 액티비티뷰컨트롤러는 팝오버형식으로 표시해야 됩니다. (iPhone에 영향을 끼치지 않습니다.)

Privacy-Photo Library Additions Usage Description

액티비티뷰컨트롤러내에서 이미지 저장할 때 충돌 문제

  • 앱이 유저의 사진라이브러리에 접근하여 이미지를 쓸 수 있도록 시도하지만 권한이 없기 때문에 충돌
  • Info.plist 에서 add Row 에서 옵션 추가해줍니다.

3. Wrap up

도전 과제

  1. 공유항목에 이미지이름도 함께 추가합니다.
    • 액티비티뷰컨트롤러의 파라미터인 activityItems[Any] 타입이므로 이미지이름을 추가합니다.
  2. Project1에서, 메인뷰컨트롤러에서 다른사람에게 앱을 추천하는 BarButton을 추가합니다.
  3. Project2에서, 클릭할 때 스코어를 보여주는 BarButton을 추가합니다.
    • 네비게이션바버튼아이템 추가한 후 UIAlertViewController 로 스코어 보여주기

4. Review for Project 3: Social media

  • @objc 는 필요할 때 사용하지 않는다면 빌드가 되지 않습니다.
  • present() 메서드를 통해 뷰컨트롤러들을 표시할 수 있습니다.
  • navigationItem 은 각 뷰컨트롤러마다 자체적으로 가지고 있습니다. (모든 뷰컨트롤러가 공유하지 않습니다.)
  • @IBAction 은 Objective-C코드로 작성한 스토리보드가 연결되어 있으므로 @objc 가 포함되어있습니다.

링크

100 Days of Swift - Day 22 - Hacking with Swift

profile
iOS 공부 중 🧑🏻‍💻

0개의 댓글