Commit 085dacdb by Daniel Dahan

editor: added memory updates

parents 81e6a5c8 f9213969
......@@ -102,10 +102,10 @@ open class Bar: View {
}
/// ContentView that holds the any desired subviews.
open private(set) lazy var contentView = View()
open fileprivate(set) lazy var contentView = UIView()
/// Left side UIViews.
open var leftViews = [UIView]() {
open var leftViews: [UIView] {
didSet {
for v in oldValue {
v.removeFromSuperview()
......@@ -115,7 +115,7 @@ open class Bar: View {
}
/// Right side UIViews.
open var rightViews = [UIView]() {
open var rightViews: [UIView] {
didSet {
for v in oldValue {
v.removeFromSuperview()
......@@ -130,9 +130,6 @@ open class Bar: View {
return contentView.grid.views
}
set(value) {
for v in contentView.grid.views {
v.removeFromSuperview()
}
contentView.grid.views = value
}
}
......@@ -142,6 +139,8 @@ open class Bar: View {
- Parameter aDecoder: A NSCoder instance.
*/
public required init?(coder aDecoder: NSCoder) {
leftViews = []
rightViews = []
super.init(coder: aDecoder)
}
......@@ -152,13 +151,14 @@ open class Bar: View {
- Parameter frame: A CGRect instance.
*/
public override init(frame: CGRect) {
leftViews = []
rightViews = []
super.init(frame: frame)
}
/// Basic initializer.
public init() {
super.init(frame: .zero)
frame.size = intrinsicContentSize
/// Convenience initializer.
public convenience init() {
self.init(frame: .zero)
}
/**
......@@ -167,12 +167,11 @@ open class Bar: View {
- Parameter rightViews: An Array of UIViews that go on the right side.
- Parameter centerViews: An Array of UIViews that go in the center.
*/
public init(leftViews: [UIView]? = nil, rightViews: [UIView]? = nil, centerViews: [UIView]? = nil) {
super.init(frame: .zero)
public convenience init(leftViews: [UIView]? = nil, rightViews: [UIView]? = nil, centerViews: [UIView]? = nil) {
self.init()
self.leftViews = leftViews ?? []
self.rightViews = rightViews ?? []
self.centerViews = centerViews ?? []
frame.size = intrinsicContentSize
}
open override func layoutSubviews() {
......@@ -275,11 +274,5 @@ open class Bar: View {
autoresizingMask = .flexibleWidth
interimSpacePreset = .interimSpace3
contentEdgeInsetsPreset = .square1
prepareContentView()
}
/// Prepares the contentView.
private func prepareContentView() {
contentView.backgroundColor = nil
}
}
......@@ -76,10 +76,6 @@ open class BottomTabBar: UITabBar {
open override func layoutSublayers(of layer: CALayer) {
super.layoutSublayers(of: layer)
guard self.layer == layer else {
return
}
layoutShape()
}
......
......@@ -165,10 +165,6 @@ open class Button: UIButton {
open override func layoutSublayers(of layer: CALayer) {
super.layoutSublayers(of: layer)
guard self.layer == layer else {
return
}
layoutShape()
layoutVisualLayer()
}
......
......@@ -219,10 +219,6 @@ open class CollectionReusableView: UICollectionReusableView {
open override func layoutSublayers(of layer: CALayer) {
super.layoutSublayers(of: layer)
guard self.layer == layer else {
return
}
layoutShape()
layoutVisualLayer()
}
......
......@@ -226,10 +226,6 @@ open class CollectionViewCell: UICollectionViewCell {
open override func layoutSublayers(of layer: CALayer) {
super.layoutSublayers(of: layer)
guard self.layer == layer else {
return
}
layoutShape()
layoutVisualLayer()
}
......
......@@ -269,7 +269,7 @@ private var GridKey: UInt8 = 0
/// Grid extension for UIView.
extension UIView {
/// Grid reference.
public private(set) var grid: Grid {
public fileprivate(set) var grid: Grid {
get {
return AssociatedObject(base: self, key: &GridKey) {
return Grid(context: self)
......
......@@ -134,10 +134,6 @@ open class NavigationBar: UINavigationBar {
open override func layoutSublayers(of layer: CALayer) {
super.layoutSublayers(of: layer)
guard self.layer == layer else {
return
}
layoutShape()
}
......
......@@ -80,9 +80,6 @@ public class NavigationItem: NSObject {
return contentView.grid.views
}
set(value) {
for v in contentView.grid.views {
v.removeFromSuperview()
}
contentView.grid.views = value
}
}
......
......@@ -152,16 +152,6 @@ open class SearchBar: Bar {
}
/**
A convenience initializer with parameter settings.
- Parameter leftViews: An Array of UIViews that go on the left side.
- Parameter rightViews: An Array of UIViews that go on the right side.
- Parameter centerViews: An Array of UIViews that go in the center.
*/
public override init(leftViews: [UIView]? = nil, rightViews: [UIView]? = nil, centerViews: [UIView]? = nil) {
super.init(leftViews: leftViews, rightViews: rightViews, centerViews: centerViews)
}
/**
Prepares the view instance when intialized. When subclassing,
it is recommended to override the prepare method
to initialize property values and other setup operations.
......
......@@ -50,7 +50,7 @@ extension UIViewController {
open class StatusBarController: RootController {
/// A reference to the statusBar.
open private(set) lazy var statusBar = View()
open private(set) lazy var statusBar: View = View()
open override var isStatusBarHidden: Bool {
didSet {
......
......@@ -103,10 +103,6 @@ open class TableViewCell: UITableViewCell {
open override func layoutSublayers(of layer: CALayer) {
super.layoutSublayers(of: layer)
guard self.layer == layer else {
return
}
layoutShape()
layoutVisualLayer()
}
......
......@@ -381,10 +381,6 @@ open class TextField: UITextField {
open override func layoutSublayers(of layer: CALayer) {
super.layoutSublayers(of: layer)
guard self.layer == layer else {
return
}
layoutShape()
}
......
......@@ -34,9 +34,10 @@ import UIKit
public protocol TextViewDelegate : UITextViewDelegate {}
@objc(TextView)
public class TextView: UITextView {
open class TextView: UITextView {
/// A property that accesses the backing layer's background
@IBInspectable public override var backgroundColor: UIColor? {
@IBInspectable
open override var backgroundColor: UIColor? {
didSet {
layer.backgroundColor = backgroundColor?.cgColor
}
......@@ -47,44 +48,49 @@ public class TextView: UITextView {
titleLabel text value is updated with the placeholderLabel
text value before being displayed.
*/
public var titleLabel: UILabel? {
@IBInspectable
open var titleLabel: UILabel? {
didSet {
prepareTitleLabel()
}
}
/// The color of the titleLabel text when the textView is not active.
@IBInspectable public var titleLabelColor: UIColor? {
@IBInspectable
open var titleLabelColor: UIColor? {
didSet {
titleLabel?.textColor = titleLabelColor
}
}
/// The color of the titleLabel text when the textView is active.
@IBInspectable public var titleLabelActiveColor: UIColor?
@IBInspectable
open var titleLabelActiveColor: UIColor?
/**
A property that sets the distance between the textView and
titleLabel.
*/
@IBInspectable public var titleLabelAnimationDistance: CGFloat = 8
@IBInspectable
open var titleLabelAnimationDistance: CGFloat = 8
/// Placeholder UILabel view.
public var placeholderLabel: UILabel? {
open var placeholderLabel: UILabel? {
didSet {
preparePlaceholderLabel()
}
}
/// An override to the text property.
@IBInspectable public override var text: String! {
@IBInspectable
open override var text: String! {
didSet {
handleTextViewTextDidChange()
}
}
/// An override to the attributedText property.
public override var attributedText: NSAttributedString! {
open override var attributedText: NSAttributedString! {
didSet {
handleTextViewTextDidChange()
}
......@@ -94,16 +100,16 @@ public class TextView: UITextView {
Text container UIEdgeInset preset property. This updates the
textContainerInset property with a preset value.
*/
public var textContainerEdgeInsetsPreset: EdgeInsetsPreset = .none {
open var textContainerEdgeInsetsPreset: EdgeInsetsPreset = .none {
didSet {
textContainerInset = EdgeInsetsPresetToValue(preset: textContainerEdgeInsetsPreset)
}
}
/// Text container UIEdgeInset property.
public override var textContainerInset: EdgeInsets {
open override var textContainerInset: EdgeInsets {
didSet {
reloadView()
reload()
}
}
......@@ -143,16 +149,12 @@ public class TextView: UITextView {
removeNotificationHandlers()
}
public override func layoutSublayers(of layer: CALayer) {
open override func layoutSublayers(of layer: CALayer) {
super.layoutSublayers(of: layer)
guard self.layer == layer else {
return
}
layoutShape()
}
public override func layoutSubviews() {
open override func layoutSubviews() {
super.layoutSubviews()
layoutShadowPath()
placeholderLabel?.preferredMaxLayoutWidth = textContainer.size.width - textContainer.lineFragmentPadding * 2
......@@ -160,7 +162,7 @@ public class TextView: UITextView {
}
/// Reloads necessary components when the view has changed.
internal func reloadView() {
open func reload() {
if let p = placeholderLabel {
removeConstraints(constraints)
layout(p).edges(
......@@ -173,13 +175,13 @@ public class TextView: UITextView {
/// Notification handler for when text editing began.
@objc
internal func handleTextViewTextDidBegin() {
fileprivate func handleTextViewTextDidBegin() {
titleLabel?.textColor = titleLabelActiveColor
}
/// Notification handler for when text changed.
@objc
internal func handleTextViewTextDidChange() {
fileprivate func handleTextViewTextDidChange() {
if let p = placeholderLabel {
p.isHidden = !(true == text?.isEmpty)
}
......@@ -198,7 +200,7 @@ public class TextView: UITextView {
/// Notification handler for when text editing ended.
@objc
internal func handleTextViewTextDidEnd() {
fileprivate func handleTextViewTextDidEnd() {
guard let t = text else {
hideTitleLabel()
return
......@@ -220,31 +222,31 @@ public class TextView: UITextView {
The super.prepare method should always be called immediately
when subclassing.
*/
public func prepare() {
open func prepare() {
contentScaleFactor = Device.scale
textContainerInset = .zero
backgroundColor = .white
clipsToBounds = false
removeNotificationHandlers()
prepareNotificationHandlers()
reloadView()
reload()
}
/// prepares the placeholderLabel property.
private func preparePlaceholderLabel() {
fileprivate func preparePlaceholderLabel() {
if let v: UILabel = placeholderLabel {
v.font = font
v.textAlignment = textAlignment
v.numberOfLines = 0
v.backgroundColor = .clear
addSubview(v)
reloadView()
reload()
handleTextViewTextDidChange()
}
}
/// Prepares the titleLabel property.
private func prepareTitleLabel() {
fileprivate func prepareTitleLabel() {
if let v: UILabel = titleLabel {
v.isHidden = true
addSubview(v)
......@@ -259,7 +261,7 @@ public class TextView: UITextView {
}
/// Shows and animates the titleLabel property.
private func showTitleLabel() {
fileprivate func showTitleLabel() {
if let v: UILabel = titleLabel {
if v.isHidden {
if let s: String = placeholderLabel?.text {
......@@ -279,7 +281,7 @@ public class TextView: UITextView {
}
/// Hides and animates the titleLabel property.
private func hideTitleLabel() {
fileprivate func hideTitleLabel() {
if let v: UILabel = titleLabel {
if !v.isHidden {
UIView.animate(withDuration: 0.25, animations: {
......@@ -293,7 +295,7 @@ public class TextView: UITextView {
}
/// Prepares the Notification handlers.
private func prepareNotificationHandlers() {
fileprivate func prepareNotificationHandlers() {
let defaultCenter = NotificationCenter.default
defaultCenter.addObserver(self, selector: #selector(handleTextViewTextDidBegin), name: NSNotification.Name.UITextViewTextDidBeginEditing, object: self)
defaultCenter.addObserver(self, selector: #selector(handleTextViewTextDidChange), name: NSNotification.Name.UITextViewTextDidChange, object: self)
......@@ -301,7 +303,7 @@ public class TextView: UITextView {
}
/// Removes the Notification handlers.
private func removeNotificationHandlers() {
fileprivate func removeNotificationHandlers() {
let defaultCenter = NotificationCenter.default
defaultCenter.removeObserver(self, name: NSNotification.Name.UITextViewTextDidBeginEditing, object: self)
defaultCenter.removeObserver(self, name: NSNotification.Name.UITextViewTextDidChange, object: self)
......
......@@ -83,16 +83,6 @@ open class Toolbar: Bar {
super.init(frame: frame)
}
/**
A convenience initializer with parameter settings.
- Parameter leftViews: An Array of UIViews that go on the left side.
- Parameter rightViews: An Array of UIViews that go on the right side.
- Parameter centerViews: An Array of UIViews that go in the center.
*/
public override init(leftViews: [UIView]? = nil, rightViews: [UIView]? = nil, centerViews: [UIView]? = nil) {
super.init(leftViews: leftViews, rightViews: rightViews, centerViews: centerViews)
}
open override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
guard "titleLabel.textAlignment" == keyPath else {
super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
......
......@@ -37,7 +37,7 @@ open class View: UIView {
allows the dropshadow effect on the backing layer, while clipping
the image to a desired shape within the visualLayer.
*/
open private(set) lazy var visualLayer = CAShapeLayer()
open fileprivate(set) lazy var visualLayer = CAShapeLayer()
/**
A property that manages an image for the visualLayer's contents
......@@ -46,9 +46,16 @@ open class View: UIView {
*/
@IBInspectable
open var image: UIImage? {
didSet {
visualLayer.contents = image?.cgImage
}
get {
guard let v = visualLayer.contents else {
return nil
}
return UIImage(cgImage: v as! CGImage)
}
set(value) {
visualLayer.contents = value?.cgImage
}
}
/**
......@@ -98,7 +105,7 @@ open class View: UIView {
/// A Preset for the contentsGravity property.
@IBInspectable
open var contentsGravityPreset: Gravity {
open var contentsGravityPreset = Gravity.resize {
didSet {
contentsGravity = GravityToValue(gravity: contentsGravityPreset)
}
......@@ -128,7 +135,6 @@ open class View: UIView {
- Parameter aDecoder: A NSCoder instance.
*/
public required init?(coder aDecoder: NSCoder) {
contentsGravityPreset = .resizeAspectFill
super.init(coder: aDecoder)
prepare()
}
......@@ -140,22 +146,18 @@ open class View: UIView {
- Parameter frame: A CGRect instance.
*/
public override init(frame: CGRect) {
contentsGravityPreset = .resizeAspectFill
super.init(frame: frame)
prepare()
}
/// A convenience initializer.
public convenience init() {
self.init(frame: .zero)
}
/// Convenience initializer.
public convenience init() {
self.init(frame: .zero)
prepare()
}
open override func layoutSublayers(of layer: CALayer) {
super.layoutSublayers(of: layer)
guard self.layer == layer else {
return
}
layoutShape()
layoutVisualLayer()
}
......@@ -177,17 +179,21 @@ open class View: UIView {
backgroundColor = .white
prepareVisualLayer()
}
/// Prepares the visualLayer property.
internal func prepareVisualLayer() {
visualLayer.zPosition = 0
visualLayer.masksToBounds = true
layer.addSublayer(visualLayer)
}
/// Manages the layout for the visualLayer property.
internal func layoutVisualLayer() {
visualLayer.frame = bounds
visualLayer.cornerRadius = cornerRadius
}
}
extension View {
/// Prepares the visualLayer property.
fileprivate func prepareVisualLayer() {
visualLayer.zPosition = 0
visualLayer.masksToBounds = true
layer.addSublayer(visualLayer)
}
}
extension View {
/// Manages the layout for the visualLayer property.
fileprivate func layoutVisualLayer() {
visualLayer.frame = bounds
visualLayer.cornerRadius = cornerRadius
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment