자바의 참조타입은 Call by Value로 동작한다길래, swift의 개념도 흔들려서 이번기회에 꽉 잡기위해 포스팅한다. 누구나 알고 있겠지만 Call by Value, Call by Reference를 정의 하면 Call by Value 값을 복사하여 처리한다 Call by Reference 주소를 참조하여 처리한다. 여기서 헷갈린 개념이, 그러면 참조 타입은, 주소 값을 가지고 있고, 다른 변수에 할당 할 때, 이 값을 복사해서 다른 변수에 할당하는 것인지를 헷갈렸다. 결론부터 말하자면, 주소를 복사해서 다른 변수에 할당하는 것이 아닌, 참조 그 자체를 복사한다. 즉 주소값을 복사하는게 아니다. class A { var a: Int = 0 } var classA = A() var classB = c..
프로젝트를 진행하던 도중, 아래와 같은 화면을 만들어야 했다. UILabel과 언더라인 뷰를 하나의 스택뷰로 만들어서 UILabel안에 입력된 크기에 따라 width가 변하는 하나의 스택뷰를 만들기로 결정. 글자크기는 80pt로 주고 스택뷰로 묶어서 만든 결과 이런 결과가 나왔다. 상하 여백이 넓게 존재해, 디자인한 UI와 맞지 않는다. 처음에는 이를 해결하기 위해 sizeToFit()함수를 사용했지만 여전히 똑같이 나온다. 글자가 UILabel의 중심에 있는것으로 보아, 이를 설정할 수 있는 변수가 존재한다고 생각하고, 공식 문서를 뒤져봤지만 존재하지 않았다. 몇 시간의 삽질 끝에 원인을 찾아냈다. 이런 문제가 발생한 이유 원인은 UILabel 자체가 아닌 font자체에 있다. 영어 노트를 생각해 보면..
상단 메뉴 바를 완성했으니, 메뉴바를 클릭하면, 해당 화면으로 화면이 변경되도록 해야 합니다. UITabBarController처럼, Controller를 만들어서 메뉴바와 화면을 가지고 있으면서, 사용자가 원하는 배치로 만들 수 있게 하겠습니다. class CustomTabBarViewController: UIViewController { lazy var menuBar: CustomMenuBar = { let menuBar = CustomMenuBar() menuBar.translatesAutoresizingMaskIntoConstraints = false return menuBar }() lazy var pageView: UIView = { let view = UIView() view.translat..
iOS에서 탭바는 하단에 고정되어 있다. 상단 부분에 탭바를 만들고 싶다면, 직접 구현해야 한다. 라이브러리를 써도 되지만, 직접 구현하는 편이 성능상에도 좋을것 같고, 예상치 못한 버그를 수정하는데도 좋을것 같아서 직접 구현해보았다. UITabBarController의 공식문서에 나와있는 탭바의 view 계층 및 구현을 참고하여 구현했다. 상단 메뉴바 구현 상단 메뉴바는 화면을 전환하는 역할을 담당한다. 상단 탭바의 경우 버튼 스택뷰를 이용하거나, 콜렉션 뷰를 이용하여 탭바 안에 들어가는 ViewController의 개수에 따라 일정한 크기를 유지하도록 조절 할 수 있다. 나는 콜렉션 뷰를 활용했다. 메뉴바는 UIView에 콜렉션뷰를 넣고, 콜렉션 뷰의 하단에, 현재 위치를 표시해주는 하단바를 콜렉션 ..
let circlePath = UIBezierPath(arcCenter: completeButton.center, radius: completeButton.frame.width/2, startAngle: 0, endAngle: .pi * 2, clockwise: true) let shape = CAShapeLayer() shape.path = circlePath.cgPath shape.fillColor = UIColor.red.cgColor completeButton.layer.addSublayer(shape) UIBezierPath로 원을 completeButton과 같은 크기와 위치에 그리려고 했는데, center가 일치하지 않는 문제가 발생. 원인 UIView의 center는 슈퍼뷰를 기준으로 해당..
이거때문에 3시간은 날린듯... UIButton에서 이미지를 조절하는 방법은 과거에는 contentInset같이 Inset을 조절하여 이미지 사이즈를 조절하는 방식이 있었지만, 지금은 업데이트 되면서 빠지게 되었다. 그래서 다른 방식으로 이미지를 조절해야 한다. 그 방법은 이미지 사이즈 자체를 조절하는 것. UIButton는 이미지의 크기대로 버튼 내부에 그릴 뿐. 따라서 image를 내가 원하는 사이즈로 resizing하면 된다. 이미지 리사이징 코드 import UIKit extension UIImage { func resizeImageTo(size: CGSize) -> UIImage? { UIGraphicsBeginImageContextWithOptions(size, false, 0.0) self...