목록iOS (30)
Jimmy's iOS
텍스트 필드를 클릭후 키보드가 올라올시 가끔 키보드가 밑에 있는 화면을 가릴때가 있었다. 이것을 NotificationCenter 를 사용해서 해결하였다. override func viewDidLoad() { super.viewDidLoad() setObserver() } func setObserver() { NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHi..
텍스트 필드가 있는 뷰컨트롤러에서 다음과 같은 코드를 적어준다. override func touchesBegan(_ touches: Set, with event: UIEvent?) { self.view.endEditing(true) }
LineBreak 속성은 레이블 내에서 줄바꿈이 일어날 때 어떤 식으로 처리할 것인지 결정한다. 주요 선택값은 다음과 같다. Character Wrap : 개별 문자 단위로 줄바꿈. 하나의 단어가 완전히 끝나지 않았어도 라인의 끝에 도착하면 다음 라인으로 줄을 바꾸어 나머지 문자를 계속 출력한다. Word Wrap : Character Wrap 과 비슷하지만, 개별 문자 단위가 아니라 단어 기준으로 줄바꿈을 한다. 즉, 단어 중간을 끊어 줄바꿈을 하지 않는다는 뜻이다. Truncate Head : 콘텐츠 출력에 필요한 라인 수보다 레이블에 설정된 Line 속성이 적을 경우, 마지막 라인의 첫 머리 텍스트 일부를 말 줄임표로 처리한다. Truncate Middle : Truncate Head 와 비슷하지만..
Url 타입의 이미지들이 서버에서 날라와서 UIImage 타입으로 변환후 사용해야했던 경우가 있었다. var imgData = Array() // imgUrl 은 url 타입의 배열 imgUrl.forEach { if let data = try? Data(contentsOf: $0) { let img = UIImage(data: data) imgData.append(img!) } }

Confetti : 색종이 조각 이라는 뜻 이번에는 CAEmitterLayer 를 활용해서 신기한 animation 을 연습해봤다. 이걸 활용하면 ios 날씨 앱에서 비오는 효과를 줄 수도 있을것같다. (단, 이미지를 여기서는 기본 white 네모 이미지를 사용했지만 비효과 이미지를 사용할 경우) 이 예제에서는 간단하게 버튼을 생성해서 버튼을 클릭하면 애니메이션 효과가 발생하도록 하였다. import UIKit class ViewController: UIViewController { //MARK: - Properties //MARK: - Lifecycle override func viewDidLoad() { super.viewDidLoad() let button = UIButton(frame: CGRec..

AlertController 에 addTextField 속성을 사용한다. Continue 액션 버튼을 클릭시 handler 를 통해 email textField 값과 password textField 값을 얻을 수 있다. import UIKit import SnapKit class ViewController: UIViewController { //MARK: - Properties lazy var showAlertbutton : UIButton = { let bt = UIButton() bt.backgroundColor = .systemBlue bt.setTitle("Show Alert", for: .normal) bt.setTitleColor(.white, for: .normal) bt.addTarget..

프로젝트를 하면서 별점을 주는 것을 해야했다. 별점 예시를 찾다가 cosmos 라는 라이브러리가 있어서 연습을 해봤다. import UIKit import Cosmos import SnapKit class ViewController: UIViewController { //MARK: - Properties lazy var cosmosView : CosmosView = { var view = CosmosView() view.settings.updateOnTouch = true // 클릭 가능 하게 true 가 defualt, false 이면 터치 안됨 // view.settings.filledImage = UIImage(named: "")?.withRenderingMode(.alwaysOriginal) //..
테이블뷰를 사용해서 주문 목록을 구현을 하는 중에 여러 row 셀들이 있는데 그중 한 셀에는 상품들이 늘어날때마다 높이가 늘어나야 했다. 이 문제를 해결하기 위해 동적으로 테이블뷰의 높이를 잡는 방법을 적용해보았다. 테이블뷰의 각각의 row 높이를 동적으로 잡기 전에는 UITableViewDelegate 메서드에서 직접적으로 셀의 height 를 잡아줬다. func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { guard let mydata = AllProductData else { return 0 } var realDatacount = 0 if mydata.count % 2 != 0 { // 셀에..

긴 Int 타입의 값을 내가 직접 원하는 곳까지 잘라서 사용을 하게 되는 경우가 있었다. 값에 ' - ' 이나 ' , ' 등 split 을 할수 있는게 포함이 되어있었다면 split 을 활용하면 좋은데 내가 가지고 있던 값은 1345234 이였다. 여기서 내가 써야하는 값은 뒤에 3자리를 제외한 1345 이였다. 방법을 찾던 중에 String.Index 를 활용해서 인덱스를 직접 설정해서 얻는 방법이 있었다 . 내가 원하는 새로운 인덱스(String.Idex) 를 설정해서 처음에서 내가 원하는 인덱스까지 또는 중간에서 내가 원하는 인덱스 까지 구할수 있었다.
대량의 이미지 파일들을 서버에서 가져와서 보여주는 앱을 서비스를하는 중에 메모리가 급격하게 늘어나는 것을 발견하게 되었다. 이미지 네트워킹처리와 캐싱 처리를 잘 해주는 Kingfisher 라이브러리를 사용하고 있었지만 그래도 메모리 문제는 해결이 되지 않았다. 알고보니 서버에서 용량이 큰 원본 이미지들을 그대로 들고와서 보여주고 있어서 이미지에 대한 메모리가 많이 잡아먹고 있던 것이였다. 그래서 찾아낸 방법이 바로 원본 이미지들을 리사이징을 해서 사용하는 것이다. 1) 먼저 내가 사용할 resizeImage 함수들을 extension으로 만들었다. import UIKit extension UIView { func resizeImage(image: UIImage, newWidth: CGFloat) -> U..