반응형

Develop/Swift

    AVCaptureDevice 사용 시 iPhone14 Pro 이상의 카메라 설정 방법

    AVCaptureDevice 사용 시 iPhone14 Pro 이상의 카메라 설정 방법

    AVCaptureDevice 사용 시 일반적인 구글링이나 GPT에서 제공하는 샘플에서는 builtInWideAngleCamera 부분에 대해서만 제공되는 경우가 많은데 이렇게 적용할 경우, QR 코드나 가까운 거리에서 물체를 잡으려고 할 떄 캡쳐 이미지가 흐릿하거나 초점이 맞지 않는 현상이 발생한다. 이런 경우, AVCaptureDevice의 DiscoverySession에서 카메라 모듈을 직접 설정해 주어야 사물 가까이 접근했을 경우, 상황에 맞는 카메라로 변경된다. 아래는 다양한 아이폰 디바이스에서 제공되는 카메라 종류를 추가한 코드이다. func setupDevice() { let deviceDiscoverySession = AVCaptureDevice.DiscoverySession(deviceTy..

    스토리보드, XIB Inspectable에 enum 연동하는 방법

    스토리보드, XIB에서 UIButton (또는 그외 컨트롤) 에 @IBInspectable을 연동해서 사용하는 경우가 많은데, IBInspectable 값을 enum 으로 선언해서 연동하는 방법입니다. enum 타입 작성 enum StatusShape:Int { case Rectangle = 0 case Triangle = 1 case Circle = 2 } @Inspectable 작성 // IB: use the adapter @IBInspectable var shapeAdapter:Int { get { return self.shape.rawValue } set( shapeIndex) { self.shape = StatusShape(rawValue: shapeIndex) ?? .Rectangle } } ..

    M1 ARM-64 Simulator 지원하지 않는 프레임워크 수정하는 방법

    Xcode building for iOS Simulator, but linking in an object file built for iOS, for architecture 'arm64' 아직 M1 맥북을 지원하지 않는 프레임워크를 종종 만나게 되는데요, SPM도 지원하지 않고, XCFrmework 도 지원하지 않는 경우, 어쩔 수 없이 Rosetta 모드로 사용해야 할 수 밖에 없는데요. 관련 해결 방법을 찾아보면 대부분 Build Settings에서 Exclude Architecture 설정에 관한 내용이 대부분이었습니다. Rosetta 모드로 사용하게 될 경우, 시뮬레이터에서 스크롤도 제대로 작동안하거나 잘 죽고 상대적으로 빌드 시간이나 이런 부분도 뭔가 체감적으로 더 늘어나는 듯 한데요. 관련해서 ..

    String에 HTML 링크 적용

    String에 HTML 링크 적용하는 방법입니다. 기본 제공하는 디텍터를 이용해서 링크를 찾고, 태그로 감싸진 경우에는 예외 처리되었습니다. func wrapLinkText() -> String? { let detector = try? NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue) guard let matches = detector?.matches(in: self, options: [], range: NSRange(location: 0, length: self.utf16.count)), matches.count > 0 else { return self } let validators = [">", "\""] var result..

    KingFisher에서 SVG 이미지 다운로드하는 방법

    Feat 킹피셔를 이용한 이미지 다운로드 함수 작성 URL 경로의 마지막 확장자에 SVG가 있을 경우 SVG를 다운로드 하는 함수 SVGKit 설치 - https://github.com/SVGKit/SVGKit SVGProcessor 작성 import SVGKit import Kingfisher extension UIImageView { func kfSetImage(with urlString: String?) { if urlString?.hasSuffix(".svg") == true { return self.kfSetSVGImage(with: urlString) } if let imageUrl = urlString.map({ App.config.WebResourceURL + $0 })?.url { sel..

    SwiftUI 상에서 HTML 출력과 Link, CSS 적용하는 방법

    Feature SwfitUI에서 HTML을 출력한다. HTML - 링크 클릭 시, 활성화된 링크를 가져오거나, 핸들러를 제공한다. HTML에 CSS를 적용한다. import SwiftUI import WebKit ///참고 - https://stackoverflow.com/a/59018581/3374327 struct SUIWebView: UIViewRepresentable { @ObservedObject var viewModel: SUIWebViewModel let url: URL? let html: String? let css: String? func makeUIView(context: UIViewRepresentableContext) -> WKWebView { var webView: WKWebVie..

    multi-line 문구 localizable.strings 적용 방법

    Localizable.Strings에 아래와 같이 작성 후 "Hi, I would like to share the following feedback: " = "Hallo, ich möchte folgendes Feedback geben: "; 소스상 에서 아래와 같이 사용이 가능하다. let localizedMessage = NSLocalizedString(""" Hi, I would like to share the following feedback: """, comment: "")

    UserDefaults 모든 항목 출력, 경로, 리셋

    UserDefaults 목록 확인을 위한 코드 해당 경로의 plist 오픈 var path: [AnyObject] = NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true) as [AnyObject] let folder: String = path[0] as! String NSLog("%@/Preferences", folder) 소스 상에서 런타임 시에 UserDefaults를 프린트로 찍는 방법 print(UserDefaults.standard.dictionaryRepresentation()) UserDefaults Reset 필요 시 extension UserDefaults { static func resetDefaul..

    Advances in Collection View Layout

    Advances in Collection View Layout

    iOS는 기본적으로 'UICollectionView' 흐름 레이아웃과 함께 제공되며, 이는 간단한 경우에 유용합니다. 그러나 사용자 정의 레이아웃을 수행하는 것은 매우 복잡하고 상용구 코드가 필요하고 성능 등에 대해 생각해야 합니다. iOS 13 및 macOS 10.15의 새로운 기능: Compositional Layout Compositional Layout은 구성 가능하고 유연하며 빠릅니다. 작은 레이아웃 그룹(라인 기반, 즉 플로우 레이아웃 사용)을 가져와 함께 더 큰 조각으로 구성하여 작동합니다. iOS, tvOS 및 macOS에서 사용 가능(동일한 API): UI/NSCollectionViewCompositionalLayout ⭢ NSCollectionLayoutSection ⭢ NSCollec..

반응형