Skip to content

Commit 435af6c

Browse files
committed
Add center anchor
1 parent 29f3a6b commit 435af6c

6 files changed

Lines changed: 60 additions & 0 deletions

File tree

Sources/InstrumentsUI/EdgesAnchor/AnchorsTrait.swift renamed to Sources/InstrumentsUI/Anchors/AnchorsTrait.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,21 @@ public protocol AnchorsTrait {
3333

3434
var trailingAnchor: NSLayoutXAxisAnchor { get }
3535

36+
var centerXAnchor: NSLayoutXAxisAnchor { get }
37+
38+
var centerYAnchor: NSLayoutYAxisAnchor { get }
39+
3640
var edgesAnchor: EdgesAnchor { get }
41+
42+
var centerAnchor: CenterAnchor { get }
3743
}
3844

3945
extension AnchorsTrait {
4046
public var edgesAnchor: EdgesAnchor {
4147
EdgesAnchor(anchorsTrait: self)
4248
}
49+
50+
public var centerAnchor: CenterAnchor {
51+
CenterAnchor(anchorsTrait: self)
52+
}
4353
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
//
2+
// CenterAnchor.swift
3+
//
4+
// Copyright © 2024 Aleksei Zaikin.
5+
//
6+
// Permission is hereby granted, free of charge, to any person obtaining a copy
7+
// of this software and associated documentation files (the "Software"), to deal
8+
// in the Software without restriction, including without limitation the rights
9+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
// copies of the Software, and to permit persons to whom the Software is
11+
// furnished to do so, subject to the following conditions:
12+
//
13+
// The above copyright notice and this permission notice shall be included in
14+
// all copies or substantial portions of the Software.
15+
//
16+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
19+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22+
// THE SOFTWARE.
23+
//
24+
25+
import UIKit
26+
27+
public struct CenterAnchor {
28+
private let anchorsTrait: AnchorsTrait
29+
30+
// MARK: - Init
31+
32+
init(anchorsTrait: AnchorsTrait) {
33+
self.anchorsTrait = anchorsTrait
34+
}
35+
36+
// MARK: - Constraints
37+
38+
public func constraints(equalTo anchor: CenterAnchor, offset: CGPoint = .zero) -> [NSLayoutConstraint] {
39+
var constraints: [NSLayoutConstraint] = []
40+
constraints.append(anchorsTrait.centerXAnchor.constraint(
41+
equalTo: anchor.anchorsTrait.centerXAnchor,
42+
constant: offset.x
43+
))
44+
constraints.append(anchorsTrait.centerYAnchor.constraint(
45+
equalTo: anchor.anchorsTrait.centerYAnchor,
46+
constant: offset.y
47+
))
48+
return constraints
49+
}
50+
}

Sources/InstrumentsUI/EdgesAnchor/EdgesAnchor.Edges.swift renamed to Sources/InstrumentsUI/Anchors/EdgesAnchor.Edges.swift

File renamed without changes.
File renamed without changes.

Sources/InstrumentsUI/EdgesAnchor/UILayoutGuide+AnchorsTrait.swift renamed to Sources/InstrumentsUI/Anchors/UILayoutGuide+AnchorsTrait.swift

File renamed without changes.

Sources/InstrumentsUI/EdgesAnchor/UIView+AnchorsTrait.swift renamed to Sources/InstrumentsUI/Anchors/UIView+AnchorsTrait.swift

File renamed without changes.

0 commit comments

Comments
 (0)