import SwiftUI
import UIKit
class MatrixViewController: UIViewController {
let matrix = [
["A5", "B5", "C5", "D5", "E5"],
["A4", "B4", "C4", "D4", "E4"],
["A3", "B3", "C3", "D3", "E3"],
["A2", "B2", "C2", "D2", "E2"],
["A1", "B1", "C1", "D1", "E1"],
]
let matrixLabelSize: CGFloat = 30.0
override func viewDidLoad() {
super.viewDidLoad()
setupMatrixView()
}
func setupMatrixView() {
let matrixView = UIView()
matrixView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(matrixView)
let matrixViewWidth = CGFloat(matrix[0].count) * matrixLabelSize
let matrixViewHeight = CGFloat(matrix.count) * matrixLabelSize
NSLayoutConstraint.activate([
matrixView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
matrixView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
matrixView.widthAnchor.constraint(equalToConstant: matrixViewWidth),
matrixView.heightAnchor.constraint(equalToConstant: matrixViewHeight)
])
var positionCounts: [String: Int] = [:]
//counting the number of occurences - - - - - - this part
for coordinate in coordinates {
let row = coordinate.row
let column = coordinate.column
// Update the count for the position
let key = "\(row)\(column)"
positionCounts[key, default: 0] += 1
}
for rowIndex in 0..<matrix.count {
for colIndex in 0..<matrix[rowIndex].count {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.textAlignment = .center
label.backgroundColor = .white
label.layer.borderColor = UIColor.black.cgColor
label.layer.borderWidth = 1.0
// Get the count from the dictionary based on the position
let key = "\(rowIndex + 1)\(colIndex + 1)"
let count = positionCounts[key, default: 0]
label.text = "\(count)"
matrixView.addSubview(label)
NSLayoutConstraint.activate([
label.leadingAnchor.constraint(equalTo: matrixView.leadingAnchor, constant: CGFloat(colIndex) * matrixLabelSize),
label.topAnchor.constraint(equalTo: matrixView.topAnchor, constant: CGFloat(rowIndex) * matrixLabelSize),
label.widthAnchor.constraint(equalToConstant: matrixLabelSize),
label.heightAnchor.constraint(equalToConstant: matrixLabelSize)
])
}
}
}
struct Coordinate {
let row: Int
let column: Int
let value: String
}
// Define the coordinate values - - - - - THESE COORDINATE VALUES. i want this values to come from the users input
@State var coordinates = [
Coordinate(row: 1, column: 1, value: "A"),
Coordinate(row: 1, column: 1, value: "B"),
Coordinate(row: 1, column: 4, value: "C"),
Coordinate(row: 2, column: 4, value: "D"),
Coordinate(row: 4, column: 4, value: "E"),
Coordinate(row: 3, column: 4, value: "A"),
Coordinate(row: 3, column: 3, value: "B"),
Coordinate(row: 4, column: 3, value: "C"),
Coordinate(row: 4, column: 4, value: "D"),
Coordinate(row: 4, column: 4, value: "E"),
Coordinate(row: 1, column: 4, value: "A"),
Coordinate(row: 2, column: 1, value: "B"),
Coordinate(row: 2, column: 2, value: "C"),
Coordinate(row: 1, column: 2, value: "D"),
Coordinate(row: 1, column: 3, value: "E"),
Coordinate(row: 5, column: 2, value: "A"),
Coordinate(row: 1, column: 5, value: "B"),
Coordinate(row: 1, column: 5, value: "C"),
Coordinate(row: 5, column: 3, value: "D"),
Coordinate(row: 1, column: 4, value: "E"),
Coordinate(row: 5, column: 2, value: "A"),
]
@available(iOS 13.0, *)
struct MatrixViewControllerPreview: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> UIViewController {
return MatrixViewController()
}
func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
}
}
@available(iOS 13.0, *)
struct MatrixViewController_Previews: PreviewProvider {
static var previews: some View {
MatrixViewControllerPreview().previewDevice("iPhone 12")
}
}
}