꾸준히 안타치기
② 프로필 화면 / 프사눌러 이미지 변경하기 본문
반응형
기본 프로필 이미지 터치 -> profile() -> imgPicker()호출 ->imagePickerController()실행-> 앨범에서 선택 or 카메라 사용 -> 이미지 UserDefault에 저장 / 이미지뷰에 적용
이미지 피커 컨트롤러를 사용하기 위해 ProfileVC클래스에 프로토콜을 추가한다.
ProfileVC. swift
class ProfileVC: UIViewController, UITableViewDelegate, UITableViewDataSource, UIImagePickerControllerDelegate,
UINavigationControllerDelegate {
이미지 피커 컨트롤러를 실행할 커스텀 메소드 imgPicker(_:)를 정의한다.
매개변수를 정의하고, 이 매개변수를 통해 이미지를 가져올 소스타입을 지정할 수 있도록 구현한다.
// 이미지 피커
func imgPicker(_ source : UIImagePickerController.SourceType){
let picker = UIImagePickerController()
picker.sourceType = source
picker.delegate = self
picker.allowsEditing = true
self.present(picker, animated: true)
}
Profile()메소드를 정의한다. 메소드 호출시 액션시트 나타내기
- 비로그인 상태에서는 프로필 이미지가 등록되지 않도록 처리한다. 비로그인상태에서는 로그인창이 뜨고 로그인이 되어있을때에만 액션시트가 뜨도록한다.
// 프로필사진의 소스 타입을 선택하는 액션 메소드
@objc func profile(_ sender : UIButton){
// 로그인되어 있지 않을 경우에는 프로필 이미지 등록을 막고 대신 로그인 창을 띄워준다.
// 계정이 널이 아닌게 아니면? / 로그인창을 띄워준다.
guard self.uinfo.account != nil else {
self.doLogin(self)
return
}
let alert = UIAlertController(title: nil, message: "사진을 가져올 곳을 선택해주세요",
preferredStyle: .actionSheet)
// 카메라를 사용할 수 있으면
if UIImagePickerController.isSourceTypeAvailable(.camera){
alert.addAction(UIAlertAction(title: "카메라", style: .default) { (_) in
self.imgPicker(.camera)
})
}
// 저장된 앨범을 사용할 수 있으면
if UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum){
alert.addAction(UIAlertAction(title: "저장된앨범", style: .default) { (_) in
self.imgPicker(.savedPhotosAlbum)
})
}
// 포토라이브러리를 사용할 수 있으면
if UIImagePickerController.isSourceTypeAvailable(.photoLibrary){
alert.addAction(UIAlertAction(title: "포토라이브러리", style: .default) { (_) in
self.imgPicker(.photoLibrary)
})
}
// 취소버튼 추가
alert.addAction(UIAlertAction(title: "취소", style: .cancel, handler: nil))
//액션시트 창 실행
self.present(alert, animated: true)
}
선택한 이미지를 전달 받아 프로필사진으로 등록할 메소드를 구현합니다.
// 선택한 이미지를 전달받아 프로필 사진으로 등록할 메소드
// 이미지를 선택하면 이 메소드가 자동으로 호출된다.
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let img = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
self.uinfo.profile = img // 프로필이미지를 uinfo에 저장
self.profileImage.image = img //이미지를 이미지뷰에 설정
}
// 이미지 피커 컨트롤러 창 닫기!! 안해주면 안닫힘
picker.dismiss(animated: true)
}
프로필 이미지뷰 객체에 탭 제스처를 등록하고, 이를 Profile()메소드에 연결한다.
override func viewDidLoad(){
// 프로필이미지 객체에 탭 제스처를 등록하고, 이를 프로필메소드와 연결한다.*********************************************
let tap = UITapGestureRecognizer(target: self, action: #selector(profile(_:)))
self.profileImage.addGestureRecognizer(tap)
self.profileImage.isUserInteractionEnabled = true //상호반응허락
}
사이드바의 프로필영역에 저장데이터 적용하기
SideBarVC 클래스에 UserInfoManager 타입의 멤버 상수를 선언하고, 이를 초기화 한다.
import UIKit
class SideBarVC: UITableViewController {
let uinfo = UserInfoManager() //개인정보관리매니저
viewDidLoad()에 작성되어 있는 이름과, 이메일, 프로필사진 더미텍스트를 지우고 viewVillApper에 사이드바가 화면에 표시될때 마다 로그인 정보를 읽어와 갱신하도록 작성한다.
//사이드바가 화면에 표시될 때마다 로그인 정보를 읽어와 갱신하도록 다음과 같이 작성
override func viewWillAppear(_ animated: Bool) {
self.nameLabel.text = self.uinfo.name ?? "Guest"
self.emailLabel.text = self.uinfo.account ?? ""
self.profileImage.image = self.uinfo.profile
}
반응형
'iOS > 기본편 | 실전편 -꼼꼼한재은씨' 카테고리의 다른 글
①프로필화면 /사용자정보관리객체생성/로그인/ 로그아웃 정보 저장하기 (0) | 2022.02.18 |
---|---|
SideBar / 계정관리 눌러 -> 새창 프로필화면으로 전환 (0) | 2022.02.17 |
SideBar / 새글작성 눌러 -> 프론트뷰로 화면전환 (0) | 2022.02.16 |
SideBar / 라이브러리 사용X (0) | 2022.02.15 |
② Picker View - customPlist / 커스텀 (0) | 2022.02.12 |
Comments