일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Human interface guide
- 애니메이션
- ios
- ribs
- map
- UITextView
- collectionview
- clean architecture
- UICollectionView
- 스위프트
- rxswift
- uiscrollview
- 리팩토링
- SWIFT
- Clean Code
- combine
- RxCocoa
- uitableview
- Observable
- Protocol
- swiftUI
- HIG
- 리펙토링
- 클린 코드
- Refactoring
- tableView
- MVVM
- Xcode
- swift documentation
- 리펙터링
- Today
- Total
목록iOS 응용 (swift) (680)
김종권의 iOS 앱 개발 알아가기
커스텀 OTP 입력창 * framework 참고 : github.com/Root-vb/OTPFieldView 위 프레임워크는 다음과 같은 오류가 존재하여 직접 수정한 커스텀 사용 copy/paste 시 글자도 입력되며 여러숫자가 한칸의 textField에 입력됨 long press 할 경우 becomeFirstResponder가 바뀌는 버그 존재 OTP 구현된 원리 6개의 otp 입력 코드가 필요할 때 6개의 UITextField를 생성하여 tag를 다루어, tag를 가지고 textField를 관리 즉 6개의 UITextField 객체가 존재 * 오류를 수정한 Source Code 샘플: github.com/JK0369/otpViewSample
UIGraphicsEndImageContext사용 UIImageView을 extension하여 구현 func createImageWithLabelOverlay(text: String, isFromCamera: Bool = false) -> UIImage? { let imageSize = self.image?.size ?? .zero UIGraphicsBeginImageContextWithOptions(CGSize(width: imageSize.width, height: imageSize.height), false, 1.0) let currentView = UIView(frame: CGRect(x: 0, y: 0, width: imageSize.width, height: imageSize.height)) ..
정규 표현식 대표적인 표현식 표현식 의미 ^x x문자열로 시작 x$ x문자로 종료 .x 임의의 한 문자 + x문자로 끝남 x+ x문자가 한번 이상 반복 (x) x는 한 그룹 (x)(y) 각 그룹 (그룹에 순서대로 번호 부여) (?:x) x문자는 집합으로 관리되지 않음 x{n} x문자가 n번 반복 x{n,} x문자가 n번 이상 반복 x{n,m} x문자가 n번 이상 m번 이하로 반복 xyz? xy그리고 0개 또는 1개의 z포함 xyz* xy그리고 0개 이상의 z포함 xyz{2} xy그리고 2개의 z포함 x(yz)* x그리고 0개 이상의 yz포함 a(b|c)) a그리고 b 또는 c 포함 a[bc] a(b|c)와 동일 표현식2 표현식 의미 [xy] x와 y중 하나 문자 선택 [^xy] x및 y를 제외한 문자 [..
프레임워크 pod 'SideMenu' SideMenu로 사용 할 화면 추가 코드로 화면 초기화를 위해, 관련 protocol정의 import UIKit protocol StoryboardInitializable { static var storyboardName: String { get set } static var storyboardID: String { get set } static func instantiate() -> Self } extension StoryboardInitializable where Self: UIViewController { static func instantiate() -> Self { if #available(iOS 13.0, *) { let storyboard = UISto..
* 한 프로젝트에 프레임워크를 추가하여 구분하기: ios-development.tistory.com/217 Toast View UIView를 interface builder로 초기화 할 때 사용될 함수를 common extension에 정의 // CommonExtension/Common/UIView public extension UIView { func xibSetup() { guard let view = loadViewFromNib(nib: type(of: self).className) else { return } view.translatesAutoresizingMaskIntoConstraints = false view.frame = bounds addSubview(view) view.fillToSup..
푸시의 종류 로컬 푸시(local notificatino): 앱으로부터 push를 앱에 띄우는 것 - ios-development.tistory.com/386 서버 푸시(remote notificatino): 서버로부터 push를 앱에 띄우는 것 서버에서 푸시를 받는 원리 Apple Developer 홈페이지에서 push서비스와 함께 Identifiers등록 push서비스와 함께 certificates 발급 APNs에 디바이스 토큰 등록 Identifiers에 push등록 Certificates생성, Provisioning profile생성 방법은 여기 참고: ios-development.tistory.com/256?category=936128 디바이스 토큰을 APNs에 등록하는 원리 디바이스 토큰: i..
* 기본 세팅: KeychainAccess 프레임워크, 프로젝트 구성 * 앱 첫 실행 시 정보를 삭제하는 원리: UserDefaults에 플래그 값을 넣어, 앱이 삭제되면 플래그값도 사라지는 것을 이용 UserDefaults에 첫 번째 실행하는 것인지 체크하는 부분 추가 Domain/CommonExtension/UserDefsults추가: 기존에 flag값이 존재하면 이전에 실행했던 것이고, flag값이 존재하지 않으면 첫번째 실행이라 판단 UserDefaults는 앱을 지우면 같이 지워지므로 확인 (keychain은 앱을 지워도 지워지지 않음) // // UserDefaults.swift // Domain // // Created by 김종권 on 2020/12/16. // import Foundati..
기능 구현 내용 // // ViewController.swift // StringProcessing // // Created by 김종권 on 2020/12/10. // import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() print("12345".substring(from: 1, to: 3)) // 234 print("12345".remove(startInd: 2, length: 2)) // 125 print("12345".insertAt(2, string: "7")) // 127345 } } extension String { // from부터 to까지 String fun..