[Dev, iOS] 프로퍼티(변수) 값 변경마다 특정 메서드를 실행해야 할 때
·
Dev/iOS
앱에서 어떤 동작을 마치고 프로퍼티(변수) 값이 변경되고 변경 될 때마다 특정 메서드를 실행하거나, 값을 저장하거나 혹은 UI를 업데이트해야 하는 경우가 있습니다. 이럴 땐 변수 선언을 할 때 didSet 프로퍼티 옵저버를 활용하면 됩니다.var list: [String] = [] { didSet { // 감지될 때마다 실행하고 싶은 코드 작성 }}
[Dev, iOS] 같은 함수를 여러 프로퍼티에 적용하고 싶을 때 + 버튼에 그림자 만들기
·
Dev/iOS
여러 UILabel에 같은 alpha 값을 적용한다는 등, 종류가 같은 프로퍼티에 같은 함수나 클로저를 실행시킬 땐 forEach 구문을 활용하면 된다. [refUI, backUI, zzan, resetUI, changeUI, instaUI].forEach { $0?.makeShadow() // 각 UIButton에 makeShadow() 함수 적용} extension UIButton { // UIButton 클래스를 확장하여 함수 생성 func makeShadow() { self.layer.shadowColor = UIColor.white.cgColor self.layer.shadowOpacity = 1.0 self.lay..
[Dev, iOS] StoryBoard 없이 시작하기 (Xcode 13)
·
Dev/iOS
SnapKit을 활용하여 코드로 앱을 구성할 때 초기 설정을 해주어야 한다. 1. StoryBoard를 체크하여 파일 생성 2. Main (Main.StoryBoard) -> Move to Trash 3. Info (Info.plist)에서 Information Property List > Application Scene Manifest > Scene Configuration > Application Session Role > Item 0 > Storyboard Name 삭제 4. SceneDelegate에 해당 코드 작성class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? func scene(_ scen..
[Dev, iOS] Push Notification (알림 메시지) 클릭 시 특정 뷰 오픈하기
·
Dev/iOS
이번 시간에는 Push 알림 메시지가 도착했을 때, 앱의 여러 뷰 중 특정 뷰를 오픈하는 법에 대해 작성해봅니다. 해당 예제는 5개의 탭으로 구성되어 있는 StoryBoard에서 네번째 탭을 열고, 네번째 탭에서 secondVC를 modal이 아닌 Push 형식으로 전환하는 방법을 담고 있습니다. 따라서 네번째 탭을 먼저 navigationController를 연결, navigationController의 rootView로 secondVC를 연결하는 선행 과정이 필요합니다. // 1. AppDelegate 속에 didReceive 메서드 구현 func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNoti..
[Dev, iOS] Storyboard, Protocol 및 Delegate를 활용한 화면 간 데이터 전달
·
Dev/iOS
Dev : Storyboard를 활용한 화면 전환 4가지 방법* push는 navigation controller가 연결된 상태에서만 작동 * 1. segue로 push 전환 : 원래 화면에 있는 Button을 끌어다가 이동할 VC에 'Show'로 연결 뒤로가기 : 이동한 화면 속 Button에 해당 코드 작성 self.n..dusanbaek.tistory.com화면 전환을 하는 이유는 아무래도 화면 간에 데이터를 전달하기 위함이니까 이번에는 데이터를 전달하는 방법에 대해 작성해봅니다. 1. code로 전환할 때 원래 화면 -> 다음 화면으로 데이터 전달 : 전달할 VC로 다운 캐스팅을 해준 후, 해당 VC의 프로퍼티에 값을 직접 전달guard let secondVC = self.storyboard?.i..
[Dev, iOS] Storyboard를 활용한 화면 전환 4가지 방법
·
Dev/iOS
* push는 navigation controller가 연결된 상태에서만 작동 * 1. segue로 push 전환 : 원래 화면에 있는 Button을 끌어다가 이동할 VC에 'Show'로 연결 뒤로가기 : 이동한 화면 속 Button에 해당 코드 작성 self.navigationController?.popViewController(animated: true) // 평상시 self.navigationController?.popToRootViewController(animated: true) // Tip: 네비게이션 컨트롤러로 연결된 화면에서 맨 첫번째 화면으로 뒤돌아가고 싶을 때 2. code로 push 전환 : 이동할 VC의 속성 인스펙터로 가서 storyboard ID 설정 (ex. secondVC),..
[Dev, iOS] Swift Package Manager 사용하기 (Xcode 13)
·
Dev/iOS
외부 라이브러리를 사용하는 방법에는 대표적으로 CocoaPod을 활용하여 설치를 합니다.하지만 Xcode에서는 Swift Package Manager을 활용하는 방법이 있는데, 이전 버전의 Xcode에서 사용하는 방법과 달라졌습니다. 이전 버전에서는 File > Packages > Add Package Dependency 경로로 들어갔지만, Xcode 13버전부터는 이곳에서 라이브러리를 추가할 수 있습니다.
[Dev, iOS] Storyboard 없이 첫 화면을 구성하는 법
·
Dev/iOS
storyboard로 개발을 하는게 더 편리하고  쉽지만, 가끔은 SnapKit 라이브러리를 활용하여 코드로 화면을 짤 수도 있습니다. Project를 생성하고, 기본으로 포함되어있는데 ViewController에 바로 개발을 할 수는 있지만, 굳이 필요 없는 무거운 파일들을 앱에 포함시킬 필요는 없어요. 1. ViewController 삭제 2. Info.plist > Information Property List > Application Scene Manifest > Scene Configuration > Application Session Role > Item 0 > Storyboard Name 삭제 3. Ctrl + N -> 새로운 VC 생성 4. SceneDelegate에 해당 코드 작성func..
[Dev, iOS] 백그라운드 진입 시 민감한 정보 가리기
·
Dev/iOS
금융 등 개인 정보를 담는 앱들은 백그라운드에서 앱 화면을 가리는 기능을 사용한다.iOS 13 미만을 지원하는 앱에서는 appDelegate에서,이상의 버전을 지원하는 앱에서는 sceneDelegate에서 해당 메소드들을 구현해주자. // 액티브 상태가 되었을 경우(다시 앱으로 돌아왔을 때) func sceneDidBecomeActive(_ scene: UIScene) { callBgImage(false) } // 홈 바를 쓸어 올리거나 홈버튼을 두번 눌렀을 경우 func sceneWillResignActive(_ scene: UIScene) { } // 백그라운드 상태였다가 돌아왔을 때 func sceneWillEnterForeground(_ scene: UIScene) { ..
[Dev, iOS] 배경을 Gradient로 색칠하기
·
Dev/iOS
let gradientView = CAGradientLayer()gradientView.frame = bgView.bounds // bgView는 그라데이션을 덮을 superView에 해당let colors: [CGColor] = [ // 해당 부분에 그라데이션을 넣을 색상을 입력 (오름차순으로 표현됌)]gradientView.colors = colors// 그라데이션의 시작점과 끝점을 좌표로 표현, 0은 0을, 1은 maximum X/Y point를 의미gradientView.startPoint = CGPoint(x: 0.5, y: 0.0)gradientView.endPoint = CGPoint(x: 0.5, y: 1.0)// 할당하면 끝bgView.layer.addSublayer(gradientView)