From 6fb992ed0bdd18e3457e117f2769245d221bf4e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=85=D0=B0=D0=B8=D0=BB=20=D0=9A=D0=B0=D0=BF?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=D0=BA=D0=BE?= Date: Mon, 22 May 2023 20:15:10 +0300 Subject: [PATCH] d --- .../UserInterfaceState.xcuserstate | Bin 27964 -> 28935 bytes iOS/src/Main.SectionGrid.swift | 17 +++++++++-------- iOS/src/Model.swift | 6 +++--- web/memory.html | 2 +- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/iOS/app/MMMemory.xcodeproj/project.xcworkspace/xcuserdata/mk.xcuserdatad/UserInterfaceState.xcuserstate b/iOS/app/MMMemory.xcodeproj/project.xcworkspace/xcuserdata/mk.xcuserdatad/UserInterfaceState.xcuserstate index f7b47a20a8bdbbcb5454d29ad776fd80d39bf09f..68ee7971b184c858d331423d386857e0a06d95a7 100644 GIT binary patch delta 11767 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 delta 11138 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 diff --git a/iOS/src/Main.SectionGrid.swift b/iOS/src/Main.SectionGrid.swift index 100dce0..5c89e1d 100644 --- a/iOS/src/Main.SectionGrid.swift +++ b/iOS/src/Main.SectionGrid.swift @@ -9,15 +9,16 @@ protocol MainSectionGrid { } extension Main { enum SectionGrid { static func setupCore(_ core: Main.Core) { - let side = 50 - let space = 20 - let gap = side + space - // Расставляем кнопки в сетке 4x4. - for btn in core.buttons { - let id = btn.tag - let row = Int(id / 4) - btn.frame = CGRect(x: gap + (id - row * 4) * gap, y: gap + row * gap, width: side, height: side) + for (id, p) in memoryItemPositions(M()).enumerated() { + let btn = core.buttons[id] + btn.frame = + CGRect( + x: p.0, + y: p.1, + width: memorySide(), + height: memorySide() + ) btn.backgroundColor = .blue } } diff --git a/iOS/src/Model.swift b/iOS/src/Model.swift index 0e25dc3..c7d8cd8 100644 --- a/iOS/src/Model.swift +++ b/iOS/src/Model.swift @@ -1,7 +1,7 @@ import Foundation -protocol MItemsCount { - var itemsCount: Int { get } +struct M { + var itemsCount: Int = 16 } func memorySide() -> CGFloat { @@ -16,7 +16,7 @@ func memoryGap() -> CGFloat { return memorySide() + memorySpace() } -func memoryItemPositions(M: MItemsCount) -> [(CGFloat, CGFloat)] { +func memoryItemPositions(_ M: M) -> [(CGFloat, CGFloat)] { var pos = [(CGFloat, CGFloat)]() for i in stride(from: 0, to: M.itemsCount, by: 1) { let row = floor(Double(i) / 4) diff --git a/web/memory.html b/web/memory.html index 0728309..572b352 100644 --- a/web/memory.html +++ b/web/memory.html @@ -19,7 +19,7 @@ } function memoryItemPositions(M) { - var pos = []; + var pos = [] for (var i = 0; i < M.itemsCount; i++) { let row = Math.floor(i / 4) let x = memoryGap() + (i - row * 4) * memoryGap()