mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-08-28 16:42:20 +00:00
no message
This commit is contained in:
parent
1fbd4941dc
commit
2e501affef
@ -64,7 +64,6 @@
|
|||||||
D05CC3291B69750D00E235A3 /* InteractiveTransitionGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05CC3281B69750D00E235A3 /* InteractiveTransitionGestureRecognizer.swift */; };
|
D05CC3291B69750D00E235A3 /* InteractiveTransitionGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05CC3281B69750D00E235A3 /* InteractiveTransitionGestureRecognizer.swift */; };
|
||||||
D06EE8451B7140FF00837186 /* Font.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06EE8441B7140FF00837186 /* Font.swift */; };
|
D06EE8451B7140FF00837186 /* Font.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06EE8441B7140FF00837186 /* Font.swift */; };
|
||||||
D07921A91B6FC0C0005C23D9 /* KeyboardHostWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07921A81B6FC0C0005C23D9 /* KeyboardHostWindow.swift */; };
|
D07921A91B6FC0C0005C23D9 /* KeyboardHostWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07921A81B6FC0C0005C23D9 /* KeyboardHostWindow.swift */; };
|
||||||
D07921AC1B6FC92B005C23D9 /* StatusBarHostWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07921AB1B6FC92B005C23D9 /* StatusBarHostWindow.swift */; };
|
|
||||||
D081229D1D19AA1C005F7395 /* ContainerViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = D081229C1D19AA1C005F7395 /* ContainerViewLayout.swift */; };
|
D081229D1D19AA1C005F7395 /* ContainerViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = D081229C1D19AA1C005F7395 /* ContainerViewLayout.swift */; };
|
||||||
D08E903A1D24159200533158 /* ActionSheetItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08E90391D24159200533158 /* ActionSheetItem.swift */; };
|
D08E903A1D24159200533158 /* ActionSheetItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08E90391D24159200533158 /* ActionSheetItem.swift */; };
|
||||||
D08E903C1D2417E000533158 /* ActionSheetButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08E903B1D2417E000533158 /* ActionSheetButtonItem.swift */; };
|
D08E903C1D2417E000533158 /* ActionSheetButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08E903B1D2417E000533158 /* ActionSheetButtonItem.swift */; };
|
||||||
@ -172,7 +171,6 @@
|
|||||||
D05CC3281B69750D00E235A3 /* InteractiveTransitionGestureRecognizer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InteractiveTransitionGestureRecognizer.swift; sourceTree = "<group>"; };
|
D05CC3281B69750D00E235A3 /* InteractiveTransitionGestureRecognizer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InteractiveTransitionGestureRecognizer.swift; sourceTree = "<group>"; };
|
||||||
D06EE8441B7140FF00837186 /* Font.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Font.swift; sourceTree = "<group>"; };
|
D06EE8441B7140FF00837186 /* Font.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Font.swift; sourceTree = "<group>"; };
|
||||||
D07921A81B6FC0C0005C23D9 /* KeyboardHostWindow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardHostWindow.swift; sourceTree = "<group>"; };
|
D07921A81B6FC0C0005C23D9 /* KeyboardHostWindow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardHostWindow.swift; sourceTree = "<group>"; };
|
||||||
D07921AB1B6FC92B005C23D9 /* StatusBarHostWindow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StatusBarHostWindow.swift; sourceTree = "<group>"; };
|
|
||||||
D081229C1D19AA1C005F7395 /* ContainerViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContainerViewLayout.swift; sourceTree = "<group>"; };
|
D081229C1D19AA1C005F7395 /* ContainerViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContainerViewLayout.swift; sourceTree = "<group>"; };
|
||||||
D08E90391D24159200533158 /* ActionSheetItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionSheetItem.swift; sourceTree = "<group>"; };
|
D08E90391D24159200533158 /* ActionSheetItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionSheetItem.swift; sourceTree = "<group>"; };
|
||||||
D08E903B1D2417E000533158 /* ActionSheetButtonItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionSheetButtonItem.swift; sourceTree = "<group>"; };
|
D08E903B1D2417E000533158 /* ActionSheetButtonItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionSheetButtonItem.swift; sourceTree = "<group>"; };
|
||||||
@ -435,7 +433,6 @@
|
|||||||
D07921AA1B6FC911005C23D9 /* Status Bar */ = {
|
D07921AA1B6FC911005C23D9 /* Status Bar */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
D07921AB1B6FC92B005C23D9 /* StatusBarHostWindow.swift */,
|
|
||||||
D0078A671C92B21400DF6D92 /* StatusBar.swift */,
|
D0078A671C92B21400DF6D92 /* StatusBar.swift */,
|
||||||
D0B3671F1C94A53A00346D2E /* StatusBarProxyNode.swift */,
|
D0B3671F1C94A53A00346D2E /* StatusBarProxyNode.swift */,
|
||||||
D03E7DFE1C96F7B400C07816 /* StatusBarManager.swift */,
|
D03E7DFE1C96F7B400C07816 /* StatusBarManager.swift */,
|
||||||
@ -636,7 +633,6 @@
|
|||||||
files = (
|
files = (
|
||||||
D08E903C1D2417E000533158 /* ActionSheetButtonItem.swift in Sources */,
|
D08E903C1D2417E000533158 /* ActionSheetButtonItem.swift in Sources */,
|
||||||
D0E49C881B83A3580099E553 /* ImageCache.swift in Sources */,
|
D0E49C881B83A3580099E553 /* ImageCache.swift in Sources */,
|
||||||
D07921AC1B6FC92B005C23D9 /* StatusBarHostWindow.swift in Sources */,
|
|
||||||
D0078A681C92B21400DF6D92 /* StatusBar.swift in Sources */,
|
D0078A681C92B21400DF6D92 /* StatusBar.swift in Sources */,
|
||||||
D05CC2F81B6955D000E235A3 /* UIViewController+Navigation.m in Sources */,
|
D05CC2F81B6955D000E235A3 /* UIViewController+Navigation.m in Sources */,
|
||||||
D02BDB021B6AC703008AFAD2 /* RuntimeUtils.swift in Sources */,
|
D02BDB021B6AC703008AFAD2 /* RuntimeUtils.swift in Sources */,
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
<key>DisplayTests.xcscheme</key>
|
<key>DisplayTests.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>18</integer>
|
<integer>19</integer>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>SuppressBuildableAutocreation</key>
|
<key>SuppressBuildableAutocreation</key>
|
||||||
|
@ -26,7 +26,7 @@ class ASTransformLayer: CATransformLayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class ASTransformView: UIView {
|
class ASTransformView: UIView {
|
||||||
override class func layerClass() -> AnyClass {
|
override class var layerClass: AnyClass {
|
||||||
return ASTransformLayer.self
|
return ASTransformLayer.self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,8 @@ public class ActionSheetButtonItem: ActionSheetItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public func node() -> ActionSheetItemNode {
|
public func node() -> ActionSheetItemNode {
|
||||||
return ActionSheetButtonNode(title: AttributedString(string: title, font: ActionSheetButtonNode.defaultFont, textColor: self.color == .accent ? UIColor(0x1195f2) : UIColor.red()), action: self.action)
|
let textColorIsAccent = self.color == ActionSheetButtonColor.accent
|
||||||
|
let textColor = textColorIsAccent ? UIColor(0x1195f2) : UIColor.red
|
||||||
|
return ActionSheetButtonNode(title: NSAttributedString(string: title, font: ActionSheetButtonNode.defaultFont, textColor: textColor), action: self.action)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ public class ActionSheetButtonNode: ActionSheetItemNode {
|
|||||||
private let label: UILabel
|
private let label: UILabel
|
||||||
private var calculatedLabelSize: CGSize?
|
private var calculatedLabelSize: CGSize?
|
||||||
|
|
||||||
public init(title: AttributedString, action: () -> Void) {
|
public init(title: NSAttributedString, action: () -> Void) {
|
||||||
self.action = action
|
self.action = action
|
||||||
|
|
||||||
self.button = HighlightTrackingButton()
|
self.button = HighlightTrackingButton()
|
||||||
|
@ -37,7 +37,7 @@ public class ActionSheetController: ViewController {
|
|||||||
|
|
||||||
public func setItemGroups(_ groups: [ActionSheetItemGroup]) {
|
public func setItemGroups(_ groups: [ActionSheetItemGroup]) {
|
||||||
self.groups = groups
|
self.groups = groups
|
||||||
if self.isViewLoaded() {
|
if self.isViewLoaded {
|
||||||
self.actionSheetNode.setGroups(groups)
|
self.actionSheetNode.setGroups(groups)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -66,13 +66,13 @@ final class ActionSheetItemGroupNode: ASDisplayNode, UIScrollViewDelegate {
|
|||||||
|
|
||||||
func updateItemNodes(_ nodes: [ActionSheetItemNode], leadingVisibleNodeCount: CGFloat = 1000.0) {
|
func updateItemNodes(_ nodes: [ActionSheetItemNode], leadingVisibleNodeCount: CGFloat = 1000.0) {
|
||||||
for node in self.itemNodes {
|
for node in self.itemNodes {
|
||||||
if !nodes.contains({ $0 === node }) {
|
if !nodes.contains(where: { $0 === node }) {
|
||||||
node.removeFromSupernode()
|
node.removeFromSupernode()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for node in nodes {
|
for node in nodes {
|
||||||
if !self.itemNodes.contains({ $0 === node }) {
|
if !self.itemNodes.contains(where: { $0 === node }) {
|
||||||
self.scrollView.addSubnode(node)
|
self.scrollView.addSubnode(node)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ internal class BarButtonItemWrapper {
|
|||||||
self.parentNode.addSubnode(self.buttonNode)
|
self.parentNode.addSubnode(self.buttonNode)
|
||||||
|
|
||||||
self.setEnabledListenerKey = barButtonItem.addSetEnabledListener({ [weak self] enabled in
|
self.setEnabledListenerKey = barButtonItem.addSetEnabledListener({ [weak self] enabled in
|
||||||
self?.buttonNode.isEnabled = enabled.boolValue
|
self?.buttonNode.isEnabled = enabled
|
||||||
return
|
return
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -11,8 +11,8 @@ public struct Font {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public extension AttributedString {
|
public extension NSAttributedString {
|
||||||
convenience init(string: String, font: UIFont, textColor: UIColor = UIColor.black()) {
|
convenience init(string: String, font: UIFont, textColor: UIColor = UIColor.black) {
|
||||||
self.init(string: string, attributes: [NSFontAttributeName: font, NSForegroundColorAttributeName as String: textColor])
|
self.init(string: string, attributes: [NSFontAttributeName: font, NSForegroundColorAttributeName as String: textColor])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@ import Foundation
|
|||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
let deviceColorSpace = CGColorSpaceCreateDeviceRGB()
|
let deviceColorSpace = CGColorSpaceCreateDeviceRGB()
|
||||||
let deviceScale = UIScreen.main().scale
|
let deviceScale = UIScreen.main.scale
|
||||||
|
|
||||||
public func generateImage(_ size: CGSize, pixelGenerator: (CGSize, UnsafeMutablePointer<Int8>) -> Void) -> UIImage? {
|
public func generateImage(_ size: CGSize, pixelGenerator: (CGSize, UnsafeMutablePointer<Int8>) -> Void) -> UIImage? {
|
||||||
let scale = deviceScale
|
let scale = deviceScale
|
||||||
@ -50,7 +50,7 @@ public func generateImage(_ size: CGSize, contextGenerator: (CGSize, CGContext)
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
context.scale(x: scale, y: scale)
|
context.scaleBy(x: scale, y: scale)
|
||||||
|
|
||||||
contextGenerator(size, context)
|
contextGenerator(size, context)
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ public func generateFilledCircleImage(radius: CGFloat, color: UIColor?, backgrou
|
|||||||
if let color = color {
|
if let color = color {
|
||||||
context.setFillColor(color.cgColor)
|
context.setFillColor(color.cgColor)
|
||||||
} else {
|
} else {
|
||||||
context.setFillColor(UIColor.clear().cgColor)
|
context.setFillColor(UIColor.clear.cgColor)
|
||||||
context.setBlendMode(.copy)
|
context.setBlendMode(.copy)
|
||||||
}
|
}
|
||||||
context.fillEllipse(in: CGRect(origin: CGPoint(), size: size))
|
context.fillEllipse(in: CGRect(origin: CGPoint(), size: size))
|
||||||
@ -110,28 +110,28 @@ public class DrawingContext {
|
|||||||
public func withContext(_ f: @noescape(CGContext) -> ()) {
|
public func withContext(_ f: @noescape(CGContext) -> ()) {
|
||||||
if self._context == nil {
|
if self._context == nil {
|
||||||
if let c = CGContext(data: bytes, width: Int(scaledSize.width), height: Int(scaledSize.height), bitsPerComponent: 8, bytesPerRow: bytesPerRow, space: deviceColorSpace, bitmapInfo: self.bitmapInfo.rawValue) {
|
if let c = CGContext(data: bytes, width: Int(scaledSize.width), height: Int(scaledSize.height), bitsPerComponent: 8, bytesPerRow: bytesPerRow, space: deviceColorSpace, bitmapInfo: self.bitmapInfo.rawValue) {
|
||||||
c.scale(x: scale, y: scale)
|
c.scaleBy(x: scale, y: scale)
|
||||||
self._context = c
|
self._context = c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let _context = self._context {
|
if let _context = self._context {
|
||||||
_context.translate(x: self.size.width / 2.0, y: self.size.height / 2.0)
|
_context.translateBy(x: self.size.width / 2.0, y: self.size.height / 2.0)
|
||||||
_context.scale(x: 1.0, y: -1.0)
|
_context.scaleBy(x: 1.0, y: -1.0)
|
||||||
_context.translate(x: -self.size.width / 2.0, y: -self.size.height / 2.0)
|
_context.translateBy(x: -self.size.width / 2.0, y: -self.size.height / 2.0)
|
||||||
|
|
||||||
f(_context)
|
f(_context)
|
||||||
|
|
||||||
_context.translate(x: self.size.width / 2.0, y: self.size.height / 2.0)
|
_context.translateBy(x: self.size.width / 2.0, y: self.size.height / 2.0)
|
||||||
_context.scale(x: 1.0, y: -1.0)
|
_context.scaleBy(x: 1.0, y: -1.0)
|
||||||
_context.translate(x: -self.size.width / 2.0, y: -self.size.height / 2.0)
|
_context.translateBy(x: -self.size.width / 2.0, y: -self.size.height / 2.0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public func withFlippedContext(_ f: @noescape(CGContext) -> ()) {
|
public func withFlippedContext(_ f: @noescape(CGContext) -> ()) {
|
||||||
if self._context == nil {
|
if self._context == nil {
|
||||||
if let c = CGContext(data: bytes, width: Int(scaledSize.width), height: Int(scaledSize.height), bitsPerComponent: 8, bytesPerRow: bytesPerRow, space: deviceColorSpace, bitmapInfo: self.bitmapInfo.rawValue) {
|
if let c = CGContext(data: bytes, width: Int(scaledSize.width), height: Int(scaledSize.height), bitsPerComponent: 8, bytesPerRow: bytesPerRow, space: deviceColorSpace, bitmapInfo: self.bitmapInfo.rawValue) {
|
||||||
c.scale(x: scale, y: scale)
|
c.scaleBy(x: scale, y: scale)
|
||||||
self._context = c
|
self._context = c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -177,7 +177,7 @@ public class DrawingContext {
|
|||||||
let colorValue = pixel.pointee
|
let colorValue = pixel.pointee
|
||||||
return UIColor(UInt32(colorValue))
|
return UIColor(UInt32(colorValue))
|
||||||
} else {
|
} else {
|
||||||
return UIColor.clear()
|
return UIColor.clear
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -231,7 +231,7 @@ public class DrawingContext {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum ParsingError: ErrorProtocol {
|
public enum ParsingError: Error {
|
||||||
case Generic
|
case Generic
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -323,7 +323,7 @@ private struct ListViewState {
|
|||||||
var maxY: CGFloat = 0.0
|
var maxY: CGFloat = 0.0
|
||||||
for i in 0 ..< self.nodes.count {
|
for i in 0 ..< self.nodes.count {
|
||||||
var frame = self.nodes[i].frame
|
var frame = self.nodes[i].frame
|
||||||
frame.offsetInPlace(dx: 0.0, dy: offset)
|
frame = frame.offsetBy(dx: 0.0, dy: offset)
|
||||||
self.nodes[i].frame = frame
|
self.nodes[i].frame = frame
|
||||||
|
|
||||||
minY = min(minY, frame.minY)
|
minY = min(minY, frame.minY)
|
||||||
@ -338,7 +338,7 @@ private struct ListViewState {
|
|||||||
if abs(additionalOffset) > CGFloat(FLT_EPSILON) {
|
if abs(additionalOffset) > CGFloat(FLT_EPSILON) {
|
||||||
for i in 0 ..< self.nodes.count {
|
for i in 0 ..< self.nodes.count {
|
||||||
var frame = self.nodes[i].frame
|
var frame = self.nodes[i].frame
|
||||||
frame.offsetInPlace(dx: 0.0, dy: additionalOffset)
|
frame = frame.offsetBy(dx: 0.0, dy: additionalOffset)
|
||||||
self.nodes[i].frame = frame
|
self.nodes[i].frame = frame
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -356,7 +356,7 @@ private struct ListViewState {
|
|||||||
if abs(offset) > CGFloat(FLT_EPSILON) {
|
if abs(offset) > CGFloat(FLT_EPSILON) {
|
||||||
for i in 0 ..< self.nodes.count {
|
for i in 0 ..< self.nodes.count {
|
||||||
var frame = self.nodes[i].frame
|
var frame = self.nodes[i].frame
|
||||||
frame.offsetInPlace(dx: 0.0, dy: offset)
|
frame = frame.offsetBy(dx: 0.0, dy: offset)
|
||||||
self.nodes[i].frame = frame
|
self.nodes[i].frame = frame
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -882,7 +882,7 @@ private final class ListViewBackingLayer: CALayer {
|
|||||||
private final class ListViewBackingView: UIView {
|
private final class ListViewBackingView: UIView {
|
||||||
weak var target: ASDisplayNode?
|
weak var target: ASDisplayNode?
|
||||||
|
|
||||||
override class func layerClass() -> AnyClass {
|
override class var layerClass: AnyClass {
|
||||||
return ListViewBackingLayer.self
|
return ListViewBackingLayer.self
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1464,12 +1464,12 @@ public final class ListView: ASDisplayNode, UIScrollViewDelegate {
|
|||||||
}
|
}
|
||||||
state.fixScrollPostition(self.items.count)
|
state.fixScrollPostition(self.items.count)
|
||||||
|
|
||||||
let sortedDeleteIndices = deleteIndices.sorted(isOrderedBefore: {$0.index < $1.index})
|
let sortedDeleteIndices = deleteIndices.sorted(by: {$0.index < $1.index})
|
||||||
for deleteItem in sortedDeleteIndices.reversed() {
|
for deleteItem in sortedDeleteIndices.reversed() {
|
||||||
self.items.remove(at: deleteItem.index)
|
self.items.remove(at: deleteItem.index)
|
||||||
}
|
}
|
||||||
|
|
||||||
let sortedIndicesAndItems = insertIndicesAndItems.sorted(isOrderedBefore: { $0.index < $1.index })
|
let sortedIndicesAndItems = insertIndicesAndItems.sorted(by: { $0.index < $1.index })
|
||||||
if self.items.count == 0 {
|
if self.items.count == 0 {
|
||||||
if sortedIndicesAndItems[0].index != 0 {
|
if sortedIndicesAndItems[0].index != 0 {
|
||||||
fatalError("deleteAndInsertItems: invalid insert into empty list")
|
fatalError("deleteAndInsertItems: invalid insert into empty list")
|
||||||
|
@ -27,7 +27,7 @@ struct ListViewItemSpring {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private class ListViewItemView: UIView {
|
private class ListViewItemView: UIView {
|
||||||
override class func layerClass() -> AnyClass {
|
override class var layerClass: AnyClass {
|
||||||
return ASTransformLayer.self
|
return ASTransformLayer.self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@ public class NavigationBackButtonNode: ASControlNode {
|
|||||||
private func attributesForCurrentState() -> [String : AnyObject] {
|
private func attributesForCurrentState() -> [String : AnyObject] {
|
||||||
return [
|
return [
|
||||||
NSFontAttributeName: self.fontForCurrentState(),
|
NSFontAttributeName: self.fontForCurrentState(),
|
||||||
NSForegroundColorAttributeName: self.isEnabled ? self.color : UIColor.gray()
|
NSForegroundColorAttributeName: self.isEnabled ? self.color : UIColor.gray
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -25,14 +25,14 @@ public class NavigationBackButtonNode: ASControlNode {
|
|||||||
}
|
}
|
||||||
set(value) {
|
set(value) {
|
||||||
self._text = value
|
self._text = value
|
||||||
self.label.attributedString = AttributedString(string: text, attributes: self.attributesForCurrentState())
|
self.label.attributedString = NSAttributedString(string: text, attributes: self.attributesForCurrentState())
|
||||||
self.invalidateCalculatedLayout()
|
self.invalidateCalculatedLayout()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var color: UIColor = UIColor(0x1195f2) {
|
var color: UIColor = UIColor(0x1195f2) {
|
||||||
didSet {
|
didSet {
|
||||||
self.label.attributedString = AttributedString(string: self._text, attributes: self.attributesForCurrentState())
|
self.label.attributedString = NSAttributedString(string: self._text, attributes: self.attributesForCurrentState())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,10 +32,10 @@ private func backArrowImage(color: UIColor) -> UIImage? {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public class NavigationBar: ASDisplayNode {
|
public class NavigationBar: ASDisplayNode {
|
||||||
public var foregroundColor: UIColor = UIColor.black() {
|
public var foregroundColor: UIColor = UIColor.black {
|
||||||
didSet {
|
didSet {
|
||||||
if let title = self.title {
|
if let title = self.title {
|
||||||
self.titleNode.attributedText = AttributedString(string: title, font: Font.medium(17.0), textColor: self.foregroundColor)
|
self.titleNode.attributedText = NSAttributedString(string: title, font: Font.medium(17.0), textColor: self.foregroundColor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -66,6 +66,7 @@ public class NavigationBar: ASDisplayNode {
|
|||||||
private let clippingNode: ASDisplayNode
|
private let clippingNode: ASDisplayNode
|
||||||
|
|
||||||
private var itemTitleListenerKey: Int?
|
private var itemTitleListenerKey: Int?
|
||||||
|
private var itemTitleViewListenerKey: Int?
|
||||||
private var itemLeftButtonListenerKey: Int?
|
private var itemLeftButtonListenerKey: Int?
|
||||||
private var _item: UINavigationItem?
|
private var _item: UINavigationItem?
|
||||||
var item: UINavigationItem? {
|
var item: UINavigationItem? {
|
||||||
@ -94,6 +95,13 @@ public class NavigationBar: ASDisplayNode {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.titleView = item.titleView
|
||||||
|
self.itemTitleViewListenerKey = item.addSetTitleViewListener { [weak self] titleView in
|
||||||
|
if let strongSelf = self {
|
||||||
|
strongSelf.titleView = titleView
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.itemLeftButtonListenerKey = item.addSetLeftBarButtonItemListener { [weak self] _, _ in
|
self.itemLeftButtonListenerKey = item.addSetLeftBarButtonItemListener { [weak self] _, _ in
|
||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
strongSelf.updateLeftButton()
|
strongSelf.updateLeftButton()
|
||||||
@ -111,7 +119,7 @@ public class NavigationBar: ASDisplayNode {
|
|||||||
private var title: String? {
|
private var title: String? {
|
||||||
didSet {
|
didSet {
|
||||||
if let title = self.title {
|
if let title = self.title {
|
||||||
self.titleNode.attributedText = AttributedString(string: title, font: Font.medium(17.0), textColor: self.foregroundColor)
|
self.titleNode.attributedText = NSAttributedString(string: title, font: Font.medium(17.0), textColor: self.foregroundColor)
|
||||||
if self.titleNode.supernode == nil {
|
if self.titleNode.supernode == nil {
|
||||||
self.clippingNode.addSubnode(self.titleNode)
|
self.clippingNode.addSubnode(self.titleNode)
|
||||||
}
|
}
|
||||||
@ -123,6 +131,22 @@ public class NavigationBar: ASDisplayNode {
|
|||||||
self.setNeedsLayout()
|
self.setNeedsLayout()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private var titleView: UIView? {
|
||||||
|
didSet {
|
||||||
|
if let oldValue = oldValue {
|
||||||
|
oldValue.removeFromSuperview()
|
||||||
|
}
|
||||||
|
|
||||||
|
if let titleView = self.titleView {
|
||||||
|
self.clippingNode.view.addSubview(titleView)
|
||||||
|
}
|
||||||
|
|
||||||
|
self.invalidateCalculatedLayout()
|
||||||
|
self.setNeedsLayout()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private let titleNode: ASTextNode
|
private let titleNode: ASTextNode
|
||||||
|
|
||||||
var previousItemListenerKey: Int?
|
var previousItemListenerKey: Int?
|
||||||
@ -414,13 +438,18 @@ public class NavigationBar: ASDisplayNode {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let titleView = self.titleView {
|
||||||
|
let titleViewSize = CGSize(width: max(1.0, size.width - leftTitleInset - leftTitleInset), height: nominalHeight)
|
||||||
|
titleView.frame = CGRect(origin: CGPoint(x: leftTitleInset, y: contentVerticalOrigin), size: titleViewSize)
|
||||||
|
}
|
||||||
|
|
||||||
//self.effectView.frame = self.bounds
|
//self.effectView.frame = self.bounds
|
||||||
}
|
}
|
||||||
|
|
||||||
public func makeTransitionTitleNode(foregroundColor: UIColor) -> ASDisplayNode? {
|
public func makeTransitionTitleNode(foregroundColor: UIColor) -> ASDisplayNode? {
|
||||||
if let title = self.title {
|
if let title = self.title {
|
||||||
let node = ASTextNode()
|
let node = ASTextNode()
|
||||||
node.attributedText = AttributedString(string: title, font: Font.medium(17.0), textColor: foregroundColor)
|
node.attributedText = NSAttributedString(string: title, font: Font.medium(17.0), textColor: foregroundColor)
|
||||||
return node
|
return node
|
||||||
} else {
|
} else {
|
||||||
return nil
|
return nil
|
||||||
|
@ -9,7 +9,7 @@ public class NavigationButtonNode: ASTextNode {
|
|||||||
private func attributesForCurrentState() -> [String : AnyObject] {
|
private func attributesForCurrentState() -> [String : AnyObject] {
|
||||||
return [
|
return [
|
||||||
NSFontAttributeName: self.fontForCurrentState(),
|
NSFontAttributeName: self.fontForCurrentState(),
|
||||||
NSForegroundColorAttributeName: self.isEnabled ? self.color : UIColor.gray()
|
NSForegroundColorAttributeName: self.isEnabled ? self.color : UIColor.gray
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -21,14 +21,14 @@ public class NavigationButtonNode: ASTextNode {
|
|||||||
set(value) {
|
set(value) {
|
||||||
_text = value
|
_text = value
|
||||||
|
|
||||||
self.attributedString = AttributedString(string: text, attributes: self.attributesForCurrentState())
|
self.attributedString = NSAttributedString(string: text, attributes: self.attributesForCurrentState())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public var color: UIColor = UIColor(0x1195f2) {
|
public var color: UIColor = UIColor(0x1195f2) {
|
||||||
didSet {
|
didSet {
|
||||||
if let text = self._text {
|
if let text = self._text {
|
||||||
self.attributedString = AttributedString(string: text, attributes: self.attributesForCurrentState())
|
self.attributedString = NSAttributedString(string: text, attributes: self.attributesForCurrentState())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -42,7 +42,7 @@ public class NavigationButtonNode: ASTextNode {
|
|||||||
if _bold != value {
|
if _bold != value {
|
||||||
_bold = value
|
_bold = value
|
||||||
|
|
||||||
self.attributedString = AttributedString(string: text, attributes: self.attributesForCurrentState())
|
self.attributedString = NSAttributedString(string: text, attributes: self.attributesForCurrentState())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -129,7 +129,7 @@ public class NavigationButtonNode: ASTextNode {
|
|||||||
if self.isEnabled != value {
|
if self.isEnabled != value {
|
||||||
super.isEnabled = value
|
super.isEnabled = value
|
||||||
|
|
||||||
self.attributedString = AttributedString(string: text, attributes: self.attributesForCurrentState())
|
self.attributedString = NSAttributedString(string: text, attributes: self.attributesForCurrentState())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ import AsyncDisplayKit
|
|||||||
import SwiftSignalKit
|
import SwiftSignalKit
|
||||||
|
|
||||||
private class NavigationControllerView: UIView {
|
private class NavigationControllerView: UIView {
|
||||||
override class func layerClass() -> AnyClass {
|
override class var layerClass: AnyClass {
|
||||||
return CATracingLayer.self
|
return CATracingLayer.self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -60,7 +60,7 @@ public class NavigationController: NavigationControllerProxy, ContainableControl
|
|||||||
}
|
}
|
||||||
|
|
||||||
public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
|
public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
|
||||||
if !self.isViewLoaded() {
|
if !self.isViewLoaded {
|
||||||
self.loadView()
|
self.loadView()
|
||||||
}
|
}
|
||||||
self.containerLayout = layout
|
self.containerLayout = layout
|
||||||
@ -253,7 +253,7 @@ public class NavigationController: NavigationControllerProxy, ContainableControl
|
|||||||
}
|
}
|
||||||
|
|
||||||
if animated && self.viewControllers.count != 0 && viewControllers.count != 0 && self.viewControllers.last! !== viewControllers.last! {
|
if animated && self.viewControllers.count != 0 && viewControllers.count != 0 && self.viewControllers.last! !== viewControllers.last! {
|
||||||
if self.viewControllers.contains({ $0 === viewControllers.last }) {
|
if self.viewControllers.contains(where: { $0 === viewControllers.last }) {
|
||||||
let bottomController = viewControllers.last! as UIViewController
|
let bottomController = viewControllers.last! as UIViewController
|
||||||
let topController = self.viewControllers.last! as UIViewController
|
let topController = self.viewControllers.last! as UIViewController
|
||||||
|
|
||||||
@ -323,7 +323,7 @@ public class NavigationController: NavigationControllerProxy, ContainableControl
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if let topController = self.viewControllers.last where topController.isViewLoaded() {
|
if let topController = self.viewControllers.last where topController.isViewLoaded {
|
||||||
topController.navigation_setNavigationController(nil)
|
topController.navigation_setNavigationController(nil)
|
||||||
topController.view.removeFromSuperview()
|
topController.view.removeFromSuperview()
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ public class NavigationTitleNode: ASDisplayNode {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public var color: UIColor = UIColor.black() {
|
public var color: UIColor = UIColor.black {
|
||||||
didSet {
|
didSet {
|
||||||
self.setText(self._text)
|
self.setText(self._text)
|
||||||
}
|
}
|
||||||
@ -42,7 +42,7 @@ public class NavigationTitleNode: ASDisplayNode {
|
|||||||
var titleAttributes = [String : AnyObject]()
|
var titleAttributes = [String : AnyObject]()
|
||||||
titleAttributes[NSFontAttributeName] = UIFont.boldSystemFont(ofSize: 17.0)
|
titleAttributes[NSFontAttributeName] = UIFont.boldSystemFont(ofSize: 17.0)
|
||||||
titleAttributes[NSForegroundColorAttributeName] = self.color
|
titleAttributes[NSForegroundColorAttributeName] = self.color
|
||||||
let titleString = AttributedString(string: text as String, attributes: titleAttributes)
|
let titleString = NSAttributedString(string: text as String, attributes: titleAttributes)
|
||||||
self.label.attributedString = titleString
|
self.label.attributedString = titleString
|
||||||
self.invalidateCalculatedLayout()
|
self.invalidateCalculatedLayout()
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ enum NavigationTransition {
|
|||||||
private let shadowWidth: CGFloat = 16.0
|
private let shadowWidth: CGFloat = 16.0
|
||||||
|
|
||||||
private func generateShadow() -> UIImage? {
|
private func generateShadow() -> UIImage? {
|
||||||
return UIImage(named: "NavigationShadow", in: Bundle(for: NavigationBackButtonNode.self), compatibleWith: nil)?.precomposed().resizableImage(withCapInsets: UIEdgeInsetsZero, resizingMode: .tile)
|
return UIImage(named: "NavigationShadow", in: Bundle(for: NavigationBackButtonNode.self), compatibleWith: nil)?.precomposed().resizableImage(withCapInsets: UIEdgeInsets(), resizingMode: .tile)
|
||||||
}
|
}
|
||||||
|
|
||||||
private let shadowImage = generateShadow()
|
private let shadowImage = generateShadow()
|
||||||
@ -51,7 +51,7 @@ class NavigationTransitionCoordinator {
|
|||||||
self.topNavigationBar = topNavigationBar
|
self.topNavigationBar = topNavigationBar
|
||||||
self.bottomNavigationBar = bottomNavigationBar
|
self.bottomNavigationBar = bottomNavigationBar
|
||||||
self.dimView = UIView()
|
self.dimView = UIView()
|
||||||
self.dimView.backgroundColor = UIColor.black()
|
self.dimView.backgroundColor = UIColor.black
|
||||||
self.shadowView = UIImageView(image: shadowImage)
|
self.shadowView = UIImageView(image: shadowImage)
|
||||||
|
|
||||||
if let topNavigationBar = topNavigationBar, bottomNavigationBar = bottomNavigationBar {
|
if let topNavigationBar = topNavigationBar, bottomNavigationBar = bottomNavigationBar {
|
||||||
|
@ -46,7 +46,7 @@ final class PresentationContext {
|
|||||||
|
|
||||||
self.presentationDisposables.add(controllerReady.start(next: { [weak self] _ in
|
self.presentationDisposables.add(controllerReady.start(next: { [weak self] _ in
|
||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
if strongSelf.controllers.contains({ $0 === controller }) {
|
if strongSelf.controllers.contains(where: { $0 === controller }) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,7 +131,7 @@ final class PresentationContext {
|
|||||||
|
|
||||||
func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
|
func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
|
||||||
for controller in self.controllers {
|
for controller in self.controllers {
|
||||||
if controller.isViewLoaded() {
|
if controller.isViewLoaded {
|
||||||
if let result = controller.view.hitTest(point, with: event) {
|
if let result = controller.view.hitTest(point, with: event) {
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@ import Foundation
|
|||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
private let systemVersion = { () -> (Int, Int) in
|
private let systemVersion = { () -> (Int, Int) in
|
||||||
let string = UIDevice.current().systemVersion as NSString
|
let string = UIDevice.current.systemVersion as NSString
|
||||||
var minor = 0
|
var minor = 0
|
||||||
let range = string.range(of: ".")
|
let range = string.range(of: ".")
|
||||||
if range.location != NSNotFound {
|
if range.location != NSNotFound {
|
||||||
|
@ -1,29 +0,0 @@
|
|||||||
import Foundation
|
|
||||||
import UIKit
|
|
||||||
|
|
||||||
private class StatusBarHostWindowController: UIViewController {
|
|
||||||
override func preferredStatusBarStyle() -> UIStatusBarStyle {
|
|
||||||
return UIStatusBarStyle.default
|
|
||||||
}
|
|
||||||
|
|
||||||
override func prefersStatusBarHidden() -> Bool {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
override func shouldAutorotate() -> Bool {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class StatusBarHostWindow: UIWindow {
|
|
||||||
public init() {
|
|
||||||
super.init(frame: CGRect())
|
|
||||||
|
|
||||||
self.windowLevel = 10000.0
|
|
||||||
self.rootViewController = StatusBarHostWindowController()
|
|
||||||
}
|
|
||||||
|
|
||||||
required public init?(coder aDecoder: NSCoder) {
|
|
||||||
fatalError("init(coder:) has not been implemented")
|
|
||||||
}
|
|
||||||
}
|
|
@ -31,7 +31,7 @@ private func optimizeMappedSurface(_ surface: MappedStatusBarSurface) -> MappedS
|
|||||||
return surface
|
return surface
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let size = UIApplication.shared().statusBarFrame.size
|
let size = UIApplication.shared.statusBarFrame.size
|
||||||
return MappedStatusBarSurface(statusBars: [MappedStatusBar(style: surface.statusBars[0].style, frame: CGRect(origin: CGPoint(x: 0.0, y: surface.statusBars[0].frame.origin.y), size: size), statusBar: nil)], surface: surface.surface)
|
return MappedStatusBarSurface(statusBars: [MappedStatusBar(style: surface.statusBars[0].style, frame: CGRect(origin: CGPoint(x: 0.0, y: surface.statusBars[0].frame.origin.y), size: size), statusBar: nil)], surface: surface.surface)
|
||||||
} else {
|
} else {
|
||||||
return surface
|
return surface
|
||||||
@ -124,7 +124,7 @@ class StatusBarManager {
|
|||||||
|
|
||||||
for surface in previousSurfaces {
|
for surface in previousSurfaces {
|
||||||
for statusBar in surface.statusBars {
|
for statusBar in surface.statusBars {
|
||||||
if !visibleStatusBars.contains({$0 === statusBar}) {
|
if !visibleStatusBars.contains(where: {$0 === statusBar}) {
|
||||||
statusBar.removeProxyNode()
|
statusBar.removeProxyNode()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -132,7 +132,7 @@ class StatusBarManager {
|
|||||||
|
|
||||||
for surface in self.surfaces {
|
for surface in self.surfaces {
|
||||||
for statusBar in surface.statusBars {
|
for statusBar in surface.statusBars {
|
||||||
if !visibleStatusBars.contains({$0 === statusBar}) {
|
if !visibleStatusBars.contains(where: {$0 === statusBar}) {
|
||||||
statusBar.removeProxyNode()
|
statusBar.removeProxyNode()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -144,8 +144,8 @@ class StatusBarManager {
|
|||||||
|
|
||||||
if let globalStatusBar = globalStatusBar {
|
if let globalStatusBar = globalStatusBar {
|
||||||
let statusBarStyle: UIStatusBarStyle = globalStatusBar.0 == .Black ? .default : .lightContent
|
let statusBarStyle: UIStatusBarStyle = globalStatusBar.0 == .Black ? .default : .lightContent
|
||||||
if UIApplication.shared().statusBarStyle != statusBarStyle {
|
if UIApplication.shared.statusBarStyle != statusBarStyle {
|
||||||
UIApplication.shared().setStatusBarStyle(statusBarStyle, animated: false)
|
UIApplication.shared.setStatusBarStyle(statusBarStyle, animated: false)
|
||||||
}
|
}
|
||||||
StatusBarUtils.statusBarWindow()!.alpha = globalStatusBar.1
|
StatusBarUtils.statusBarWindow()!.alpha = globalStatusBar.1
|
||||||
} else {
|
} else {
|
||||||
|
@ -43,16 +43,16 @@ private class StatusBarItemNode: ASDisplayNode {
|
|||||||
if let contents = sublayer.contents where CFGetTypeID(contents) == CGImage.typeID {
|
if let contents = sublayer.contents where CFGetTypeID(contents) == CGImage.typeID {
|
||||||
let image = contents as! CGImage
|
let image = contents as! CGImage
|
||||||
context.withFlippedContext { c in
|
context.withFlippedContext { c in
|
||||||
c.translate(x: origin.x, y: origin.y)
|
c.translateBy(x: origin.x, y: origin.y)
|
||||||
c.draw(in: CGRect(origin: CGPoint(), size: context.size), image: image)
|
c.draw(in: CGRect(origin: CGPoint(), size: context.size), image: image)
|
||||||
c.translate(x: -origin.x, y: -origin.y)
|
c.translateBy(x: -origin.x, y: -origin.y)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
context.withContext { c in
|
context.withContext { c in
|
||||||
UIGraphicsPushContext(c)
|
UIGraphicsPushContext(c)
|
||||||
c.translate(x: origin.x, y: origin.y)
|
c.translateBy(x: origin.x, y: origin.y)
|
||||||
sublayer.render(in: c)
|
sublayer.render(in: c)
|
||||||
c.translate(x: -origin.x, y: -origin.y)
|
c.translateBy(x: -origin.x, y: -origin.y)
|
||||||
UIGraphicsPopContext()
|
UIGraphicsPopContext()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,41 +1,41 @@
|
|||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
final class SystemContainedControllerTransitionCoordinator:NSObject, UIViewControllerTransitionCoordinator {
|
final class SystemContainedControllerTransitionCoordinator:NSObject, UIViewControllerTransitionCoordinator {
|
||||||
public func isAnimated() -> Bool {
|
public var isAnimated: Bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
public func presentationStyle() -> UIModalPresentationStyle {
|
public var presentationStyle: UIModalPresentationStyle {
|
||||||
return .fullScreen
|
return .fullScreen
|
||||||
}
|
}
|
||||||
|
|
||||||
public func initiallyInteractive() -> Bool {
|
public var initiallyInteractive: Bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
public let isInterruptible: Bool = false
|
public let isInterruptible: Bool = false
|
||||||
|
|
||||||
public func isInteractive() -> Bool {
|
public var isInteractive: Bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
public func isCancelled() -> Bool {
|
public var isCancelled: Bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
public func transitionDuration() -> TimeInterval {
|
public var transitionDuration: TimeInterval {
|
||||||
return 0.6
|
return 0.6
|
||||||
}
|
}
|
||||||
|
|
||||||
public func percentComplete() -> CGFloat {
|
public var percentComplete: CGFloat {
|
||||||
return 0.0
|
return 0.0
|
||||||
}
|
}
|
||||||
|
|
||||||
public func completionVelocity() -> CGFloat {
|
public var completionVelocity: CGFloat {
|
||||||
return 0.0
|
return 0.0
|
||||||
}
|
}
|
||||||
|
|
||||||
public func completionCurve() -> UIViewAnimationCurve {
|
public var completionCurve: UIViewAnimationCurve {
|
||||||
return .easeInOut
|
return .easeInOut
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,11 +47,11 @@ final class SystemContainedControllerTransitionCoordinator:NSObject, UIViewContr
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
public func containerView() -> UIView {
|
public var containerView: UIView {
|
||||||
return UIView()
|
return UIView()
|
||||||
}
|
}
|
||||||
|
|
||||||
public func targetTransform() -> CGAffineTransform {
|
public var targetTransform: CGAffineTransform {
|
||||||
return CGAffineTransform.identity
|
return CGAffineTransform.identity
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ import Foundation
|
|||||||
import UIKit
|
import UIKit
|
||||||
import AsyncDisplayKit
|
import AsyncDisplayKit
|
||||||
|
|
||||||
private let separatorHeight: CGFloat = 1.0 / UIScreen.main().scale
|
private let separatorHeight: CGFloat = 1.0 / UIScreen.main.scale
|
||||||
private func tabBarItemImage(_ image: UIImage?, title: String, tintColor: UIColor) -> UIImage {
|
private func tabBarItemImage(_ image: UIImage?, title: String, tintColor: UIColor) -> UIImage {
|
||||||
let font = Font.regular(10.0)
|
let font = Font.regular(10.0)
|
||||||
let titleSize = (title as NSString).boundingRect(with: CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude), options: [.usesLineFragmentOrigin], attributes: [NSFontAttributeName: font], context: nil).size
|
let titleSize = (title as NSString).boundingRect(with: CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude), options: [.usesLineFragmentOrigin], attributes: [NSFontAttributeName: font], context: nil).size
|
||||||
@ -24,10 +24,10 @@ private func tabBarItemImage(_ image: UIImage?, title: String, tintColor: UIColo
|
|||||||
if let image = image {
|
if let image = image {
|
||||||
let imageRect = CGRect(origin: CGPoint(x: floorToScreenPixels((size.width - imageSize.width) / 2.0), y: 0.0), size: imageSize)
|
let imageRect = CGRect(origin: CGPoint(x: floorToScreenPixels((size.width - imageSize.width) / 2.0), y: 0.0), size: imageSize)
|
||||||
context.saveGState()
|
context.saveGState()
|
||||||
context.translate(x: imageRect.midX, y: imageRect.midY)
|
context.translateBy(x: imageRect.midX, y: imageRect.midY)
|
||||||
context.scale(x: 1.0, y: -1.0)
|
context.scaleBy(x: 1.0, y: -1.0)
|
||||||
context.translate(x: -imageRect.midX, y: -imageRect.midY)
|
context.translateBy(x: -imageRect.midX, y: -imageRect.midY)
|
||||||
context.clipToMask(imageRect, mask: image.cgImage!)
|
context.clip(to: imageRect, mask: image.cgImage!)
|
||||||
context.setFillColor(tintColor.cgColor)
|
context.setFillColor(tintColor.cgColor)
|
||||||
context.fill(imageRect)
|
context.fill(imageRect)
|
||||||
context.restoreGState()
|
context.restoreGState()
|
||||||
@ -140,7 +140,8 @@ class TabBarNode: ASDisplayNode {
|
|||||||
let node = self.tabBarNodes[i]
|
let node = self.tabBarNodes[i]
|
||||||
node.measure(CGSize(width: internalWidth, height: size.height))
|
node.measure(CGSize(width: internalWidth, height: size.height))
|
||||||
|
|
||||||
node.frame = CGRect(origin: CGPoint(x: floor(leftNodeOriginX + CGFloat(i) * distanceBetweenNodes - node.calculatedSize.width / 2.0), y: 4.0), size: node.calculatedSize)
|
let originX = floor(leftNodeOriginX + CGFloat(i) * distanceBetweenNodes - node.calculatedSize.width / 2.0)
|
||||||
|
node.frame = CGRect(origin: CGPoint(x: originX, y: 4.0), size: node.calculatedSize)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ private func dumpLayers(_ layer: CALayer, indent: String = "") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public let UIScreenScale = UIScreen.main().scale
|
public let UIScreenScale = UIScreen.main.scale
|
||||||
public func floorToScreenPixels(_ value: CGFloat) -> CGFloat {
|
public func floorToScreenPixels(_ value: CGFloat) -> CGFloat {
|
||||||
return floor(value * UIScreenScale) / UIScreenScale
|
return floor(value * UIScreenScale) / UIScreenScale
|
||||||
}
|
}
|
||||||
@ -96,7 +96,7 @@ public extension UIImage {
|
|||||||
self.draw(at: CGPoint())
|
self.draw(at: CGPoint())
|
||||||
let result = UIGraphicsGetImageFromCurrentImageContext()!
|
let result = UIGraphicsGetImageFromCurrentImageContext()!
|
||||||
UIGraphicsEndImageContext()
|
UIGraphicsEndImageContext()
|
||||||
if !UIEdgeInsetsEqualToEdgeInsets(self.capInsets, UIEdgeInsetsZero) {
|
if !UIEdgeInsetsEqualToEdgeInsets(self.capInsets, UIEdgeInsets()) {
|
||||||
return result.resizableImage(withCapInsets: self.capInsets, resizingMode: self.resizingMode)
|
return result.resizableImage(withCapInsets: self.capInsets, resizingMode: self.resizingMode)
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
typedef void (^UINavigationItemSetTitleListener)(NSString *);
|
typedef void (^UINavigationItemSetTitleListener)(NSString *);
|
||||||
|
typedef void (^UINavigationItemSetTitleViewListener)(UIView *);
|
||||||
typedef void (^UINavigationItemSetBarButtonItemListener)(UIBarButtonItem *, BOOL);
|
typedef void (^UINavigationItemSetBarButtonItemListener)(UIBarButtonItem *, BOOL);
|
||||||
|
|
||||||
@interface UINavigationItem (Proxy)
|
@interface UINavigationItem (Proxy)
|
||||||
|
|
||||||
- (NSInteger)addSetTitleListener:(UINavigationItemSetTitleListener)listener;
|
- (NSInteger)addSetTitleListener:(UINavigationItemSetTitleListener)listener;
|
||||||
- (void)removeSetTitleListener:(NSInteger)key;
|
- (void)removeSetTitleListener:(NSInteger)key;
|
||||||
|
- (NSInteger)addSetTitleViewListener:(UINavigationItemSetTitleViewListener)listener;
|
||||||
|
- (void)removeSetTitleViewListener:(NSInteger)key;
|
||||||
- (NSInteger)addSetLeftBarButtonItemListener:(UINavigationItemSetBarButtonItemListener)listener;
|
- (NSInteger)addSetLeftBarButtonItemListener:(UINavigationItemSetBarButtonItemListener)listener;
|
||||||
- (void)removeSetLeftBarButtonItemListener:(NSInteger)key;
|
- (void)removeSetLeftBarButtonItemListener:(NSInteger)key;
|
||||||
- (NSInteger)addSetRightBarButtonItemListener:(UINavigationItemSetBarButtonItemListener)listener;
|
- (NSInteger)addSetRightBarButtonItemListener:(UINavigationItemSetBarButtonItemListener)listener;
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#import "RuntimeUtils.h"
|
#import "RuntimeUtils.h"
|
||||||
|
|
||||||
static const void *setTitleListenerBagKey = &setTitleListenerBagKey;
|
static const void *setTitleListenerBagKey = &setTitleListenerBagKey;
|
||||||
|
static const void *setTitleViewListenerBagKey = &setTitleViewListenerBagKey;
|
||||||
static const void *setLeftBarButtonItemListenerBagKey = &setLeftBarButtonItemListenerBagKey;
|
static const void *setLeftBarButtonItemListenerBagKey = &setLeftBarButtonItemListenerBagKey;
|
||||||
static const void *setRightBarButtonItemListenerBagKey = &setRightBarButtonItemListenerBagKey;
|
static const void *setRightBarButtonItemListenerBagKey = &setRightBarButtonItemListenerBagKey;
|
||||||
|
|
||||||
@ -15,6 +16,7 @@ static const void *setRightBarButtonItemListenerBagKey = &setRightBarButtonItemL
|
|||||||
dispatch_once(&onceToken, ^
|
dispatch_once(&onceToken, ^
|
||||||
{
|
{
|
||||||
[RuntimeUtils swizzleInstanceMethodOfClass:[UINavigationItem class] currentSelector:@selector(setTitle:) newSelector:@selector(_ac91f40f_setTitle:)];
|
[RuntimeUtils swizzleInstanceMethodOfClass:[UINavigationItem class] currentSelector:@selector(setTitle:) newSelector:@selector(_ac91f40f_setTitle:)];
|
||||||
|
[RuntimeUtils swizzleInstanceMethodOfClass:[UINavigationItem class] currentSelector:@selector(setTitleView:) newSelector:@selector(_ac91f40f_setTitleView:)];
|
||||||
[RuntimeUtils swizzleInstanceMethodOfClass:[UINavigationItem class] currentSelector:@selector(setLeftBarButtonItem:) newSelector:@selector(_ac91f40f_setLeftBarButtonItem:animated:)];
|
[RuntimeUtils swizzleInstanceMethodOfClass:[UINavigationItem class] currentSelector:@selector(setLeftBarButtonItem:) newSelector:@selector(_ac91f40f_setLeftBarButtonItem:animated:)];
|
||||||
[RuntimeUtils swizzleInstanceMethodOfClass:[UINavigationItem class] currentSelector:@selector(setRightBarButtonItem:) newSelector:@selector(_ac91f40f_setRightBarButtonItem:animated:)];
|
[RuntimeUtils swizzleInstanceMethodOfClass:[UINavigationItem class] currentSelector:@selector(setRightBarButtonItem:) newSelector:@selector(_ac91f40f_setRightBarButtonItem:animated:)];
|
||||||
});
|
});
|
||||||
@ -24,18 +26,25 @@ static const void *setRightBarButtonItemListenerBagKey = &setRightBarButtonItemL
|
|||||||
{
|
{
|
||||||
[self _ac91f40f_setTitle:title];
|
[self _ac91f40f_setTitle:title];
|
||||||
|
|
||||||
[(NSBag *)[self associatedObjectForKey:setTitleListenerBagKey] enumerateItems:^(UINavigationItemSetTitleListener listener)
|
[(NSBag *)[self associatedObjectForKey:setTitleListenerBagKey] enumerateItems:^(UINavigationItemSetTitleListener listener) {
|
||||||
{
|
|
||||||
listener(title);
|
listener(title);
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)_ac91f40f_setTitleView:(UIView *)titleView
|
||||||
|
{
|
||||||
|
[self _ac91f40f_setTitleView:titleView];
|
||||||
|
|
||||||
|
[(NSBag *)[self associatedObjectForKey:setTitleViewListenerBagKey] enumerateItems:^(UINavigationItemSetTitleViewListener listener) {
|
||||||
|
listener(titleView);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)_ac91f40f_setLeftBarButtonItem:(UIBarButtonItem *)leftBarButtonItem animated:(BOOL)animated
|
- (void)_ac91f40f_setLeftBarButtonItem:(UIBarButtonItem *)leftBarButtonItem animated:(BOOL)animated
|
||||||
{
|
{
|
||||||
[self _ac91f40f_setLeftBarButtonItem:leftBarButtonItem animated:animated];
|
[self _ac91f40f_setLeftBarButtonItem:leftBarButtonItem animated:animated];
|
||||||
|
|
||||||
[(NSBag *)[self associatedObjectForKey:setLeftBarButtonItemListenerBagKey] enumerateItems:^(UINavigationItemSetBarButtonItemListener listener)
|
[(NSBag *)[self associatedObjectForKey:setLeftBarButtonItemListenerBagKey] enumerateItems:^(UINavigationItemSetBarButtonItemListener listener) {
|
||||||
{
|
|
||||||
listener(leftBarButtonItem, animated);
|
listener(leftBarButtonItem, animated);
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
@ -44,8 +53,7 @@ static const void *setRightBarButtonItemListenerBagKey = &setRightBarButtonItemL
|
|||||||
{
|
{
|
||||||
[self _ac91f40f_setRightBarButtonItem:rightBarButtonItem animated:animated];
|
[self _ac91f40f_setRightBarButtonItem:rightBarButtonItem animated:animated];
|
||||||
|
|
||||||
[(NSBag *)[self associatedObjectForKey:setRightBarButtonItemListenerBagKey] enumerateItems:^(UINavigationItemSetBarButtonItemListener listener)
|
[(NSBag *)[self associatedObjectForKey:setRightBarButtonItemListenerBagKey] enumerateItems:^(UINavigationItemSetBarButtonItemListener listener) {
|
||||||
{
|
|
||||||
listener(rightBarButtonItem, animated);
|
listener(rightBarButtonItem, animated);
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
@ -66,6 +74,22 @@ static const void *setRightBarButtonItemListenerBagKey = &setRightBarButtonItemL
|
|||||||
[(NSBag *)[self associatedObjectForKey:setTitleListenerBagKey] removeItem:key];
|
[(NSBag *)[self associatedObjectForKey:setTitleListenerBagKey] removeItem:key];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSInteger)addSetTitleViewListener:(UINavigationItemSetTitleViewListener)listener
|
||||||
|
{
|
||||||
|
NSBag *bag = [self associatedObjectForKey:setTitleViewListenerBagKey];
|
||||||
|
if (bag == nil)
|
||||||
|
{
|
||||||
|
bag = [[NSBag alloc] init];
|
||||||
|
[self setAssociatedObject:bag forKey:setTitleViewListenerBagKey];
|
||||||
|
}
|
||||||
|
return [bag addItem:[listener copy]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)removeSetTitleViewListener:(NSInteger)key
|
||||||
|
{
|
||||||
|
[(NSBag *)[self associatedObjectForKey:setTitleViewListenerBagKey] removeItem:key];
|
||||||
|
}
|
||||||
|
|
||||||
- (NSInteger)addSetLeftBarButtonItemListener:(UINavigationItemSetBarButtonItemListener)listener
|
- (NSInteger)addSetLeftBarButtonItemListener:(UINavigationItemSetBarButtonItemListener)listener
|
||||||
{
|
{
|
||||||
NSBag *bag = [self associatedObjectForKey:setLeftBarButtonItemListenerBagKey];
|
NSBag *bag = [self associatedObjectForKey:setLeftBarButtonItemListenerBagKey];
|
||||||
|
@ -43,7 +43,7 @@ import SwiftSignalKit
|
|||||||
private var scrollToTopView: ScrollToTopView?
|
private var scrollToTopView: ScrollToTopView?
|
||||||
public var scrollToTop: (() -> Void)? {
|
public var scrollToTop: (() -> Void)? {
|
||||||
didSet {
|
didSet {
|
||||||
if self.isViewLoaded() {
|
if self.isViewLoaded {
|
||||||
self.updateScrollToTopView()
|
self.updateScrollToTopView()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -92,7 +92,7 @@ import SwiftSignalKit
|
|||||||
public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
|
public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
|
||||||
self.containerLayout = layout
|
self.containerLayout = layout
|
||||||
|
|
||||||
if !self.isViewLoaded() {
|
if !self.isViewLoaded {
|
||||||
self.loadView()
|
self.loadView()
|
||||||
}
|
}
|
||||||
self.view.frame = CGRect(origin: self.view.frame.origin, size: layout.size)
|
self.view.frame = CGRect(origin: self.view.frame.origin, size: layout.size)
|
||||||
@ -133,7 +133,7 @@ import SwiftSignalKit
|
|||||||
}
|
}
|
||||||
|
|
||||||
public func requestLayout(transition: ContainedViewLayoutTransition) {
|
public func requestLayout(transition: ContainedViewLayoutTransition) {
|
||||||
if self.isViewLoaded() {
|
if self.isViewLoaded {
|
||||||
self.containerLayoutUpdated(self.containerLayout, transition: transition)
|
self.containerLayoutUpdated(self.containerLayout, transition: transition)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,11 +2,11 @@ import Foundation
|
|||||||
import AsyncDisplayKit
|
import AsyncDisplayKit
|
||||||
|
|
||||||
private class WindowRootViewController: UIViewController {
|
private class WindowRootViewController: UIViewController {
|
||||||
override func preferredStatusBarStyle() -> UIStatusBarStyle {
|
override var preferredStatusBarStyle: UIStatusBarStyle {
|
||||||
return .default
|
return .default
|
||||||
}
|
}
|
||||||
|
|
||||||
override func prefersStatusBarHidden() -> Bool {
|
override var prefersStatusBarHidden: Bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -84,8 +84,8 @@ private struct UpdatingLayout {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private let orientationChangeDuration: Double = UIDevice.current().userInterfaceIdiom == .pad ? 0.4 : 0.3
|
private let orientationChangeDuration: Double = UIDevice.current.userInterfaceIdiom == .pad ? 0.4 : 0.3
|
||||||
private let statusBarHiddenInLandscape: Bool = UIDevice.current().userInterfaceIdiom == .phone
|
private let statusBarHiddenInLandscape: Bool = UIDevice.current.userInterfaceIdiom == .phone
|
||||||
|
|
||||||
private func containedLayoutForWindowLayout(_ layout: WindowLayout) -> ContainerViewLayout {
|
private func containedLayoutForWindowLayout(_ layout: WindowLayout) -> ContainerViewLayout {
|
||||||
return ContainerViewLayout(size: layout.size, intrinsicInsets: UIEdgeInsets(), statusBarHeight: layout.statusBarHeight, inputHeight: layout.inputHeight)
|
return ContainerViewLayout(size: layout.size, intrinsicInsets: UIEdgeInsets(), statusBarHeight: layout.statusBarHeight, inputHeight: layout.inputHeight)
|
||||||
@ -108,12 +108,12 @@ public class Window: UIWindow {
|
|||||||
private var statusBarHidden = false
|
private var statusBarHidden = false
|
||||||
|
|
||||||
public convenience init() {
|
public convenience init() {
|
||||||
self.init(frame: UIScreen.main().bounds)
|
self.init(frame: UIScreen.main.bounds)
|
||||||
}
|
}
|
||||||
|
|
||||||
public override init(frame: CGRect) {
|
public override init(frame: CGRect) {
|
||||||
self.statusBarManager = StatusBarManager()
|
self.statusBarManager = StatusBarManager()
|
||||||
self.windowLayout = WindowLayout(size: frame.size, statusBarHeight: UIApplication.shared().statusBarFrame.size.height, inputHeight: 0.0)
|
self.windowLayout = WindowLayout(size: frame.size, statusBarHeight: UIApplication.shared.statusBarFrame.size.height, inputHeight: 0.0)
|
||||||
self.presentationContext = PresentationContext()
|
self.presentationContext = PresentationContext()
|
||||||
|
|
||||||
super.init(frame: frame)
|
super.init(frame: frame)
|
||||||
@ -129,7 +129,7 @@ public class Window: UIWindow {
|
|||||||
|
|
||||||
self.statusBarChangeObserver = NotificationCenter.default.addObserver(forName: NSNotification.Name.UIApplicationWillChangeStatusBarFrame, object: nil, queue: OperationQueue.main, using: { [weak self] notification in
|
self.statusBarChangeObserver = NotificationCenter.default.addObserver(forName: NSNotification.Name.UIApplicationWillChangeStatusBarFrame, object: nil, queue: OperationQueue.main, using: { [weak self] notification in
|
||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
let statusBarHeight: CGFloat = max(20.0, (notification.userInfo?[UIApplicationStatusBarFrameUserInfoKey] as? NSValue)?.cgRectValue().height ?? 20.0)
|
let statusBarHeight: CGFloat = max(20.0, (notification.userInfo?[UIApplicationStatusBarFrameUserInfoKey] as? NSValue)?.cgRectValue.height ?? 20.0)
|
||||||
|
|
||||||
let transition: ContainedViewLayoutTransition = .animated(duration: 0.35, curve: .easeInOut)
|
let transition: ContainedViewLayoutTransition = .animated(duration: 0.35, curve: .easeInOut)
|
||||||
strongSelf.updateLayout { $0.update(statusBarHeight: statusBarHeight, transition: transition, overrideTransition: false) }
|
strongSelf.updateLayout { $0.update(statusBarHeight: statusBarHeight, transition: transition, overrideTransition: false) }
|
||||||
@ -138,8 +138,8 @@ public class Window: UIWindow {
|
|||||||
|
|
||||||
self.keyboardFrameChangeObserver = NotificationCenter.default.addObserver(forName: NSNotification.Name.UIKeyboardWillChangeFrame, object: nil, queue: nil, using: { [weak self] notification in
|
self.keyboardFrameChangeObserver = NotificationCenter.default.addObserver(forName: NSNotification.Name.UIKeyboardWillChangeFrame, object: nil, queue: nil, using: { [weak self] notification in
|
||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
let keyboardFrame: CGRect = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue() ?? CGRect()
|
let keyboardFrame: CGRect = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue ?? CGRect()
|
||||||
let keyboardHeight = max(0.0, UIScreen.main().bounds.size.height - keyboardFrame.minY)
|
let keyboardHeight = max(0.0, UIScreen.main.bounds.size.height - keyboardFrame.minY)
|
||||||
var duration: Double = (notification.userInfo?[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue ?? 0.0
|
var duration: Double = (notification.userInfo?[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue ?? 0.0
|
||||||
if duration > DBL_EPSILON {
|
if duration > DBL_EPSILON {
|
||||||
duration = 0.5
|
duration = 0.5
|
||||||
@ -316,7 +316,7 @@ public class Window: UIWindow {
|
|||||||
if let updatingLayout = self.updatingLayout {
|
if let updatingLayout = self.updatingLayout {
|
||||||
self.updatingLayout = nil
|
self.updatingLayout = nil
|
||||||
if updatingLayout.layout != self.windowLayout {
|
if updatingLayout.layout != self.windowLayout {
|
||||||
var statusBarHeight = UIApplication.shared().statusBarFrame.size.height
|
var statusBarHeight = UIApplication.shared.statusBarFrame.size.height
|
||||||
var statusBarWasHidden = self.statusBarHidden
|
var statusBarWasHidden = self.statusBarHidden
|
||||||
if statusBarHiddenInLandscape && updatingLayout.layout.size.width > updatingLayout.layout.size.height {
|
if statusBarHiddenInLandscape && updatingLayout.layout.size.width > updatingLayout.layout.size.height {
|
||||||
statusBarHeight = 0.0
|
statusBarHeight = 0.0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user