๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
728x90
๋ฐ˜์‘ํ˜•

๐ŸŽ iOS/UI59

[iOS/UI] ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ” ํ‹ดํŠธ ๋ฐ ํƒ€์ดํ‹€ ์ปฌ๋Ÿฌ๋ฐ”๊พธ๊ธฐ 1 2 3 4 5 6 7 8 //iOS 13์ด์ƒ์ผ ๋•Œ ํƒ€์ดํ‹€ ์ปฌ๋Ÿฌ ๋ฐ”๊พธ๋Š” ๋ฒ• if #available(iOS 13.0, *) { navigationController?.navigationBar.standardAppearance.titleTextAttributes = [.foregroundColor: UIColor.white] } else { navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white] } //๋ฐ” ํ‹ดํŠธ ๋ฐ”๊พธ๋Š” ๊ฒƒ self.navigationController?.navigationBar.barTintColor = UIColor.darkGray Colored by Color Scripter .. 2020. 6. 29.
[iOS/UI] UITextField ๊ธ€์ž ์ˆ˜ ์ œํ•œํ•˜๊ธฐ(UITextField set MaxLength) Swift ์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค! ์˜ค๋Š˜์€ ํ…์ŠคํŠธํ•„๋“œ์˜ ๊ธ€์ž ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ๋ฒ•์— ๋Œ€ํ•ด์„œ ๊ณต์œ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค! ๋ฐ”๋กœ ์‹œ์ž‘ํ• ๊ฒŒ์š”~ ๋จผ์ € ์›ํ•˜์‹œ๋Š” ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์— UITextFieldDelegate๋ฅผ ์ฑ„ํƒํ•ด์ฃผ์‹œ๊ณ  ์ œํ•œํ•  ํ…์ŠคํŠธํ•„๋“œ์˜ ๋”œ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ self๋กœ ํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์Šคํ† ๋ฆฌ๋ณด๋“œ์—์„œ ํ…์ŠคํŠธํ•„๋“œ ์•ก์…˜์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š”๋ฐ ๋ฐ˜๋“œ์‹œ Editing Changed๋กœ ํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ ๋‹ค์Œ์œผ๋กœ ์ด์ œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ธ€์ž์ˆ˜๋ฅผ ์ œํ•œํ•  ๋ฉ”์†Œ๋“œ๋ฅผ ์•„๋ž˜์ฒ˜๋Ÿผ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. 1 2 3 4 5 func checkMaxLength(textField: UITextField!, maxLength: Int) { if (textField.text?.count ?? "" > maxLength) { textField.deleteBackward() } } Colored .. 2020. 6. 21.
[iOS/UI] UIView ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๊ทธ๋ผ๋ฐ์ด์…˜ ์ƒ‰ ๋„ฃ๊ธฐ (UIView Background gradient color) ์˜ค๋Š˜์€ UIView์— ๊ทธ๋ผ๋ฐ์ด์…˜ ์ƒ‰ ํšจ๊ณผ๋„ฃ๋Š” ๋ฒ•์„ ์•Œ์•„๋ด…์‹œ๋‹ค. ์ œ์ผ ๋จผ์ € ์Šคํ† ๋ฆฌ๋ณด๋“œ์—์„œ ์‹œํ—˜ํ•˜๊ธฐ ์œ„ํ•œ view๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์— ์—ฐ๊ฒฐ์‹œ์ผœ์ค๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ extension์œผ๋กœ UIView๋ฅผ ํ™•์žฅ์‹œ์ผœ์ฃผ๊ณ  ์•ˆ์— ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋‘ ์ข…๋ฅ˜ ์ƒ‰์„ ๋ฐ›๋Š” ๋ฉ”์†Œ๋“œ๋กœ setGradient๋ฅผ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. ์šฐ์„  CAGradientLayer์ธ gradient๋ฅผ ๋งŒ๋“ค์–ด์ค€ ๋’ค gradient.colors๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋‘ ์ข…๋ฅ˜๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. gradient.locations๋Š” ๊ทธ๋ผ๋ฐ์ด์…˜์ด ์–ด๋Š ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐˆ์ง€ ์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. startPoint์™€ endPoint๋Š” ๊ฐ ๊ฐ ์‹œ์ž‘์ ๊ณผ ๋์ ์„ ์ •ํ•ด์ฃผ๋Š” ๊ฒ๋‹ˆ๋‹ค. frame์€ ํ•ด๋‹น view์— ๋งž๊ฒŒ ๋งž์ถฐ์ฃผ๋Š” bounds๋ฅผ ์จ์ฃผ์‹œ๊ณ  ํ•ด๋‹น view์˜ layer์— addSublayer๋กœ .. 2020. 5. 27.
[iOS/UI] Swift ํƒญ๋ฐ”์•„์ดํ…œ์— ์ด๋ฏธ์ง€ ์‚ฝ์ž…ํ•˜๊ธฐ(UITabBarItem Using oringinal image) ์šฐ์„  ํƒญ๋ฐ”์•„์ดํ…œ์— ๋„ฃ์„ ์ด๋ฏธ์ง€๋ฅผ Asset์— ๋„ฃ์–ด์ค€๋‹ค. ๊ทธ ๋’ค์— ํ•ด๋‹น ์ด๋ฏธ์ง€์˜ Image Set์—์„œ Render As๋ฅผ Original Image๋กœ ๋ฐ”๊ฟ”์ค€ ๋’ค ํ•ด๋‹น ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์— Image๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ด๋ฏธ์ง€๊ฐ€ ๊ทธ๋Œ€๋กœ ์ ์šฉ๋œ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ์ž˜ ์ ์šฉ๋œ ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ ์กฐ๊ธˆ ๋” ์•„๋ž˜๋กœ ๋‚ฎ์ถ”๊ณ  ์‹ถ๋‹ค๋ฉด ํ•ด๋‹น ํƒญ๋ฐ”์•„์ดํ…œ์˜ Image Inset์„ ์กฐ์ •ํ•˜๋ฉด ๋œ๋‹ค! 2020. 4. 3.
[iOS/UI] Swift ์•จ๋ฒ” ์‚ฌ์ง„ ๊ณ ๋ฅธ ๊ฐฏ์ˆ˜ ์ฐจ๋ก€๋กœ ๋ฒˆํ˜ธ ๋ถ€์—ฌํ•˜๊ธฐ ์šฐ์„  ๋‚˜๋Š” ์•„๋ž˜ ์นดํ†ก ์‚ฌ์ง„๊ณ ๋ฅด๊ธฐ์™€ ๊ฐ™์ด ํƒญํ•œ ์ˆœ์„œ๋Œ€๋กœ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ€์—ฌ๋˜๋ฉด์„œ ์‚ฌ์ง„๋ฐฐ์—ด์— ์‚ฌ์ง„์ด ๋“ค์–ด๊ฐ€๊ฒŒ ํ•˜๊ณ  ๋‹ค์‹œ ํƒญํ•  ๊ฒฝ์šฐ ๋ฐฐ์—ด์˜ ์‚ฌ์ง„์„ ์‚ญ์ œํ•ด์ฃผ๊ณ  ๊ทธ๋ณด๋‹ค ํฐ ๋ฒˆํ˜ธ๋“ค์€ ์‚ญ์ œํ•œ ๊ฐฏ์ˆ˜๋งŒํผ ๋ฒˆํ˜ธ๊ฐ€ ์ž‘์•„์ ธ์•ผํ–ˆ๋‹ค. ์šฐ์„  2๊ฐœ์˜ ๋ฐฐ์—ด์ด ํ•„์š”ํ•œ๋ฐ ํ•˜๋‚˜๋Š” ์‚ฌ์ง„์„ ๋‹ด์„ ๋ฐฐ์—ด๊ณผ ํ•˜๋‚˜๋Š” ๋ช‡ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๊ฐ€ ์„ ํƒ๋˜์—ˆ๋Š”์ง€ ๋‹ด์„ ๋ฐฐ์—ด์ด ํ•„์š”ํ•˜๋‹ค. 1 2 var photos = [UIImage]() var photoarray = [Int]() ๊ทธ ๋‹ค์Œ cellForItemAt์— ํฌํ† ์–ด๋ ˆ์ด๊ฐ€ ๋น„์–ด์žˆ์ง€์•Š๋‹ค๋ฉด !photoarray.isEmpty{ for๋ฌธ์„ ์ด์šฉํ•ด photoarray์•ˆ์— ์žˆ๋Š” ์ˆซ์ž๋“ค์„ ์ฐจ๋ก€๋กœ indexPath์™€ ๋น„๊ตํ•ด์„œ ๋งž๋‹ค๋ฉด ํ•ด๋‹น ์ˆซ์ž๋ผ๋ฒจ(cell.number)๋ฅผ i๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค. ๊ทธ๋Ÿฌ๋ฉด photoarray์•ˆ์— ์ˆœ์„œ๋Œ€๋กœ ํ…์Šค.. 2020. 4. 1.
[iOS] ๋Ÿฐ์น˜์Šคํฌ๋ฆฐ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ(LaunchScreen Update) ์šฐ์„  ํฐ์ด๋‚˜ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ์•ฑ์„ ์‚ญ์ œํ•˜๊ณ  ์ „์›์„ ๋„๊ณ  ๋‹ค์‹œ ์ผ  ๋‹ค์Œ ์•ฑ์„ ๋‹ค์‹œ ์„ค์น˜ํ•˜๋ฉด ๋Ÿฐ์น˜์Šคํฌ๋ฆฐ์ด ์—…๋ฐ์ดํŠธ ๋œ๋‹ค! 2020. 3. 25.
[iOS] Swift ์‚ฌ์ง„ ํ—ˆ๊ฐ€๋ฐ›์€ ์ƒํƒœ์•Œ๊ธฐ ๋ฐ ์„ธํŒ…์œผ๋กœ ์ธ๋„ํ•˜๊ธฐ ์šฐ์„  ์ฒดํฌํฌํ† ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌํผ๋ฏธ์…˜ ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ๊ฐ ์ƒํƒœ์— ๋”ฐ๋ผ ํ•ด์•ผํ•  ์ผ์„ ์ •ํ•ด์ค€๋‹ค 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 func checkPhotoLibraryPermission() { let status = PHPhotoLibrary.authorizationStatus() switch status { case .authorized: self.testlabel.text = "ํ—ˆ๋ฝ" case .denied, .restricted : self.testlabel.text = "์•„์ง" case .notDetermined: self.testlabel.text = "๊ฒฐ์ •๋ชปํ•จ" PHPhotoLibrary.requestAuthorization { statu.. 2020. 3. 23.
[iOS] ์„ธ๊ทธ๋กœ ํ™”๋ฉด ์ด๋™ ์‹œ ๋„ค๋น„๊ฒŒ์ด์…˜ ํƒ€์ดํ‹€ ๋ฐ”๊พธ๊ธฐ ์›๋ž˜ ๋„ค๋น„๊ฒŒ์ด์…˜ ํƒ€์ดํ‹€์€ ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ”๊พธ๋ฉด ๋๋‹ค. ํ•˜์ง€๋งŒ ์„ธ๊ทธ๋กœ ์ด๋™ ์‹œ์—” ์›ํ•˜๋Š” ํ…์ŠคํŠธ๋กœ ๋ฐ”๋€Œ์ง€๊ฐ€ ์•Š์•˜๋‹ค. ๊ตฌ๊ธ€๋งํ•ด ๋ณธ ๊ฒฐ๊ณผ ViewController์—” ๋”ฐ๋กœ title์ด๋ผ๋Š” property๊ฐ€ ์กด์žฌํ–ˆ๊ณ  ์ด๊ฒƒ์„ ๋ฐ”๊ฟ”์ค˜์•ผ ๋„ค๋น„๊ฒŒ์ด์…˜ ํƒ€์ดํ‹€์ด ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ name์„ ์„ค์ •ํ•ด์ค€ ๋’ค ํ™”๋ฉด์„ ์ด๋™ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํƒ€์ดํ‹€์ด ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค. 2020. 2. 29.
[iOS] UITableViewController์—์„œ ์„ธ๊ทธ๋กœ ๊ฐ’ ๋„˜๊ธฐ๊ธฐ ์šฐ์„  ์…€ ์•ˆ์— ์žˆ๋Š” ๋ฒ„ํŠผ์— addTarget์„ ์„ค์ •ํ•ด์ฃผ๊ณ  action์— #selector(@objcํ•จ์ˆ˜)๋ฅผ ๋„ฃ์–ด์ค€๋‹ค. @objc ํ•จ์ˆ˜์—” performSegue๋ฅผ ์ด์šฉํ•ด ํ•ด๋‹น ์„ธ๊ทธ์˜ ์•„์ด๋ดํ‹ฐํ”ผ์–ด๋ฅผ ์ •ํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  override๋˜์–ด์žˆ๋Š” ๋ฉ”์†Œ๋“œ prepare๋ฅผ ์ด์šฉํ•ด ๊ทธ ์•ˆ์— param์ด๋ผ๋Š” ์ƒ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ค€ ๋’ค segue.destination as! ์›ํ•˜๋Š”๋ทฐ์ปจํŠธ๋กค๋Ÿฌ ์›ํ•˜๋Š”๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์•ˆ์— ๋ณ€์ˆ˜ ์ค‘ ๋ฐ”๊ฟ€ ๊ฐ’์„ ์ž…๋ ฅํ•ด์ค€๋‹ค. ์ถœ๋ฐœํ•  ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์—์„œ control์„ ํ•ด์„œ ๋„์ฐฉํ•˜๊ณ  ์‹ถ์€ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์— show๋ฅผ ํ•ด์ฃผ๊ณ  ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์— identifier์— ์›ํ•˜๋Š” ์ด๋ฆ„์„ ์„ค์ •ํ•ด์ค€๋‹ค. 2020. 2. 29.
[iOS] ํƒญ๋ฐ”๋ฅผ ์œ ์ง€ํ•œ ์ฑ„ ํŠน์ • ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ด๋™ํ•˜๊ธฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํƒญ๋ฐ”์ปจํŠธ๋กค์— ์†ํ•ด ์žˆ๋Š” ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋‹ค๋ฅธ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ด๋™ํ•˜๋ฉด ํƒญ๋ฐ”๊ฐ€ ์‚ฌ๋ผ์ง„ ์ฑ„ ํ™”๋ฉด์ด ์ „ํ™˜๋œ๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ ํ•˜์ง€๋งŒ ์•„๋ž˜ ์ฒ˜๋Ÿผ ํƒญ๋ฐ”์ปจํŠธ๋กค๋Ÿฌ์— ์†ํ•ด์žˆ๋Š” ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์— ๋„ค๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๊ณ  ํƒญ๋ฐ” ์ปจํŠธ๋กค๋Ÿฌ์˜ ์—ฐ๊ฒฐ์„ ๋„ค๋น„๊ฒŒ์ด์…˜์ปจํŠธ๋กค๋Ÿฌ๋กœ ํ•ด์ฃผ๋ฉด ํƒญ๋ฐ”๊ฐ€ ์œ ์ง€๋œ ์ฑ„ ํ™”๋ฉด์ด ์ „ํ™˜๋œ๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ ํƒญ๋ฐ”๊ฐ€ ์œ ์ง€๋œ ์ฑ„ ํ™”๋ฉด์ด๋™ ํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค. 2020. 2. 28.
[iOS/UI] ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ” ๋ฐฑ๋ฒ„ํŠผ ์ปค์Šคํ…€ํ•˜๊ธฐ(UINavigationBarItem Custom) ํŠน์ • ๋„ค๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ํ™”๋ฉด์„ ์ด๋™ํ•  ๋•Œ ์ž๋™์œผ๋กœ ๋ฐฑ๋ฒ„ํŠผ์ด ์ƒ๊ธฐ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ ๋‚˜๋Š” ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์•„์ด์ฝ˜์œผ๋กœ ๋„์šฐ๊ณ  ๋ฐฑ๋ฒ„ํŠผ๊ณผ ๋˜‘๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ”๊ฒŒ ํ•˜๊ณ ์‹ถ์—ˆ๋‹ค. ๋ฐ”๋ฒ„ํŠผ์•„์ดํ…œ์—์„œ ์ž์‹ ์ด ์›ํ•˜๋Š” ์ด๋ฏธ์ง€์™€ style tagget action์„ ๋งŒ๋“ค์–ด์ค€ ๋’ค ๋„ค๋น„๊ฒŒ์ด์…˜ ์•„์ดํ…œ์—์„œ ์™ผ์ชฝ ๋ฐ”๋ฒ„ํŠผ ์•„์ดํ…œ์— ๋งŒ๋“ค์–ด ์ค€ ๋ฐ”๋ฒ„ํŠผ ์•„์ดํ…œ์„ ์„ค์ •ํ•ด์ค€๋‹ค. 1 2 let backbutton = UIBarButtonItem(image: UIImage(named: "passwordOn@3x.png"), style: .done, target: self, action: #selector(back)) self.navigationItem.leftBarButtonItem = backbutton http://colorscripter.c.. 2020. 2. 28.
[iOS/UI] ํ…Œ์ด๋ธ”๋ทฐ ์ œ์ผ ์œ„๋กœ ๊ฐ€๊ธฐ ์›ํ•˜๋Š” ๊ณณ์—๋‹ค ๋„ฃ์œผ๋ฉด ํ…Œ์ด๋ธ”๋ทฐ์˜ ๋งจ ์œ„ ์ชฝ์œผ๋กœ ์ด๋™ํ•œ๋‹ค. 1 tableView.contentOffset = CGPoint(x: 0, y: 0 - tableView.contentInset.top) 2020. 2. 14.
728x90
๋ฐ˜์‘ํ˜•