목록iOS (53)
develop
enum 기본으로 아래와 같이 사용할 수 있다. enum CompassPoint { case north case south case east case west } 아래와 같이 case를 생략 할 수 있다. enum CompassPoint { case north, south, east, west } 아래와 같이 enum의 값을 가져올 수 있다. let value = CompassPoint.north RawValue enum CompassPoint: Int { case north, south, east, west } print(CompassPoint.north.rawValue) print(CompassPoint.south.rawValue) 0 1 제일 앞의 값은 0부터 시작한다. RawValue에 초기값을 ..
이전글 2021/01/01 - [iOS] - Subscript 에서 설명한 Subscript에 값을 Optional로 사용합니다. Dictionary에 Subscript를 사용하면 Optional로 나온다. let dict = ["a": 1, "b": 2] let a = dict["a"] print(a) Optional(1) 하지만 Array에 Subscript를 사용하면 데이터 그대로 나오게 된다. let array = [1, 2, 3, 4, 5, 6, 7] let first = array[0] print(first) 1 UITableView 나 UICollectionView 를 사용할때 Array로 데이터를 가져올때 Array가 변하게 되면 Fatal error: Index out of range 에..
subscript(index: Int) -> Int { get { } set { } } 또는 subscript(index: Int) -> Int { // get만 있는 subscript } 이렇게 사용할 수 있다. Dictionary 타입에서는 key-value subscript로 구현되며 해당 key값의 옵셔널 타입을 받거나 리턴한다. Array 타입에서는 index를 받고 해당 index의 값을 받거나 리턴한다. 예제를 보면 struct TimesTable { let multiplier: Int subscript(index: Int) -> Int { return multiplier * index } } let timesTable = TimesTable(multiplier: 3) print(timesT..
스위즐링은 런타임에 해당 메서드를 내가 원하는 메서드로 바꿀 수 있다. extension UIViewController { @objc private func customViewWillAppear(_ animated: Bool) { print("customViewWillAppear 호출") } public static func swizzleMethodInitialize() { let originalSelector = #selector(viewWillAppear(_:)) let swizzledSelector = #selector(customViewWillAppear(_:)) let originalMethod = class_getInstanceMethod(UIViewController.self, origina..
1. CustomView IBDesignable 만들기 @IBDesignable class CustomView: UIView { } 2. CustomView에 IBInspectable 추가하기 @IBDesignable class CustomView: UIView { @IBInspectable var labelText: String? { set { self.label.text = newValue } get { return self.label.text } } @IBInspectable var labelTextColor: UIColor? { set { self.label.textColor = newValue } get { return self.label.textColor } } @IBInspectable va..
위와 같이 Face로 추정되는 곳에 Blur처리 또는 이미지로 합칠 수 있다. CIDetector를 사용하여 face를 찾기 private func faceDetector(_ image: UIImage?) { guard let image = image, let ciImage = CIImage(image: image), let ciDetector = CIDetector( ofType: CIDetectorTypeFace, context: nil, options: [CIDetectorAccuracy : CIDetectorAccuracyHigh] ) else { return } let features = ciDetector.features(in: ciImage) if features.isEmpty { retur..
func makeLabel() -> UILabel? { let label = UILabel() label.frame = CGRect(x: 150, y: 200, width: 200, height: 20) label.text = "Hello World!" let textSize = (label.text ?? "").size(withAttributes: [NSAttributedString.Key.font : label.font]) let tempLabel = UILabel(frame: CGRect(x: 0, y: 0, width: textSize.width, height: .greatestFiniteMagnitude)) tempLabel.numberOfLines = 0 tempLabel.text = labe..
1. Info.plist Privacy - Photo Library Usage Description을 추가한다. 2. import Photos 를 import한다. import Photos 3. PHPhotoLibraryChangeObserver PHPhotoLibraryChangeObserver 를 컨트롤러에 등록한다. PHPhotoLibraryChangeObserver 는 이미지가 추가되거나 삭제되거나 수정됬을때 호출이 된다. deinit될때 해제되어야 한다. class ViewController: UIViewController { deinit { PHPhotoLibrary.shared().unregisterChangeObserver(self) } override func viewDidLoad() {..
QLPreviewController를 사용하면 엑셀, 이미지, PDF, 집파일 등을 쉽게 보여줄 수 있다. import QuickLook class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() DispatchQueue.main.async { let previewController = QLPreviewController() previewController.dataSource = self self.present(previewController, animated: true, completion: nil) } } } extension ViewController: QLPreviewControllerDataS..
UDID(Unique Device Identifier) iOS에서 기존에 코드로 볼수 있었던 UDID가 iOS5에서부터 deprecated되었다. UDID(고유 장치 식별자)는 응용 프로그램 설치, 등록 및 MDM(모바일 단말 관리) 등록의 목적을 위해 장치를 식별하는데 사용 되는 계산 된 문자열이다. 위키의 UDID 설명 https://www.theiphonewiki.com/wiki/UDID UDID - The iPhone Wiki A UDID (Unique Device Identifier) is a calculated string that is used to identify a device for the purposes of app installation, registration, and MDM en..
도형 그리기 1. 라인(Line) class LineView: UIView { override func draw(_ rect: CGRect) { let path = UIBezierPath(rect: rect) UIColor.lightGray.setFill() path.fill() path.close() let linePath = UIBezierPath() linePath.move(to: CGPoint(x: 0, y: rect.height / 2)) linePath.addLine(to: CGPoint(x: rect.width, y: rect.height / 2)) linePath.lineWidth = 6 UIColor.black.set() linePath.stroke() linePath.close() } ..