프로그래밍/iOS
-
[iPadOS] 가로방향으로 multiple scene이 안될 때프로그래밍/iOS 2021. 9. 24. 13:47
문제상황 가로방향인 상태에서, Support multiple windows 를 활성화 했을 때 Exposè로 같은 앱을 여러개 실행해서 띄울 수는 있지만, 한 화면에 2개의 앱을 띄울 수 없는 상황임 해결방법 세로방향 옵션을 껐던 것이 원인이었음 세로방향을 켜주고 다시 해보면 정상적으로 2개의 화면을 띄울 수 있게됨 - 가로방향에서만 작동하는 앱을 고려했더라도 multiple scene을 지원하게 될 때가 있으므로 세로방향을 고려해야하는 것 같음 - 기본적으로 2개의 화면을 동시에 띄울 수 있는 앱은 무조건 세로방향 옵션인 window으로 돌아가는 것 같음 - 기존에 가로방향에 있던 window도 세로방향으로(화면회전을 한 것 처럼) 재구성 되는 것 같음
-
[iOS] UI 계층 구조 정리프로그래밍/iOS 2021. 9. 23. 23:17
UIScene 앱의 ui의 하나씩의 instance를 의미함 앱을 실행하고 Debug View Hierarchy 를 실행하면 나오는 계층에서, 맨 위에 있는게 UIWindowScene인데, 이게 사실 UIScene이라고 보면 될 것 같다. 사진처럼 실제로는 이걸 상속한 UIWndowScene 객체를 직접 사용하는듯 UIWindowScene 이것의 delegate가 SceneDelegate임(UIWindowSceneDelegate) UIScene의 서브 클래스 App의 하나 이상의 Window를 관리한다. 직접 만드는 객체가 아님(OS가 생성) UIWindowSceneDelegate UISceneDelegate에서 확장된 프로토콜 UIWindowScene의 lifcycle 이벤트별로 호출되는 함수를 사용할..
-
[iPadOS] iPadOS에서 multiple scene을 구성하기프로그래밍/iOS 2021. 9. 22. 03:32
새로운 scene을 생성하는 방법을 이해하기 scene과 그 구체적인 코드를 알아보기 전에, project settings에서 Supports Multiple Windows 체크박스를 활성화 했을 때 scene들을 생성할 수 있는 여러 방법들을 알아봅시다. 우리는 기본으로 제공되는 기능을 살펴보는 것뿐만 아니라, 실제 유저들이 app이 multiple window를 지원할 때 어떤 동작들을 기대하는지 보여드리고자 합니다. 그 뒤에 우리의 app에 어떻게 multiple window를 구현하는지 살펴보겠습니다. 새로운 scene을 여는 기본적인 방법 iPadOS에서는 새로운 scene을 여는 2가지 방법이 있습니다. 첫번째로 앱이 이미 실행중인 상태에서 dock에 있는 앱 아이콘을 위로 끌어올려서 새로운 ..
-
NSCoding, Codable 사용 방법 정리(코드)프로그래밍/iOS 2021. 9. 20. 19:50
이렇게 사용하는게 맞는진 모르겠지만, 일단 해결했던 방법을 정리해본다 1. func encode(with:)에서 key값과 함께 encode할때 방법들 클래스 안에 구조체 프로퍼티가 있어서 NSCoding + Codable을 섞는 상황임. 이때 최종 목적은 우선 객체를 Data 로 만들고, 그 Data를 func encode(_ object: Any?, forKey key: String) 함수를 사용하여 키 값과 함께 encode 하는 것이다. 방법1: JSONEncoder, JSONDecoder를 사용 func encode(with aCoder: NSCoder) { print(#function, #line) aCoder.encode(name, forKey: "name") aCoder.encode(age..
-
NSCoding 쓸 때 does not implement methodSignatureForSelector: 에러가 나는 경우프로그래밍/iOS 2021. 9. 17. 01:15
해결방법 1. 인코딩할 클래스가 NSObject를 상속했는지 확인. 이때 CustomStringConvertible 프로토콜을 사용할 수 없게 됨 2. 클래스의 프로퍼티로 enum을 가지고 있으면 안된다. (enum 타입을 가지고 있다면 원시형 값으로 치환해서 하던가 해야함) // // Player.swift // MultiSceneWithUserDefaultTest // // Created by turu on 2021/09/17. // import Foundation class Player: NSObject, NSCoding { enum Gender: String { case man case woman case other } func descriptionToPrint() -> String { retur..
-
[iOS] navigation bar의 large title를 쓸 때 반투명으로 바꾸는 방법프로그래밍/iOS 2021. 8. 25. 20:12
원인 iOS13에서 navigation bar에서 large title의 기본 모양이 반투명에서 투명으로 변경되었기 때문임. 해결방법 방법1. application(_:didFinishLaunchingWithOptions:)에 아래의 코드를 작성 let appearance = UINavigationBarAppearance() appearance.configureWithDefaultBackground() UINavigationBar.appearance().scrollEdgeAppearance = appearance https://sarunw.com/posts/uinavigationbar-changes-in-ios13/ UINavigationBar changes in iOS13 | Sarunw Apple b..
-
[iOS] scrollViewDidEndScrollingAnimation이 시뮬레이터에서는 호출되지만 디바이스에서 호출되지 않을 때프로그래밍/iOS 2021. 3. 24. 23:23
문제 상황 테이블뷰에서 마지막 셀로 스크롤시켰을때, 스크롤 애니메이션이 끝날때 호출되는 메서드인 scrollViewDidEndScrollingAnimation에 마지막 셀에 접근하고 키보드 팝업을 올리려고 했다. tableView.scrollToRow를 사용했을 때 시뮬레이터에서는 scrollViewDidEndScrollingAnimation가 호출이 되었지만, 디바이스에서는 호출이 안되었다. 원인 scrollViewDidEndScrollingAnimation은 setContentOffset:animated:또는 scrollRectToVisible:animated:을 사용할 때만 호출된다고 한다. scrollToRow를 사용했을 때 시뮬레이터에서는 호출되었던건 왜 그런지 모르겠음. 해결방법 tableVi..
-
[iOS] hidesSearchBarWhenScrolling가 작동하지 않을 때프로그래밍/iOS 2021. 3. 13. 23:17
문제 상황: navigationItem.hidesSearchBarWhenScrolling = true 위 코드를 사용해서 UISearchBar가 스크롤 할 때 사라지는 것을 기대했지만 사라지지 않음 해결 방법: 빨간색 박스가 그려져 있는 왼쪽사진이 처음 문제가 발생했을 때 구조고, 오른쪽은 해결했을 때의 구조임. 문제가 발생했을 때 content view아래에 toolbar와 scroll view가 같이 있는데, toolbar가 scroll view 순서가 뒤에 와 있음. 오른쪽 사진처럼 드래그 이벤트가 발생하는 scroll view를 순서를 맨 뒤로 보내면 해결됨.
-
[iOS] tableView.indexPath(for: UITableViewCell)이 nil이 반환될 때프로그래밍/iOS 2021. 3. 9. 01:05
indexPath(for:) Declaration func indexPath(for cell: UITableViewCell) -> IndexPath? 우선 셀은 지속적으로 재사용되고 테이블뷰에 의해 관리되고 있으므로 외부에서 cell을 직접참조를 해서 어떤 작업을 하는 것은 피해야한다. 원인: nil이 발생하는 원인은 아직 추가되지 않은 셀, 셀이 표시가 되지 않고 있음, indexPath가 범위를 벗어남 이 있다고 한다. 그러나 내 경우는 화면상에 셀이 보이고 있는 상태인데 계속 nil이 반환되었다. 정확히는 모르지만 셀 내부 컨텐츠뷰들을 수정하고나면 어떠한 이유로 인해서 nil이 반환하는 일이 생기는 것 같다. 조건: textView의 텍스트를 수정하지 않으면 nil이 발생하는 일이 없었다. 전후 상..
-
[iOS] Dynamic Font프로그래밍/iOS 2021. 2. 10. 15:00
1. 사진 위에 폰트가 정해진 비율에 맞춰서 배치가 되어야 할 때 1. 이미지뷰의 Aspect Ratio 속성에 체크 후 이미지 비율대로 입력 2. 이미지뷰와 레이블을 뷰로 감싸기 3. 레이블을 사진의 top, bottom에 정렬 4. 레이블의 bottom 쪽 constraint의 multiplier를 수정하여 적절한 위치에 배치 비율을 먹일 때 사진과 레이블을 동시 클릭후 설정해도 슈퍼뷰에 대한 크기로 비율이 먹게 됨. 그래서 뷰로 한번 더 감싸고 그 뷰의 크기를 조절한 후에 비율을 먹이는 방식으로 조절함 2. AutoShrink 설정할 때 1. 먼저 가장 큰 디바이스로 놓고 폰트 크기를 설정한다. 최소 폰트 사이즈 설정 / 현재 폰트에서 어느정도까지 축소 가능 과 같이, 현재 폰트에서 작아지는 방향에..