본문 바로가기

IOS

(19)
[IOS] UserInterfaceStyle (2) 저번 UserInterfaceStyle 포스팅에서 다크모드가 가지고 있는 많은 장점을 무시한채 개인적으로 앱에 적용하고 싶은 색상이 아니어서 라이트로 고정했다. 라고 했었다.. 다시 생각해보니 다크모드 사용자를 무시하고 있는 아주 거만한 태도였고 그 거만함을 반성하고자 다크모드를 대응하는 과정을 포스팅 하려한다. 잠시 Apple이 제시하는 HIG에서 DarkMode 부분에 있는 한 문장을 빌려오겠다. "사람들은 시스템 차원에서 이러한 선택을하기 때문에 일반적으로 모든 앱이 자신의 선호도를 존중하기를 기대합니다." 즉 아래와 같다고 생각한다. 앱이 사용자의 선호도에 근접하다 == 좋은 사용자 경험을 선사한다 애플의 모든 UI/UX 권장사항을 가이드라인형식으로 기재되어 있으니 틈틈히 챙겨 봐야겠다. Dark..
[IOS] UIColor Extension 이번 포스팅에는 RGB Color를 보다 간단하게 작성하거나, 16진수 또는 RGB 같은 형식에서 얽메이지 않고 색상을 구현할 수 있도록 변환하는 Extension을 포스팅 하겠다. UIColor init중 하나인 하단 이미지를 보면 rgb값과 마지막에 alpha 값을 지정해주도록 init을 받고있는게 있다. 그러나 이 alpha 값 하나 써주기 은근 귀찮다. 하단 Extension 코드와 같이 기본값을 1로 가지고 있는 Extension을 만들어 조금이나마 간편하게 사용할 수 있다. Extension UIColor { convenience init(red: Int, green: Int, blue: Int) { self.init(red: CGFloat(red) / 255.0, green: CGFloat(..
[IOS] 키보드 내리기 with TextField SearchBar나 TextField에서 터치 입력이 발생하면 키보드가 올라온다. 이번 포스팅에서는 키보드가 올라온 후에 키보드가 아닌 다른 영역을 터치 해서 키보드를 내리거나 혹은 키보드위에 ToolBar를 올리고 키보드를 내리는 BarButton을 하나 생성하여 BarButton에 Action을 넣은후 진행하는 방법에 대해 얘기해보겠다. 일단 center에 TextField를 하나 생성하겠다. 먼저 아래와 같은 코드를 작성해주자. override func touchesBegan(_ touches: Set, with event: UIEvent?){ self.view.endEditing(true) } 이 touchesBegan 메소드의 대해 알아보자. View 또는 Window에서 하나 이상의 새로운 터..
[IOS] UserInterfaceStyle 21.01.04 다크모드 대응 (하단 참고) - [ 수정 ] devddong.tistory.com/27?category=828276 오랜만에 개인 프로젝트 앱에 접속해 확인하던중 ( 사실 앱스토어 업로드 습작이라 기능이 볼것도 없음 ㅎ ) 유도하지 않게 다크모드에 적용된 부분을 발견했다. SearchBar와 superView의 색상이 바로 해당 부분이다. 그래서 오늘은 이부분을 수정하는 과정을 포스팅 하려한다. 아주 간단하게 해결이 가능한데 AppDelegate의 didFinishLaunchingWithOptions 메소드 내부에 아래와 같이 UserInterfaceStyle을 설정 하는 코드를 추가해준다. func application(_ application: UIApplication, didFini..
[IOS] 이미지와 라벨을 같이 사용한 NavigationBarButtonItem 대부분의 앱들이 네비게이션바에 설정 버튼을 위치해두면서 자신의 프로필이나 앱의 환경설정으로 접근할 수 있게 해놓는다. 필자 또한 프로젝트중에 BarButton을 생성하여 작업하는 과정이 있었고 버튼의 이미지 옆에 text를 붙이는 과정을 포스팅으로 남기려한다. 보통은 간단하게 SystemItem으로 진행하거나, navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .search, target: self, action: #selector(didTapRightBarButton)) systemImage 로 진행 할수 있다. navigationItem.rightBarButtonItem = UIBarButtonItem(image: UII..
[IOS] User Event & MainRunLoop 프로젝트를 진행하는데 MainRunLoop에 관여하는 부분에 있어 버그가 발생했고 이부분에 대해서 포스팅 하려 한다. 버그 발생 부분과 MainRunLoop에 대해서 알아보기 전에 선행으로 AppLifeCycle에 부분적으로 먼저 알고 가보도록 하겠다. 일단 사용자가 앱의 아이콘을 터치했을때 ( 앱을 시작할때 ) C언어 기반의 프로젝트는 main이라는 함수의 호출이 곧 앱의 시작이 된다. IOS의 앱 또한 Object-C 기반임으로 main함수가 호출이 된다. 다만 UIKit framework에서 main함수를 관리 하기 때문에 개발자는 따로 main에 관여해주지 않아도 된다. 그리고 UIKit framework에서 main을 호출 하면서 UIApplicationMain 함수를 호출 하는데이 과정을 통해..
[IOS] PickerView의 element를 직접구성하는 방법 현재 진행하는 프로젝트에서 PickerView에 있는 목록을 선택하면 TableView 각 Cell에는 해당 목록에 맞는 요소들을 보여주게 하는 기능있었다 이 과정중 textField의 inputView를 pickerView로 집어 넣어서 textField 터치이벤트가 작동하면 pickerView를 present 할 수 있는 방법을 알게 되었고 꽤나 유용한 정보인거 같아서 포스팅 한다. 먼저 textField를 만들겠다. 여기서 tintColor를 clear로 설정해지 않으면 textField의 깜빡거리는 커서가 보여질것이다. 그아래는 border를 설정해주었고 기본 text value는 과일로 설정했다. private let textField: UITextField = { let tf = UITextF..
[IOS] Label의 text에따라 유동적인 ScrollView 만들기 프로젝트에서 이용약관을 보여줘야 하는 VC가 필요했다. 대부분 이용약관 text는 상당히 길다. 어떻게 표현할지 고민하다 ScrollView를 사용했는데 ScollView의 레이아웃을 잡는 과정을 포스팅 하려한다. 일단 ScollView를 만들겠다. private let scrollView: UIScrollView = { let scrollView = UIScrollView() scrollView.isScrollEnabled = true scrollView.indicatorStyle = .black scrollView.showsVerticalScrollIndicator = true return scrollView }() Scroll 사용 여부를 결정하는 Bool 값인 isScrollEnabled 속성은 ..
[IOS] AttributedString을 사용한 Label에 Image 속성 추가 라벨과 이미지를 같이 사용하여 구현해야 할 뷰가 있었고 그 부분을 포스팅 하려 한다. Attribute를 이용하여 진행 할껀데 물론 라벨 따로 이미지뷰 따로 레이아웃을 잡아 진행 할 수 있기도 하다. 이부분은 각자의 선택에 맡기겠다. 시작은 아주 간단하게 라벨을 하나 만들겠다. let label: UILabel = { let label = UILabel() label.text = "testtest" return label }() 이 라벨의 레이아웃을 잡아 준다면 이렇게 보일텐데 지금 해보려 하는건 attributedText를 활용한 구현이니깐 let attributedString = NSMutableAttributedString(string: "첫번째 문장") NSMutableAttributedStrin..