Commit 068676f9 by Daniel Dahan

development: updated willRenderView to willLayout

parent a969227d
......@@ -63,9 +63,10 @@ open class BarView: ContentView {
open override func layoutSubviews() {
super.layoutSubviews()
if willRenderView {
divider.reload()
guard willLayout else {
return
}
divider.reload()
}
/**
......
......@@ -31,27 +31,71 @@
import UIKit
open class ContentCard: PulseView {
/// Will render the view.
open var willLayout: Bool {
return 0 < width && 0 < height && nil != superview
}
/// A preset wrapper around contentInset.
open var contentEdgeInsetsPreset: EdgeInsetsPreset {
get {
return grid.contentEdgeInsetsPreset
}
set(value) {
grid.contentEdgeInsetsPreset = value
}
}
/// A wrapper around grid.contentInset.
@IBInspectable
open var contentEdgeInsets: EdgeInsets {
get {
return grid.contentEdgeInsets
}
set(value) {
grid.contentEdgeInsets = value
}
}
/// A preset wrapper around interimSpace.
open var interimSpacePreset = InterimSpacePreset.none {
didSet {
interimSpace = InterimSpacePresetToValue(preset: interimSpacePreset)
}
}
/// A wrapper around grid.interimSpace.
@IBInspectable
open var interimSpace: InterimSpace {
get {
return grid.interimSpace
}
set(value) {
grid.interimSpace = value
}
}
/// An internal reference to the titleToolbar.
internal var internalTitleToolbar: Toolbar?
/// An internal reference to the contentView.
internal var internalContentView: UIView?
/// An internal reference to the detailToolbar.
internal var internalDetailToolbar: Toolbar?
/// A reference to the titleToolbar.
open var titleToolbar: Toolbar {
prepareTitleToolbar()
return internalTitleToolbar!
}
/// An internal reference to the contentView.
internal var internalContentView: UIView?
/// A reference to the contentView.
open var contentView: UIView {
prepareContentView()
return internalContentView!
}
/// An internal reference to the detailToolbar.
internal var internalDetailToolbar: Toolbar?
/// A reference to the detailToolbar.
open var detailToolbar: Toolbar {
prepareDetailToolbar()
......@@ -70,15 +114,36 @@ open class ContentCard: PulseView {
pulseAnimation = .none
}
/// Reloads the
open func reload() {
open override func layoutSubviews() {
super.layoutSubviews()
guard willLayout else {
return
}
// clear constraints so new ones do not conflict
removeConstraints(constraints)
for v in subviews {
v.removeFromSuperview()
}
var h: CGFloat = 0
if let v = internalTitleToolbar {
v.layoutIfNeeded()
h += v.height
}
if let v = internalContentView {
v.layoutIfNeeded()
h += v.height
}
if let v = internalDetailToolbar {
v.layoutIfNeeded()
h += v.height
}
height = h
}
/// Prepares the titleToolbar.
......
......@@ -45,7 +45,7 @@ open class ContentView: View {
}
/// Will render the view.
open var willRenderView: Bool {
open var willLayout: Bool {
return 0 < width && 0 < height && nil != superview
}
......@@ -162,57 +162,59 @@ open class ContentView: View {
open override func layoutSubviews() {
super.layoutSubviews()
if willRenderView {
var lc = 0
var rc = 0
let l = (CGFloat(leftControls.count) * interimSpace)
let r = (CGFloat(rightControls.count) * interimSpace)
let p = width - l - r - contentEdgeInsets.left - contentEdgeInsets.right
let columns = Int(p / gridFactor)
grid.begin()
grid.views.removeAll()
grid.axis.columns = columns
for v in leftControls {
(v as? UIButton)?.contentEdgeInsets = .zero
v.sizeToFit()
v.grid.columns = Int(ceil(v.width / gridFactor)) + 1
lc += v.grid.columns
grid.views.append(v)
}
guard willLayout else {
return
}
var lc = 0
var rc = 0
let l = (CGFloat(leftControls.count) * interimSpace)
let r = (CGFloat(rightControls.count) * interimSpace)
let p = width - l - r - contentEdgeInsets.left - contentEdgeInsets.right
let columns = Int(p / gridFactor)
grid.begin()
grid.views.removeAll()
grid.axis.columns = columns
for v in leftControls {
(v as? UIButton)?.contentEdgeInsets = .zero
v.sizeToFit()
v.grid.columns = Int(ceil(v.width / gridFactor)) + 1
grid.views.append(contentView)
lc += v.grid.columns
for v in rightControls {
(v as? UIButton)?.contentEdgeInsets = .zero
v.sizeToFit()
v.grid.columns = Int(ceil(v.width / gridFactor)) + 1
rc += v.grid.columns
grid.views.append(v)
}
grid.views.append(v)
}
grid.views.append(contentView)
for v in rightControls {
(v as? UIButton)?.contentEdgeInsets = .zero
v.sizeToFit()
v.grid.columns = Int(ceil(v.width / gridFactor)) + 1
contentView.grid.begin()
rc += v.grid.columns
if .center == contentViewAlignment {
if lc < rc {
contentView.grid.columns = columns - 2 * rc
contentView.grid.offset.columns = rc - lc
} else {
contentView.grid.columns = columns - 2 * lc
rightControls.first?.grid.offset.columns = lc - rc
}
grid.views.append(v)
}
contentView.grid.begin()
if .center == contentViewAlignment {
if lc < rc {
contentView.grid.columns = columns - 2 * rc
contentView.grid.offset.columns = rc - lc
} else {
contentView.grid.columns = columns - lc - rc
contentView.grid.columns = columns - 2 * lc
rightControls.first?.grid.offset.columns = lc - rc
}
grid.commit()
contentView.grid.commit()
} else {
contentView.grid.columns = columns - lc - rc
}
grid.commit()
contentView.grid.commit()
}
/**
......
......@@ -270,7 +270,7 @@ open class Menu: View {
usingSpringWithDamping: usingSpringWithDamping,
initialSpringVelocity: initialSpringVelocity,
options: options,
animations: { [weak self, base = base, v = views[i]] in
animations: { [base = base, v = views[i]] in
v.alpha = 0
v.y = base.y
......@@ -366,11 +366,7 @@ open class Menu: View {
usingSpringWithDamping: usingSpringWithDamping,
initialSpringVelocity: initialSpringVelocity,
options: options,
animations: { [weak self, base = base, v = views[i]] in
guard let s = self else {
return
}
animations: { [base = base, v = views[i]] in
v.alpha = 0
v.y = base.y + h
......@@ -462,7 +458,7 @@ open class Menu: View {
usingSpringWithDamping: usingSpringWithDamping,
initialSpringVelocity: initialSpringVelocity,
options: options,
animations: { [weak self, v = views[i]] in
animations: { [v = views[i]] in
v.alpha = 0
v.x = base.x
......@@ -553,19 +549,14 @@ open class Menu: View {
let w = baseSize.width
for i in 1..<views.count {
UIView.animate(withDuration: Double(i) * duration,
delay: delay,
usingSpringWithDamping: usingSpringWithDamping,
initialSpringVelocity: initialSpringVelocity,
options: options,
animations: { [weak self, base = base, v = views[i]] in
guard let s = self else {
return
}
animations: { [base = base, v = views[i]] in
v.alpha = 0
v.x = s.x + w
v.x = base.x + w
animations?(v)
}) { [weak self, v = views[i]] _ in
......
......@@ -67,11 +67,7 @@ open class MenuController: RootController {
}
s.rootViewController.view.alpha = 0.25
})
menu.open { [weak self] (view) in
guard let s = self else {
return
}
menu.open { [completion = completion] (view) in
completion?(view)
}
}
......
......@@ -60,7 +60,7 @@ open class NavigationBar: UINavigationBar {
internal var animating = false
/// Will render the view.
open var willRenderView: Bool {
open var willLayout: Bool {
return 0 < width && 0 < height && nil != superview
}
......@@ -190,97 +190,99 @@ open class NavigationBar: UINavigationBar {
- Parameter item: A UINavigationItem to layout.
*/
internal func layoutNavigationItem(item: UINavigationItem) {
if willRenderView {
prepareItem(item: item)
prepareTitleView(item: item)
item.titleView!.frame.origin = .zero
item.titleView!.frame.size = intrinsicContentSize
guard willLayout else {
return
}
prepareItem(item: item)
prepareTitleView(item: item)
item.titleView!.frame.origin = .zero
item.titleView!.frame.size = intrinsicContentSize
var lc = 0
var rc = 0
let l = (CGFloat(item.leftControls.count) * interimSpace)
let r = (CGFloat(item.rightControls.count) * interimSpace)
let p = width - l - r - contentEdgeInsets.left - contentEdgeInsets.right
let columns = Int(p / gridFactor)
item.titleView!.grid.begin()
item.titleView!.grid.views.removeAll()
item.titleView!.grid.axis.columns = columns
var lc = 0
var rc = 0
let l = (CGFloat(item.leftControls.count) * interimSpace)
let r = (CGFloat(item.rightControls.count) * interimSpace)
let p = width - l - r - contentEdgeInsets.left - contentEdgeInsets.right
let columns = Int(p / gridFactor)
item.titleView!.grid.begin()
item.titleView!.grid.views.removeAll()
item.titleView!.grid.axis.columns = columns
for v in item.leftControls {
(v as? UIButton)?.contentEdgeInsets = .zero
v.sizeToFit()
v.grid.columns = Int(ceil(v.width / gridFactor)) + 1
for v in item.leftControls {
(v as? UIButton)?.contentEdgeInsets = .zero
v.sizeToFit()
v.grid.columns = Int(ceil(v.width / gridFactor)) + 1
lc += v.grid.columns
item.titleView!.grid.views.append(v)
}
lc += v.grid.columns
item.titleView!.grid.views.append(item.contentView)
item.titleView!.grid.views.append(v)
}
item.titleView!.grid.views.append(item.contentView)
for v in item.rightControls {
(v as? UIButton)?.contentEdgeInsets = .zero
v.sizeToFit()
v.grid.columns = Int(ceil(v.width / gridFactor)) + 1
for v in item.rightControls {
(v as? UIButton)?.contentEdgeInsets = .zero
v.sizeToFit()
v.grid.columns = Int(ceil(v.width / gridFactor)) + 1
rc += v.grid.columns
item.titleView!.grid.views.append(v)
}
rc += v.grid.columns
item.contentView.grid.begin()
if .center == item.contentViewAlignment {
if lc < rc {
item.contentView.grid.columns = columns - 2 * rc
item.contentView.grid.offset.columns = rc - lc
} else {
item.contentView.grid.columns = columns - 2 * lc
item.rightControls.first?.grid.offset.columns = lc - rc
}
item.titleView!.grid.views.append(v)
}
item.contentView.grid.begin()
if .center == item.contentViewAlignment {
if lc < rc {
item.contentView.grid.columns = columns - 2 * rc
item.contentView.grid.offset.columns = rc - lc
} else {
item.contentView.grid.columns = columns - lc - rc
item.contentView.grid.columns = columns - 2 * lc
item.rightControls.first?.grid.offset.columns = lc - rc
}
item.titleView!.grid.interimSpace = interimSpace
item.titleView!.grid.contentEdgeInsets = contentEdgeInsets
item.titleView!.grid.commit()
item.contentView.grid.commit()
// contentView alignment.
if nil != item.title && "" != item.title {
if nil == item.titleLabel.superview {
item.contentView.addSubview(item.titleLabel)
}
item.titleLabel.frame = item.contentView.bounds
} else {
item.titleLabel.removeFromSuperview()
} else {
item.contentView.grid.columns = columns - lc - rc
}
item.titleView!.grid.interimSpace = interimSpace
item.titleView!.grid.contentEdgeInsets = contentEdgeInsets
item.titleView!.grid.commit()
item.contentView.grid.commit()
// contentView alignment.
if nil != item.title && "" != item.title {
if nil == item.titleLabel.superview {
item.contentView.addSubview(item.titleLabel)
}
item.titleLabel.frame = item.contentView.bounds
} else {
item.titleLabel.removeFromSuperview()
}
if nil != item.detail && "" != item.detail {
if nil == item.detailLabel.superview {
item.contentView.addSubview(item.detailLabel)
}
if nil != item.detail && "" != item.detail {
if nil == item.detailLabel.superview {
item.contentView.addSubview(item.detailLabel)
}
if nil == item.titleLabel.superview {
item.detailLabel.frame = item.contentView.bounds
} else {
item.titleLabel.sizeToFit()
item.detailLabel.sizeToFit()
let diff = (item.contentView.height - item.titleLabel.height - item.detailLabel.height) / 2
item.titleLabel.height += diff
item.titleLabel.width = item.contentView.width
item.detailLabel.height += diff
item.detailLabel.width = item.contentView.width
item.detailLabel.y = item.titleLabel.height
}
if nil == item.titleLabel.superview {
item.detailLabel.frame = item.contentView.bounds
} else {
item.detailLabel.removeFromSuperview()
item.titleLabel.sizeToFit()
item.detailLabel.sizeToFit()
let diff = (item.contentView.height - item.titleLabel.height - item.detailLabel.height) / 2
item.titleLabel.height += diff
item.titleLabel.width = item.contentView.width
item.detailLabel.height += diff
item.detailLabel.width = item.contentView.width
item.detailLabel.y = item.titleLabel.height
}
} else {
item.detailLabel.removeFromSuperview()
}
}
......
......@@ -92,10 +92,12 @@ open class SearchBar: BarView {
open override func layoutSubviews() {
super.layoutSubviews()
if willRenderView {
textField.frame = contentView.bounds
layoutClearButton()
}
guard willLayout else {
return
}
textField.frame = contentView.bounds
layoutClearButton()
}
/**
......
......@@ -79,9 +79,11 @@ open class Snackbar: BarView {
open override func layoutSubviews() {
super.layoutSubviews()
if willRenderView {
textLabel.frame = contentView.bounds
guard willLayout else {
return
}
textLabel.frame = contentView.bounds
}
/**
......
......@@ -129,29 +129,31 @@ open class TabBar: BarView {
open override func layoutSubviews() {
super.layoutSubviews()
if willRenderView {
guard 0 < buttons.count else {
return
}
guard willLayout else {
return
}
guard 0 < buttons.count else {
return
}
let columns: Int = contentView.grid.axis.columns / buttons.count
for b in buttons {
b.grid.columns = columns
b.contentEdgeInsets = .zero
b.cornerRadius = 0
if isLineAnimated {
prepareLineAnimationHandler(button: b)
}
}
contentView.grid.reload()
if nil == selected {
selected = buttons.first
let columns: Int = contentView.grid.axis.columns / buttons.count
for b in buttons {
b.grid.columns = columns
b.contentEdgeInsets = .zero
b.cornerRadius = 0
if isLineAnimated {
prepareLineAnimationHandler(button: b)
}
line.frame = CGRect(x: selected!.x, y: .bottom == lineAlignment ? height - lineHeight : 0, width: selected!.width, height: lineHeight)
}
contentView.grid.reload()
if nil == selected {
selected = buttons.first
}
line.frame = CGRect(x: selected!.x, y: .bottom == lineAlignment ? height - lineHeight : 0, width: selected!.width, height: lineHeight)
}
/// Handles the button touch event.
......
......@@ -102,39 +102,41 @@ open class Toolbar: BarView {
open override func layoutSubviews() {
super.layoutSubviews()
if willRenderView {
if nil != title && "" != title {
if nil == titleLabel.superview {
contentView.addSubview(titleLabel)
}
titleLabel.frame = contentView.bounds
} else {
titleLabel.removeFromSuperview()
guard willLayout else {
return
}
if nil != title && "" != title {
if nil == titleLabel.superview {
contentView.addSubview(titleLabel)
}
titleLabel.frame = contentView.bounds
} else {
titleLabel.removeFromSuperview()
}
if nil != detail && "" != detail {
if nil == detailLabel.superview {
contentView.addSubview(detailLabel)
}
if nil != detail && "" != detail {
if nil == detailLabel.superview {
contentView.addSubview(detailLabel)
}
if nil == titleLabel.superview {
detailLabel.frame = contentView.bounds
} else {
titleLabel.sizeToFit()
detailLabel.sizeToFit()
let diff: CGFloat = (contentView.height - titleLabel.height - detailLabel.height) / 2
titleLabel.height += diff
titleLabel.width = contentView.width
detailLabel.height += diff
detailLabel.width = contentView.width
detailLabel.y = titleLabel.height
}
if nil == titleLabel.superview {
detailLabel.frame = contentView.bounds
} else {
detailLabel.removeFromSuperview()
titleLabel.sizeToFit()
detailLabel.sizeToFit()
let diff: CGFloat = (contentView.height - titleLabel.height - detailLabel.height) / 2
titleLabel.height += diff
titleLabel.width = contentView.width
detailLabel.height += diff
detailLabel.width = contentView.width
detailLabel.y = titleLabel.height
}
} else {
detailLabel.removeFromSuperview()
}
}
......
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