16
16
17
17
private let ε : CGFloat = 2.22045e-16
18
18
19
- extension AffineTransform : ReferenceConvertible , Hashable , CustomStringConvertible {
19
+ public struct AffineTransform : ReferenceConvertible , Hashable , CustomStringConvertible {
20
+ public var m11 , m12 , m21 , m22 , tX , tY : CGFloat
21
+
20
22
public typealias ReferenceType = NSAffineTransform
21
-
22
- private init ( reference: NSAffineTransform ) {
23
- self = reference. transformStruct
23
+
24
+ /**
25
+ Creates an affine transformation.
26
+ */
27
+ public init ( m11: CGFloat , m12: CGFloat , m21: CGFloat , m22: CGFloat , tX: CGFloat , tY: CGFloat ) {
28
+ self . m11 = m11
29
+ self . m12 = m12
30
+ self . m21 = m21
31
+ self . m22 = m22
32
+ self . tX = tX
33
+ self . tY = tY
34
+ }
35
+
36
+ fileprivate init ( reference: NSAffineTransform ) {
37
+ m11 = reference. transformStruct. m11
38
+ m12 = reference. transformStruct. m12
39
+ m21 = reference. transformStruct. m21
40
+ m22 = reference. transformStruct. m22
41
+ tX = reference. transformStruct. tX
42
+ tY = reference. transformStruct. tY
24
43
}
25
44
26
- private var reference : NSAffineTransform {
45
+ fileprivate var reference : NSAffineTransform {
27
46
let ref = NSAffineTransform ( )
28
- ref. transformStruct = self
47
+ ref. transformStruct = NSAffineTransformStruct ( m11 : m11 , m12 : m12 , m21 : m21 , m22 : m22 , tX : tX , tY : tY )
29
48
return ref
30
49
}
31
50
51
+ /**
52
+ Creates an affine transformation matrix with identity values.
53
+ - seealso: identity
54
+ */
55
+ public init ( ) {
56
+ self . init ( m11: CGFloat ( 1.0 ) , m12: CGFloat ( 0.0 ) ,
57
+ m21: CGFloat ( 0.0 ) , m22: CGFloat ( 1.0 ) ,
58
+ tX: CGFloat ( 0.0 ) , tY: CGFloat ( 0.0 ) )
59
+ }
60
+
32
61
/**
33
62
Creates an affine transformation matrix from translation values.
34
63
The matrix takes the following form:
@@ -270,9 +299,7 @@ extension AffineTransform : _ObjectiveCBridgeable {
270
299
271
300
@_semantics ( " convertToObjectiveC " )
272
301
public func _bridgeToObjectiveC( ) -> NSAffineTransform {
273
- let t = NSAffineTransform ( )
274
- t. transformStruct = self
275
- return t
302
+ return self . reference
276
303
}
277
304
278
305
public static func _forceBridgeFromObjectiveC( _ x: NSAffineTransform , result: inout AffineTransform ? ) {
@@ -282,7 +309,7 @@ extension AffineTransform : _ObjectiveCBridgeable {
282
309
}
283
310
284
311
public static func _conditionallyBridgeFromObjectiveC( _ x: NSAffineTransform , result: inout AffineTransform ? ) -> Bool {
285
- result = x . transformStruct
312
+ result = AffineTransform ( reference : x )
286
313
return true // Can't fail
287
314
}
288
315
0 commit comments