From 2181401dbb1e99256d1ab0264de7d1cd4d08a943 Mon Sep 17 00:00:00 2001 From: Anton Poltoratskyi Date: Mon, 13 Jul 2020 21:35:46 +0300 Subject: [PATCH] Fixed retain cycle between MacawView and MacawZoom --- Source/views/MacawView.swift | 6 +++--- Source/views/MacawZoom.swift | 15 +++++++++------ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/Source/views/MacawView.swift b/Source/views/MacawView.swift index aea5ee95..07a46057 100644 --- a/Source/views/MacawView.swift +++ b/Source/views/MacawView.swift @@ -15,7 +15,7 @@ open class MacawView: MView, MGestureRecognizerDelegate { internal var drawingView = DrawingView() - public let zoom = MacawZoom() + public lazy var zoom = MacawZoom(view: self) open var node: Node { get { return drawingView.node } @@ -77,7 +77,7 @@ open class MacawView: MView, MGestureRecognizerDelegate { self.node = node self.renderer = RenderUtils.createNodeRenderer(node, view: drawingView) - zoom.initialize(view: self, onChange: onZoomChange) + zoom.initialize(onChange: onZoomChange) initializeView() } @@ -91,7 +91,7 @@ open class MacawView: MView, MGestureRecognizerDelegate { public override init(frame: CGRect) { super.init(frame: frame) - zoom.initialize(view: self, onChange: onZoomChange) + zoom.initialize(onChange: onZoomChange) initializeView() } diff --git a/Source/views/MacawZoom.swift b/Source/views/MacawZoom.swift index 677cb6ba..a8f1ca76 100644 --- a/Source/views/MacawZoom.swift +++ b/Source/views/MacawZoom.swift @@ -16,14 +16,18 @@ import AppKit open class MacawZoom { - private var view: MacawView! - private var onChange: ((Transform) -> Void)! + private unowned let view: MacawView + private var onChange: ((Transform) -> Void)? private var touches = [TouchData]() private var zoomData = ZoomData() private var trackMove = false private var trackScale = false private var trackRotate = false + + init(view: MacawView) { + self.view = view + } open func enable(move: Bool = true, scale: Bool = true, rotate: Bool = false) { trackMove = move @@ -47,11 +51,10 @@ open class MacawZoom { let s = scale ?? zoomData.scale let a = angle ?? zoomData.angle zoomData = ZoomData(offset: o, scale: s, angle: a) - onChange(zoomData.transform()) + onChange?(zoomData.transform()) } - func initialize(view: MacawView, onChange: @escaping ((Transform) -> Void)) { - self.view = view + func initialize(onChange: @escaping (Transform) -> Void) { self.onChange = onChange } @@ -63,7 +66,7 @@ open class MacawZoom { func touchesMoved(_ touches: Set) { let zoom = cleanTouches() ?? getNewZoom() - onChange(zoom.transform()) + onChange?(zoom.transform()) } func touchesEnded(_ touches: Set) {