[TIL] 2021.03.25
👩🏻💻 今日の勉強内容
ビューに必要な枠線を追加
CaLayerとは?( コメントサイト )
extension CALayer {
func addBorder(_ arr_edge: [Int]) {
print(arr_edge)
let boldWidth: CGFloat = 2 // 테두리 두께 2
let basicWidth: CGFloat = 1 // 테두리 두께 1
// .top : CGRect.init(x: 0, y: 0, width: frame.width, height: boldWidth)
// .bottom : CGRect.init(x: 0, y: frame.height - boldWidth, width: frame.width, height: boldWidth)
// .left : CGRect.init(x: 0, y: 0, width: boldWidth, height: frame.height)
// .right : CGRect.init(x: frame.width - boldWidth, y: 0, width: boldWidth, height: frame.height)
let boldCgRect: [CGRect] = [CGRect.init(x: 0, y: 0, width: frame.width, height: boldWidth), CGRect.init(x: 0, y: frame.height - boldWidth, width: frame.width, height: boldWidth), CGRect.init(x: 0, y: 0, width: boldWidth, height: frame.height), CGRect.init(x: frame.width - boldWidth, y: 0, width: boldWidth, height: frame.height)]
let basicCgRect: [CGRect] = [CGRect.init(x: 0, y: 0, width: frame.width, height: basicWidth), CGRect.init(x: 0, y: frame.height - basicWidth, width: frame.width, height: basicWidth), CGRect.init(x: 0, y: 0, width: basicWidth, height: frame.height), CGRect.init(x: frame.width - basicWidth, y: 0, width: basicWidth, height: frame.height)]
for j in 0...3 { // 회색 부분 먼저 그려줌
let border = CALayer()
if arr_edge[j] == 0 {
border.frame = basicCgRect[j]
border.backgroundColor = #colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1)
}
self.addSublayer(border)
}
for j in 0...3 {
let border = CALayer()
if arr_edge[j] == 1 {
border.frame = boldCgRect[j]
border.backgroundColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
}
self.addSublayer(border)
}
}
}
アプリケーションclass SudokuCell: UICollectionViewCell{
@IBOutlet weak var numLabel: UILabel!
@IBOutlet weak var view: UIView!
func updateUI(_ i : Int){
numLabel.text = String(i % 10)
// 행 비교
var edgeArr: [Int] = [0,0,0,0]
// top bottom left right 순
if (i / 9 % 3) == 0 {
if i % 3 == 0 { // 위, 왼
edgeArr = [1,0,1,0]
} else if i % 3 == 1 { // 위
edgeArr = [1,0,0,0]
} else{ // 위, 오
edgeArr = [1,0,0,1]
}
} else if (i / 9 % 3) == 1 {
if i % 3 == 0 { // 왼
edgeArr = [0,0,1,0]
} else if i % 3 == 2 { // 오
edgeArr = [0,0,0,1]
}
} else{
if i % 3 == 0 { // 왼, 아
edgeArr = [0,1,1,0]
} else if i % 3 == 1 { // 아
edgeArr = [0,1,0,0]
} else{ // 아, 오
edgeArr = [0,1,0,1]
}
}
view.layer.addBorder(edgeArr)
}
}
✍🏻 今日は
上に9つの数字ボタンを作成してStoryboardで実装しようとしたが、ボタン間の間隔をどのように決定するか分からないのでCollectionViewで実現した.Androidシステムなら例えばHorizontalSpacingを0にするとSelf-Sizing?でもxcodeはダメまた,関係をequalではなくequal以下と指定したが,この方法では各機器の比率が適切であるか否かを決定することはできない.そこで、この問題をCollectionViewで解決しました.
今回のアプリケーションのビューが実現するにつれて、他の開発者もどのような方法で自動化Sizingを実現するか知りたいと思っています.各デバイスのサイズは異なりますが、どのようにサイズを調整しますか?まず、私が実現したものでは、低戻りボタンもサイズを指定してくれて、フォントもサイズを指定してくれたので、どの機械でも低戻りビューのサイズは同じです.しかし、数独ボードや下のオプションボタン部分、数字ボタン部分のCollectionViewを使用しているので、柔軟に表示できますが、中のフォントサイズはまた指定されているので、計算するとあまり柔軟ではありません.この部分も明日勉強しなければなりません.😭
M 1チップcocoapodの導入でエラーが発生.明日はコードの少ないプロジェクトを書いてみます.オープンソースも登録したいです~🤦🏻
Reference
この問題について([TIL] 2021.03.25), 我々は、より多くの情報をここで見つけました https://velog.io/@sainkr/1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol