Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- Input Output
- 양궁대회
- 테이블뷰 나누기
- retain cycle
- 프로그래머스
- UserDefaults
- 강한 참조 순환
- NavigationSearchBar
- class struct
- SWIFT
- Value Type Reference Type
- TableView
- Reference Cycle
- 자료구조
- tableview section별 다른 cell적용
- wil
- 면접을 위한 CS 전공 지식 노트 Tree
- coremotion
- 면접을 위한 CS전공 지식 노트
- CarouselCollectionview
- UIKit
- ReferceCycle
- CoreData
- Carousel CollectionView
- TableView Section
- firebase
- @escaping
- til
- Array vs Linked List
- 롤케이크 자르기
Archives
- Today
- Total
개발하는 동글 :]
[TIL],[UIkit] 계산기 레이아웃 programmatically 본문
구현 목표
- 코드로 UI 구성하기 :완료
- 문자열을 리턴 받아 문자열을 분리하여 배열로 만들어 준 후 연산하는 기능 구현 하기 : 데이터를 문자열로 전달 받아 배열로 분리하는 과정까지 진행 ex) "123+123" -> ["123","+","123"]
//
// ViewController.swift
// fisrtCalcu
//
// Created by SeoJunYoung on 2023/07/17.
//
import UIKit
class ViewController: UIViewController {
var buttonTitle = ["7","8","9","+/-","4","5","6","*","1","2","3","/","0",".","AC","="]
var dataManager = DataManager(nowNum: "")
let contentView: UIView = {
let contentView = UIView()
contentView.translatesAutoresizingMaskIntoConstraints = false
contentView.backgroundColor = UIColor.black
return contentView
}()
let disPlayView: UIView = {
let disPlayView = UIView()
disPlayView.translatesAutoresizingMaskIntoConstraints = false
disPlayView.backgroundColor = UIColor.white
return disPlayView
}()
let disPlayLabel: UILabel = {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = ""
label.textAlignment = NSTextAlignment.right
label.font = UIFont.boldSystemFont(ofSize: 30)
label.textColor = UIColor.black
return label
}()
let slideView: UICollectionView = {
let flowLayout = UICollectionViewFlowLayout()
flowLayout.itemSize = CGSize(width: 50 , height: 50)
flowLayout.sectionInset = UIEdgeInsets(top: 5, left: 10, bottom: 5, right: 10)
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: flowLayout)
collectionView.translatesAutoresizingMaskIntoConstraints = false
collectionView.backgroundColor = UIColor.black
return collectionView
}()
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
}
func setupUI(){
contantVIewUI()
disPlayViewUI()
slideViewUI()
}
func contantVIewUI(){
view.addSubview(contentView)
NSLayoutConstraint.activate([
contentView.topAnchor.constraint(equalTo: view.topAnchor),
contentView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
contentView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
contentView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
])
}
func disPlayViewUI(){
contentView.addSubview(disPlayView)
NSLayoutConstraint.activate([
disPlayView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 100),
disPlayView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 10),
disPlayView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -10),
disPlayView.heightAnchor.constraint(equalToConstant: 150)
])
disPlayView.addSubview(disPlayLabel)
NSLayoutConstraint.activate([
disPlayLabel.topAnchor.constraint(equalTo: disPlayView.topAnchor, constant: 10),
disPlayLabel.leadingAnchor.constraint(equalTo: disPlayView.leadingAnchor, constant: 10),
disPlayLabel.trailingAnchor.constraint(equalTo: disPlayView.trailingAnchor, constant: -10),
disPlayLabel.bottomAnchor.constraint(equalTo: disPlayView.bottomAnchor, constant: -10)
])
}
func slideViewUI(){
contentView.addSubview(slideView)
slideView.dataSource = self
slideView.delegate = self
slideView.register(ButtonCell.self, forCellWithReuseIdentifier: "ButtonCell")
NSLayoutConstraint.activate([
slideView.topAnchor.constraint(equalTo: disPlayView.bottomAnchor, constant: 50),
slideView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
slideView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
slideView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor)
])
}
}
extension ViewController: UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAt indexPath: IndexPath) -> CGSize {
let interval:CGFloat = 5
let width: CGFloat = ( UIScreen.main.bounds.width - interval * 2 ) / 5
return CGSize(width: width , height: width + 30)
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return buttonTitle.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if collectionView == slideView{
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ButtonCell", for: indexPath) as! ButtonCell
cell.button.setTitle(buttonTitle[indexPath.row], for: .normal)
var myColor = ["+/-","*","/","=","AC"].contains(buttonTitle[indexPath.row]) ? UIColor.yellow : UIColor.gray
cell.contantView.backgroundColor = myColor
cell.button.setTitleColor(UIColor.black, for: .normal)
cell.button.addTarget(self, action: #selector(self.buttonAction), for: .touchUpInside)
return cell
}
return UICollectionViewCell()
}
@objc func buttonAction(_ sender: UIButton){
guard let num = sender.titleLabel?.text else { return }
if num == "="{
dataManager.makeNumsAry()
dataManager.nowNum = dataManager.calculation()
self.disPlayLabel.text = dataManager.nowNum
dataManager.calToggle = true
} else if num == "AC"{ //완료
dataManager.nowNum = ""
self.disPlayLabel.text = dataManager.nowNum
dataManager.calToggle = true
} else if num == "+/-"{
var type = dataManager.calToggle ? "+" : "-"
if dataManager.nowNum.count == 0{
dataManager.nowNum += type
self.disPlayLabel.text = dataManager.nowNum
} else {
guard let lastChar = dataManager.nowNum.last else{ return }
if lastChar.isNumber{
dataManager.nowNum += type
self.disPlayLabel.text = dataManager.nowNum
} else {
dataManager.nowNum.popLast()
dataManager.nowNum += type
self.disPlayLabel.text = dataManager.nowNum
}
}
dataManager.calToggle.toggle()
} else if num == "*"{
if dataManager.nowNum.count == 0{
dataManager.nowNum += num
self.disPlayLabel.text = dataManager.nowNum
} else {
guard let lastChar = dataManager.nowNum.last else{ return }
if lastChar.isNumber{
dataManager.nowNum += num
self.disPlayLabel.text = dataManager.nowNum
} else {
dataManager.nowNum.popLast()
dataManager.nowNum += num
self.disPlayLabel.text = dataManager.nowNum
}
}
dataManager.calToggle = true
} else if num == "/"{
if dataManager.nowNum.count == 0{
dataManager.nowNum += num
self.disPlayLabel.text = dataManager.nowNum
} else {
guard let lastChar = dataManager.nowNum.last else{ return }
if lastChar.isNumber{
dataManager.nowNum += num
self.disPlayLabel.text = dataManager.nowNum
} else {
dataManager.nowNum.popLast()
dataManager.nowNum += num
self.disPlayLabel.text = dataManager.nowNum
}
}
dataManager.calToggle = true
} else { //완료
dataManager.nowNum += num
self.disPlayLabel.text = dataManager.nowNum
dataManager.calToggle = true
}
}
}