feat: chapter runtime refactoring and related updates
- Refactor chapter runtime: replace window coordinator/snapshot with warmup orchestrator - Update EPUB core: parser, reading session, JS bridge, navigator layout - Update reader controller: data source, location resolution, persistence - Update chapter runtime: data cache, loader, runtime store, disk cache, warmup orchestrator - Remove deprecated navigation state machine and pagination state - Update text rendering: book cache, HTML normalizer - Update UI: text content view, dark image adjuster, text selection controller - Update settings and reader configuration - Add CODE_REVIEW.md and AUDIT_FINAL.md documentation - Update pod dependencies (remove SSAlertSwift, SnapKit) - Update podspec and pod configuration files Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -17,12 +17,8 @@ PODS:
|
||||
- DTFoundation/UIKit (1.7.19):
|
||||
- DTFoundation/Core
|
||||
- RDReaderView (0.0.1):
|
||||
- DTCoreText
|
||||
- SnapKit
|
||||
- SSAlertSwift
|
||||
- DTCoreText (~> 1.6)
|
||||
- ZIPFoundation (~> 0.9)
|
||||
- SnapKit (5.7.1)
|
||||
- SSAlertSwift (0.0.15)
|
||||
- ZIPFoundation (0.9.20)
|
||||
|
||||
DEPENDENCIES:
|
||||
@@ -32,8 +28,6 @@ SPEC REPOS:
|
||||
trunk:
|
||||
- DTCoreText
|
||||
- DTFoundation
|
||||
- SnapKit
|
||||
- SSAlertSwift
|
||||
- ZIPFoundation
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
@@ -43,9 +37,7 @@ EXTERNAL SOURCES:
|
||||
SPEC CHECKSUMS:
|
||||
DTCoreText: 11b7fe2104f476f82e75a4e3dbdde74d7186cecb
|
||||
DTFoundation: 76b624967cf5bcaae6bb057d622c536c36ef36d0
|
||||
RDReaderView: 617ec758a5db3c10024acf83b110465ea8343b5b
|
||||
SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a
|
||||
SSAlertSwift: aad8dc0c20b36fcffe700b81d7be89d60c7ba4f1
|
||||
RDReaderView: 2e0eeeff4bcfe8bbc09642344d326440af280ed5
|
||||
ZIPFoundation: dfd3d681c4053ff7e2f7350bc4e53b5dba3f5351
|
||||
|
||||
PODFILE CHECKSUM: 775f5c8c488024e24d494aad6331e9fef8f9e2e5
|
||||
|
||||
+2
-8
@@ -3,7 +3,7 @@
|
||||
"version": "0.0.1",
|
||||
"summary": "A reader view for novel",
|
||||
"platforms": {
|
||||
"ios": "15.0"
|
||||
"ios": "15.6"
|
||||
},
|
||||
"swift_versions": [
|
||||
"5.10"
|
||||
@@ -28,13 +28,7 @@
|
||||
"~> 0.9"
|
||||
],
|
||||
"DTCoreText": [
|
||||
|
||||
],
|
||||
"SnapKit": [
|
||||
|
||||
],
|
||||
"SSAlertSwift": [
|
||||
|
||||
"~> 1.6"
|
||||
]
|
||||
},
|
||||
"requires_arc": true,
|
||||
|
||||
Generated
+2
-10
@@ -17,12 +17,8 @@ PODS:
|
||||
- DTFoundation/UIKit (1.7.19):
|
||||
- DTFoundation/Core
|
||||
- RDReaderView (0.0.1):
|
||||
- DTCoreText
|
||||
- SnapKit
|
||||
- SSAlertSwift
|
||||
- DTCoreText (~> 1.6)
|
||||
- ZIPFoundation (~> 0.9)
|
||||
- SnapKit (5.7.1)
|
||||
- SSAlertSwift (0.0.15)
|
||||
- ZIPFoundation (0.9.20)
|
||||
|
||||
DEPENDENCIES:
|
||||
@@ -32,8 +28,6 @@ SPEC REPOS:
|
||||
trunk:
|
||||
- DTCoreText
|
||||
- DTFoundation
|
||||
- SnapKit
|
||||
- SSAlertSwift
|
||||
- ZIPFoundation
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
@@ -43,9 +37,7 @@ EXTERNAL SOURCES:
|
||||
SPEC CHECKSUMS:
|
||||
DTCoreText: 11b7fe2104f476f82e75a4e3dbdde74d7186cecb
|
||||
DTFoundation: 76b624967cf5bcaae6bb057d622c536c36ef36d0
|
||||
RDReaderView: 617ec758a5db3c10024acf83b110465ea8343b5b
|
||||
SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a
|
||||
SSAlertSwift: aad8dc0c20b36fcffe700b81d7be89d60c7ba4f1
|
||||
RDReaderView: 2e0eeeff4bcfe8bbc09642344d326440af280ed5
|
||||
ZIPFoundation: dfd3d681c4053ff7e2f7350bc4e53b5dba3f5351
|
||||
|
||||
PODFILE CHECKSUM: 775f5c8c488024e24d494aad6331e9fef8f9e2e5
|
||||
|
||||
+2089
-2809
File diff suppressed because it is too large
Load Diff
Generated
-110
@@ -1,110 +0,0 @@
|
||||
# SSAlert
|
||||
实际开发中经常遇到各种自定义的弹窗的需求,其中编写弹窗动画和遮罩就很繁琐,而且一个一个去写重复的代码,代码会变得更加冗余。
|
||||
|
||||
SSAlert封装了动画部分,而且支持自定义动画。可以快速构建弹窗,简单易用,基本可以满足大部分弹窗需求。自带常用自定义弹窗,类型系统的UIAlertView,UIActionSheet。
|
||||
# 特性
|
||||
- 支持OC、Swift版本
|
||||
- 支持自定义弹窗内容,可以根据弹窗内容frame布局和自动布局确定弹窗大小
|
||||
- 支持动画展示后刷新弹窗的大小
|
||||
- 支带透明、黑色、无三种背景遮罩
|
||||
- 自带从上、下、左、右、中弹出动画,动画支持弹簧效果,而且可以设置位置偏移量
|
||||
- 支持自定义动画,动画隐藏回调
|
||||
- 支持模态视图弹窗,支持拖拽隐藏
|
||||
- 自带类似系统的弹窗UIAlertView,UIActionSheet
|
||||
# 效果图
|
||||
<img src="https://github.com/namesubai/SSAlert/blob/main/demo.gif" width = 20% height = 20% />
|
||||
|
||||
# 使用
|
||||
|
||||
## 1.导入代码
|
||||
|
||||
### Objective-C项目
|
||||
|
||||
1. pod 'SSAlert'
|
||||
2. #import <SSAlert/SSAlert.h>
|
||||
### Swift项目
|
||||
|
||||
1. pod 'SSAlertSwift'
|
||||
2. import SSAlertSwift
|
||||
|
||||
## 2.SSAlertView用法
|
||||
|
||||
### SSAlertView的初始化
|
||||
|
||||
SSAlertView的初始化有两种,一种是普通弹窗,一种是模态视图弹窗,两种的区别在于,前者是弹出一个View,后者是弹窗一个UIViewController。当需要点击弹窗上按钮不关闭弹窗跳转界面时候,可以使用模态视图弹窗。
|
||||
|
||||
普通弹窗初始化:
|
||||
```
|
||||
let customView = UIView()
|
||||
customView.frame = CGRect(x:0,y:0,width:200,height:200)
|
||||
let alertView = SSAlertView(customView: customView, onView: navigationController!.view)
|
||||
```
|
||||
模态视图弹窗初始化:
|
||||
```
|
||||
let customView = UIView()
|
||||
customView.frame = CGRect(x:0,y:0,width:200,height:200)
|
||||
let alertView = SSAlertView(customView: customView, fromViewController: self)
|
||||
```
|
||||
### SSAlertView的动画设置
|
||||
|
||||
遵循 **SSAlertAnimation** 协议的自定义动画都可以设置 **SSAlertView** 的 **animation** 属性
|
||||
|
||||
**SSAlertView**自带的动画效果:**SSAlertDefaultAnmation**,提供上、下、左、右、中弹出动画等
|
||||
```
|
||||
let animation = SSAlertDefaultAnmation(state: .fromCenter)
|
||||
alertView.animation = animation
|
||||
```
|
||||
### SSAlertView的展示和隐藏
|
||||
```
|
||||
alertView.show()
|
||||
alertView.hide()
|
||||
```
|
||||
### SSAlertView的大小刷新
|
||||
```
|
||||
customView.frame = CGRect(x:0,y:0,width:400,height:400)
|
||||
alertView.refreshFrame()
|
||||
```
|
||||
|
||||
## 3.自带类型系统UIAlert,UIActionSheet的用法
|
||||
```
|
||||
///
|
||||
let alertView = SSAlertView.alertView(style: .alert, title: "自定义Alert弹窗", message: "自带自定义Alert弹窗,类似系统的UIAlertView", cancelButton: "Cancel", otherButtons: ["OK"], onView: navigationController!.view){ index in
|
||||
print(index)
|
||||
}
|
||||
alertView.show()
|
||||
|
||||
///
|
||||
let alertView = SSAlertView.modalAlertView(style: .actionSheet, title: "自定义ActionSheet弹窗", message: "自带自定义ActionSheet弹窗,类似系统的ActionSheet", cancelButton: "Cancel", otherButtons: ["action1", "action2", "action3", "action4"], fromViewController: self) { index in
|
||||
print(index)
|
||||
}
|
||||
alertView.show()
|
||||
```
|
||||
|
||||
## 4.自定义SSAlertCommonView
|
||||
```
|
||||
let action1 = SSAlertAction(style: .actionSheet, title: "自定义Action1") {
|
||||
print("自定义Action1")
|
||||
}
|
||||
action1.titleColor = .red
|
||||
action1.backgroundColor = .yellow
|
||||
action1.titleFont = UIFont.systemFont(ofSize: 18)
|
||||
action1.height = 80
|
||||
|
||||
let action2 = SSAlertAction(style: .actionSheet, title: "自定义Action2") {
|
||||
print("自定义Action2")
|
||||
}
|
||||
action2.titleColor = .yellow
|
||||
action2.backgroundColor = .red
|
||||
action2.titleFont = UIFont.systemFont(ofSize: 22)
|
||||
action2.height = 55
|
||||
|
||||
let commonView = SSAlertCommonView(title: "自定义SSAlertCommonView", message: "文本文本文本文本文本文本", style: .actionSheet, actions: [action1, action2])
|
||||
commonView.backgroundColor = .white
|
||||
let alertView = SSAlertView(customView: commonView, onView: navigationController!.view, animation: SSAlertDefaultAnmation(state: .fromBottom))
|
||||
alertView.show()
|
||||
```
|
||||
|
||||
更多用法请下载代码,观看[demo](https://github.com/namesubai/SSAlert),
|
||||
|
||||
觉得好用,手动点个Star❤️❤️❤️❤️
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
//
|
||||
// SSAlertAnimation.swift
|
||||
// SSAlert
|
||||
//
|
||||
// Created by yangsq on 2021/8/13.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
public typealias PanProgress = CGFloat
|
||||
public typealias PanCancelProgress = CGFloat
|
||||
public typealias DimissIsCancel = Bool
|
||||
public protocol SSAlertAnimation {
|
||||
/// 动画时间
|
||||
func animationDuration() -> TimeInterval
|
||||
/// 展示动画
|
||||
func showAnimationOfAnimationView(animationView: SSAlertView, viewSize: CGSize, animated: Bool, completion:(((Bool) -> Void))?)
|
||||
/// 隐藏动画
|
||||
func hideAnimationOfAnimationView(animationView: SSAlertView, viewSize: CGSize, animated: Bool, completion:(((Bool) -> Bool))?)
|
||||
/// 刷新大小动画
|
||||
func refreshAnimationOfAnimationView(animationView: SSAlertView, viewSize: CGSize, animated: Bool, completion:(((Bool) -> Void))?)
|
||||
/// 拖拽隐藏动画,当是模态视图弹窗才有
|
||||
func panToDimissTransilatePoint(point: CGPoint, panViewFrame: CGRect) -> (PanProgress, PanCancelProgress)
|
||||
}
|
||||
|
||||
-46
@@ -1,46 +0,0 @@
|
||||
//
|
||||
// SSAlertAnimationController.swift
|
||||
// SSAlert
|
||||
//
|
||||
// Created by yangsq on 2021/8/13.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
|
||||
class SSAlertAnimationController: UIViewController {
|
||||
var isDimiss: Bool = false
|
||||
var isHideStatusBar = false {
|
||||
didSet {
|
||||
setNeedsStatusBarAppearanceUpdate()
|
||||
}
|
||||
}
|
||||
var isShowNavWhenViewWillDisappear = true
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
view.backgroundColor = .clear
|
||||
}
|
||||
|
||||
override var prefersStatusBarHidden: Bool {
|
||||
return isHideStatusBar
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
navigationController?.setNavigationBarHidden(true, animated: animated)
|
||||
}
|
||||
|
||||
override func viewWillDisappear(_ animated: Bool) {
|
||||
super.viewWillDisappear(animated)
|
||||
if !isDimiss, isShowNavWhenViewWillDisappear {
|
||||
navigationController?.setNavigationBarHidden(false, animated: animated)
|
||||
}
|
||||
}
|
||||
|
||||
override func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) {
|
||||
super.dismiss(animated: flag, completion: completion)
|
||||
isDimiss = true
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-335
@@ -1,335 +0,0 @@
|
||||
//
|
||||
// SSAlertCommonView.swift
|
||||
// SSAlert
|
||||
//
|
||||
// Created by yangsq on 2021/8/13.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
public extension SSAlertAction {
|
||||
enum Style {
|
||||
case alert
|
||||
case actionSheet
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class SSAlertAction: NSObject {
|
||||
public var title: String
|
||||
public var titleFont = UIFont.systemFont(ofSize: 16)
|
||||
public var titleColor: UIColor? = nil
|
||||
public var height: CGFloat = 55
|
||||
public var backgroundColor: UIColor? = nil
|
||||
public private(set) var style: Style
|
||||
private var addAction:(() -> Void)? = nil
|
||||
public init(style: Style, title: String, addAction: (() -> Void)? = nil) {
|
||||
self.style = style
|
||||
self.title = title
|
||||
self.addAction = addAction
|
||||
if style == .alert {
|
||||
height = 50
|
||||
}
|
||||
super.init()
|
||||
}
|
||||
func triggerAction() {
|
||||
if let addAction = addAction {
|
||||
addAction()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
extension SSAlertCommonView {
|
||||
public static var alertMaxWidth = UIScreen.main.bounds.width * 0.7
|
||||
public static var actionSheetMaxWidth = UIScreen.main.bounds.width
|
||||
public static var buttonSpace: CGFloat = 0.5
|
||||
|
||||
public static var safeAreaBottomMargin: CGFloat {
|
||||
if #available(iOS 11.0, *) {
|
||||
return UIApplication.shared.keyWindow?.safeAreaInsets.bottom ?? 0
|
||||
}
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
public class SSAlertCommonView: UIView {
|
||||
|
||||
public lazy var titleLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.font = UIFont.systemFont(ofSize: 16)
|
||||
label.numberOfLines = 0
|
||||
label.textAlignment = .center
|
||||
return label
|
||||
}()
|
||||
|
||||
public lazy var messageLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.font = UIFont.systemFont(ofSize: 14)
|
||||
label.numberOfLines = 0
|
||||
label.textAlignment = .center
|
||||
return label
|
||||
}()
|
||||
|
||||
public lazy var containerView: UIView = {
|
||||
let view = UIView()
|
||||
return view
|
||||
}()
|
||||
|
||||
public lazy var buttonView: UIView = {
|
||||
let view = UIView()
|
||||
return view
|
||||
}()
|
||||
|
||||
public var lineColor: UIColor? = nil {
|
||||
didSet {
|
||||
lineArray.forEach { lineView in
|
||||
lineView.backgroundColor = lineColor
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public var lineEdgeInsets: UIEdgeInsets = .zero {
|
||||
didSet {
|
||||
refreshFrame()
|
||||
}
|
||||
}
|
||||
public private(set) var style: SSAlertAction.Style
|
||||
public private(set) var actions: [SSAlertAction]
|
||||
public private(set) var title: String?
|
||||
public private(set) var message: String?
|
||||
|
||||
private var buttonArray: [UIButton] = []
|
||||
private var lineArray: [UIView] = []
|
||||
private var hasText = false
|
||||
|
||||
|
||||
public init(title: String? = nil, message: String? = nil, style: SSAlertAction.Style, actions:[SSAlertAction] = []) {
|
||||
self.title = title
|
||||
self.message = message
|
||||
self.style = style
|
||||
self.actions = actions
|
||||
super.init(frame: .zero)
|
||||
makeUI()
|
||||
}
|
||||
|
||||
private func makeUI() {
|
||||
addSubview(containerView)
|
||||
if let title = title, !title.isEmpty {
|
||||
titleLabel.text = title
|
||||
containerView.addSubview(titleLabel)
|
||||
hasText = true
|
||||
}
|
||||
if let message = message, !message.isEmpty {
|
||||
messageLabel.text = message
|
||||
containerView.addSubview(messageLabel)
|
||||
hasText = true
|
||||
}
|
||||
|
||||
if actions.count > 0 {
|
||||
addSubview(buttonView)
|
||||
actions.forEach { action in
|
||||
let button = UIButton(type: .system)
|
||||
button.setTitle(action.title, for: .normal)
|
||||
button.backgroundColor = backgroundColor
|
||||
if let backgroundColor = action.backgroundColor {
|
||||
button.backgroundColor = backgroundColor
|
||||
}
|
||||
button.titleLabel?.font = action.titleFont
|
||||
button.setTitleColor(action.titleColor, for: .normal)
|
||||
button.addTarget(self, action: #selector(buttonAction(button:)), for: .touchUpInside)
|
||||
buttonView.addSubview(button)
|
||||
buttonArray.append(button)
|
||||
var isAddLineView = false
|
||||
if style == .actionSheet {
|
||||
if hasText {
|
||||
isAddLineView = true
|
||||
} else {
|
||||
if actions[actions.count - 1] != action {
|
||||
isAddLineView = true
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if actions.count > 2 {
|
||||
if hasText {
|
||||
isAddLineView = true
|
||||
} else {
|
||||
if actions[actions.count - 1] != action {
|
||||
isAddLineView = true
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if actions.count == 1 {
|
||||
if hasText {
|
||||
isAddLineView = true
|
||||
}
|
||||
} else {
|
||||
if hasText {
|
||||
isAddLineView = true
|
||||
} else {
|
||||
if actions[actions.count - 1] != action {
|
||||
isAddLineView = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
if isAddLineView {
|
||||
let linView = UIView()
|
||||
linView.backgroundColor = UIColor.lightGray.withAlphaComponent(0.5)
|
||||
buttonView.addSubview(linView)
|
||||
lineArray.append(linView)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
refreshFrame()
|
||||
}
|
||||
|
||||
private func refreshFrame() {
|
||||
let space: CGFloat = 15
|
||||
let viewMaxWidth = style == .alert ? SSAlertCommonView.alertMaxWidth : SSAlertCommonView.actionSheetMaxWidth
|
||||
var height: CGFloat = 0
|
||||
let width = viewMaxWidth
|
||||
let containerWidth = viewMaxWidth - space * 2
|
||||
var originY: CGFloat = 0
|
||||
var cotainerOriginY: CGFloat = 0
|
||||
if titleLabel.superview != nil {
|
||||
let titleSize = titleLabel.sizeThatFits(CGSize(width: containerWidth, height: CGFloat(MAXFLOAT)))
|
||||
titleLabel.ss_origin = CGPoint(x: 0, y: cotainerOriginY)
|
||||
titleLabel.ss_size = CGSize(width: containerWidth, height: titleSize.height)
|
||||
height += (titleSize.height + space)
|
||||
cotainerOriginY += (space + titleSize.height)
|
||||
originY = space
|
||||
}
|
||||
|
||||
if messageLabel.superview != nil {
|
||||
let messageSize = messageLabel.sizeThatFits(CGSize(width: containerWidth, height: CGFloat(MAXFLOAT)))
|
||||
messageLabel.ss_origin = CGPoint(x: 0, y: cotainerOriginY)
|
||||
messageLabel.ss_size = CGSize(width: containerWidth, height: messageSize.height)
|
||||
height += (messageSize.height + space)
|
||||
cotainerOriginY += (space + messageSize.height)
|
||||
originY = space
|
||||
}
|
||||
|
||||
containerView.ss_origin = CGPoint(x: space, y: originY)
|
||||
containerView.ss_size = CGSize(width: containerWidth, height: height)
|
||||
originY += height
|
||||
|
||||
if !buttonArray.isEmpty {
|
||||
let buttonSpace: CGFloat = SSAlertCommonView.buttonSpace
|
||||
var buttonTotalHeight: CGFloat = 0
|
||||
var buttonTopY: CGFloat = 0
|
||||
if style == .actionSheet {
|
||||
for index in 0..<buttonArray.count {
|
||||
let action = actions[index]
|
||||
let button = buttonArray[index]
|
||||
if lineArray.count == buttonArray.count {
|
||||
let lineView = lineArray[index]
|
||||
lineView.frame = CGRect(x: lineEdgeInsets.left, y: buttonTopY, width: width - lineEdgeInsets.left - lineEdgeInsets.right, height: buttonSpace)
|
||||
buttonTopY += buttonSpace
|
||||
}
|
||||
|
||||
if lineArray.count == buttonArray.count - 1 {
|
||||
if index < lineArray.count {
|
||||
let lineView = lineArray[index]
|
||||
lineView.frame = CGRect(x: lineEdgeInsets.left, y: buttonTopY + action.height, width: width - lineEdgeInsets.left - lineEdgeInsets.right, height: buttonSpace)
|
||||
buttonTopY += buttonSpace
|
||||
}
|
||||
}
|
||||
|
||||
if index == buttonArray.count - 1 {
|
||||
button.ss_size = CGSize(width: width, height: action.height + SSAlertCommonView.safeAreaBottomMargin)
|
||||
button.titleEdgeInsets = UIEdgeInsets(top: -SSAlertCommonView.safeAreaBottomMargin, left: 0, bottom: 0, right: 0)
|
||||
} else {
|
||||
button.ss_size = CGSize(width: width, height: action.height)
|
||||
}
|
||||
button.ss_origin = CGPoint(x: 0, y: buttonTopY)
|
||||
buttonTopY += button.ss_h
|
||||
}
|
||||
buttonTotalHeight = buttonTopY
|
||||
}
|
||||
|
||||
if style == .alert {
|
||||
if buttonArray.count > 2 {
|
||||
buttonArray.forEach { button in
|
||||
let index = buttonArray.firstIndex(of: button)
|
||||
let action = actions[index!]
|
||||
|
||||
if lineArray.count == buttonArray.count {
|
||||
let lineView = lineArray[index!]
|
||||
lineView.frame = CGRect(x: lineEdgeInsets.left, y: buttonTopY, width: width - lineEdgeInsets.left - lineEdgeInsets.right, height: buttonSpace)
|
||||
buttonTopY += buttonSpace
|
||||
}
|
||||
if lineArray.count == buttonArray.count - 1 {
|
||||
if index! < lineArray.count {
|
||||
let lineView = lineArray[index!]
|
||||
lineView.frame = CGRect(x: lineEdgeInsets.left, y: buttonTopY + action.height, width: width - lineEdgeInsets.left - lineEdgeInsets.right, height: buttonSpace)
|
||||
buttonTopY += buttonSpace
|
||||
}
|
||||
}
|
||||
|
||||
button.ss_origin = CGPoint(x: 0, y: buttonTopY)
|
||||
button.ss_size = CGSize(width: width, height: action.height)
|
||||
buttonTopY += action.height
|
||||
}
|
||||
buttonTotalHeight = buttonTopY
|
||||
} else {
|
||||
if buttonArray.count == 1 {
|
||||
let button = buttonArray.first!
|
||||
let action = actions.first!
|
||||
if lineArray.count > 0 {
|
||||
let lineView = lineArray.first!
|
||||
lineView.frame = CGRect(x: lineEdgeInsets.left, y: buttonTopY, width: width - lineEdgeInsets.left - lineEdgeInsets.right, height: buttonSpace)
|
||||
buttonTopY += buttonSpace
|
||||
}
|
||||
button.ss_origin = CGPoint(x: 0, y: buttonTopY)
|
||||
button.ss_size = CGSize(width: width, height: action.height)
|
||||
buttonTotalHeight = buttonTopY
|
||||
} else {
|
||||
let button1 = buttonArray.first!
|
||||
let button2 = buttonArray.last!
|
||||
let action1 = actions.first!
|
||||
let action2 = actions.last!
|
||||
let maxButtonHeight = max(action1.height, action2.height)
|
||||
if hasText {
|
||||
let lineView1 = lineArray.first!
|
||||
lineView1.frame = CGRect(x: 0, y: buttonTopY, width: width, height: buttonSpace)
|
||||
buttonTopY += buttonSpace
|
||||
}
|
||||
|
||||
button1.ss_origin = CGPoint(x: 0, y: buttonTopY)
|
||||
button1.ss_size = CGSize(width: width / 2 - buttonSpace / 2, height: maxButtonHeight)
|
||||
|
||||
|
||||
button2.ss_origin = CGPoint(x: button1.frame.maxX + buttonSpace, y: buttonTopY)
|
||||
button2.ss_size = CGSize(width: width / 2 - buttonSpace / 2, height: maxButtonHeight)
|
||||
|
||||
let lineView2 = lineArray.last!
|
||||
lineView2.frame = CGRect(x: button1.frame.maxX, y: buttonSpace, width: buttonSpace, height: button1.ss_h)
|
||||
buttonTopY += maxButtonHeight
|
||||
}
|
||||
buttonTotalHeight = buttonTopY
|
||||
}
|
||||
}
|
||||
|
||||
buttonView.ss_origin = CGPoint(x: 0, y: originY)
|
||||
buttonView.ss_size = CGSize(width: width, height: buttonTotalHeight)
|
||||
height += buttonTotalHeight + (originY > 0 ? space : 0)
|
||||
|
||||
}
|
||||
self.ss_size = CGSize(width: width, height: height)
|
||||
}
|
||||
|
||||
@objc private func buttonAction(button: UIButton) {
|
||||
let index = buttonArray.firstIndex(of: button)
|
||||
let action = actions[index!]
|
||||
action.triggerAction()
|
||||
}
|
||||
|
||||
required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
}
|
||||
-223
@@ -1,223 +0,0 @@
|
||||
//
|
||||
// SSAlertDefaultAnmation.swift
|
||||
// SSAlert
|
||||
//
|
||||
// Created by yangsq on 2021/8/13.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
extension SSAlertDefaultAnmation {
|
||||
public enum State {
|
||||
case fromTop, fromLeft, fromBottom, fromRight, fromCenter
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
open class SSAlertDefaultAnmation: NSObject {
|
||||
public var state: State
|
||||
/// 中心点偏移原来位置位移
|
||||
public var centerOffset: CGPoint = .zero
|
||||
/// 动画的时间
|
||||
public var duration: TimeInterval = 0.3
|
||||
/// 展示动画是否开启弹簧效果
|
||||
public var isSpringShowAnimation: Bool = true
|
||||
/// 滑动消失距离触发
|
||||
public var panDimissProgress: CGFloat = 0.4
|
||||
public var usingSpringWithDamping: CGFloat = 0.8
|
||||
public var initialSpringVelocity: CGFloat = 0.5
|
||||
private weak var animationView: SSAlertView? = nil
|
||||
public init(state: State) {
|
||||
self.state = state
|
||||
super.init()
|
||||
}
|
||||
|
||||
private func animation(animated: Bool, isSpringAnimation: Bool = true, animations: @escaping (() -> Void), completion: ((Bool) -> Void)? = nil) {
|
||||
if animated {
|
||||
if isSpringAnimation {
|
||||
UIView.animate(withDuration: animationDuration(),
|
||||
delay: 0,
|
||||
usingSpringWithDamping: usingSpringWithDamping,
|
||||
initialSpringVelocity: initialSpringVelocity,
|
||||
options: [],
|
||||
animations: animations,
|
||||
completion: completion)
|
||||
} else {
|
||||
UIView.animate(withDuration: animationDuration(),
|
||||
animations: animations,
|
||||
completion: completion)
|
||||
}
|
||||
|
||||
} else {
|
||||
animations()
|
||||
if let completion = completion {
|
||||
completion(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public func setCenterOffset(center offset: CGPoint, duration: TimeInterval = 0.3, animated: Bool = true, completion:((Bool) -> Void)?) {
|
||||
self.duration = duration
|
||||
self.animation(animated: animated, animations: {
|
||||
self.animationView?.transform = CGAffineTransform.init(translationX: offset.x, y: offset.y)
|
||||
}, completion: completion)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
extension SSAlertDefaultAnmation: SSAlertAnimation {
|
||||
public func animationDuration() -> TimeInterval {
|
||||
return duration
|
||||
}
|
||||
|
||||
public func showAnimationOfAnimationView(animationView: SSAlertView, viewSize: CGSize, animated: Bool, completion: (((Bool) -> Void))?) {
|
||||
guard let animationSuperView = animationView.superview else {
|
||||
return
|
||||
}
|
||||
self.animationView = animationView
|
||||
animationView.alpha = 1
|
||||
animationView.ss_size = viewSize
|
||||
switch state {
|
||||
case .fromBottom:
|
||||
animationView.ss_centerX = animationSuperView.ss_w / 2 + centerOffset.x
|
||||
animationView.ss_y = animationSuperView.ss_h
|
||||
animation(animated: animated, isSpringAnimation: isSpringShowAnimation, animations: { [weak self] in guard let self = self else { return }
|
||||
animationView.transform = CGAffineTransform.init(translationX: 0, y: -animationView.ss_h + self.centerOffset.y)
|
||||
animationView.backgroundMask?.alpha = 1;
|
||||
}, completion: completion)
|
||||
|
||||
case .fromTop:
|
||||
animationView.ss_centerX = animationSuperView.ss_w / 2 + centerOffset.x
|
||||
animationView.ss_y = -animationView.ss_h
|
||||
animation(animated: animated, isSpringAnimation: isSpringShowAnimation, animations: { [weak self] in guard let self = self else { return }
|
||||
animationView.transform = CGAffineTransform.init(translationX: 0, y: animationView.ss_h + self.centerOffset.y)
|
||||
animationView.backgroundMask?.alpha = 1;
|
||||
}, completion: completion)
|
||||
|
||||
case .fromLeft:
|
||||
animationView.ss_centerY = animationSuperView.ss_h / 2 + centerOffset.y
|
||||
animationView.ss_x = -animationView.ss_w
|
||||
animation(animated: animated, isSpringAnimation: isSpringShowAnimation, animations: {
|
||||
animationView.transform = CGAffineTransform.init(translationX: animationView.ss_w + self.centerOffset.x, y: 0)
|
||||
animationView.backgroundMask?.alpha = 1;
|
||||
}, completion: completion)
|
||||
|
||||
case .fromRight:
|
||||
animationView.ss_centerY = animationSuperView.ss_h / 2 + centerOffset.y
|
||||
animationView.ss_x = animationSuperView.ss_w
|
||||
animation(animated: animated, isSpringAnimation: isSpringShowAnimation, animations: {
|
||||
animationView.transform = CGAffineTransform.init(translationX: -animationView.ss_w + self.centerOffset.x, y: 0)
|
||||
animationView.backgroundMask?.alpha = 1;
|
||||
}, completion: completion)
|
||||
|
||||
case .fromCenter:
|
||||
animationView.ss_centerX = animationSuperView.ss_w / 2 + centerOffset.x
|
||||
animationView.ss_centerY = animationSuperView.ss_h / 2 + centerOffset.y
|
||||
animationView.transform = CGAffineTransform.init(scaleX: 1.5, y: 1.5)
|
||||
animationView.alpha = 0
|
||||
animation(animated: animated, isSpringAnimation: isSpringShowAnimation, animations: {
|
||||
animationView.alpha = 1
|
||||
animationView.transform = CGAffineTransform.identity
|
||||
animationView.backgroundMask?.alpha = 1;
|
||||
}, completion: completion)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public func hideAnimationOfAnimationView(animationView: SSAlertView, viewSize: CGSize, animated: Bool, completion: (((Bool) -> Bool))?) {
|
||||
self.animationView = animationView
|
||||
animation(animated: animated, isSpringAnimation: false, animations: {
|
||||
if self.state == .fromCenter {
|
||||
animationView.alpha = 0
|
||||
} else {
|
||||
animationView.transform = CGAffineTransform.identity
|
||||
}
|
||||
animationView.backgroundMask?.alpha = 0
|
||||
}, completion: {
|
||||
finished in
|
||||
var isCancel = false
|
||||
if let completion = completion {
|
||||
isCancel = completion(finished)
|
||||
}
|
||||
if !isCancel {
|
||||
animationView.removeFromSuperview()
|
||||
animationView.backgroundMask?.removeFromSuperview()
|
||||
self.animationView = nil
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
public func refreshAnimationOfAnimationView(animationView: SSAlertView, viewSize: CGSize, animated: Bool, completion: (((Bool) -> Void))?) {
|
||||
guard let animationSuperView = animationView.superview else {
|
||||
return
|
||||
}
|
||||
self.animationView = animationView
|
||||
animationView.alpha = 1
|
||||
animationView.ss_size = viewSize
|
||||
switch state {
|
||||
case .fromBottom:
|
||||
animationView.ss_centerX = animationSuperView.ss_w / 2.0 + centerOffset.x
|
||||
animation(animated: animated, animations: {
|
||||
animationView.ss_y = animationSuperView.ss_h - viewSize.height + self.centerOffset.y
|
||||
}, completion: completion)
|
||||
|
||||
case .fromTop:
|
||||
animationView.ss_centerX = animationSuperView.ss_w / 2.0 + centerOffset.x
|
||||
animation(animated: animated, animations: {
|
||||
animationView.ss_y = self.centerOffset.y
|
||||
}, completion: completion)
|
||||
|
||||
case .fromLeft:
|
||||
animationView.ss_centerY = animationSuperView.ss_h / 2.0 + centerOffset.y
|
||||
animation(animated: animated, animations: {
|
||||
animationView.ss_x = self.centerOffset.x
|
||||
}, completion: completion)
|
||||
|
||||
case .fromRight:
|
||||
animationView.ss_centerY = animationSuperView.ss_h / 2.0 + centerOffset.y
|
||||
animation(animated: animated, animations: {
|
||||
animationView.ss_x = animationSuperView.ss_w - viewSize.width + self.centerOffset.x
|
||||
}, completion: completion)
|
||||
|
||||
case .fromCenter:
|
||||
animationView.alpha = 0
|
||||
animationView.ss_centerX = animationSuperView.ss_w / 2 + centerOffset.x
|
||||
animationView.ss_centerY = animationSuperView.ss_h / 2 + centerOffset.y
|
||||
animationView.transform = CGAffineTransform.init(scaleX: 1.5, y: 1.5)
|
||||
animation(animated: animated, animations: {
|
||||
animationView.alpha = 1
|
||||
animationView.transform = CGAffineTransform.identity
|
||||
}, completion: completion)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public func panToDimissTransilatePoint(point: CGPoint, panViewFrame: CGRect) -> (PanProgress, PanCancelProgress) {
|
||||
var progress: CGFloat = 0
|
||||
switch state {
|
||||
case .fromTop:
|
||||
if point.y <= 0 {
|
||||
progress = abs(point.y / panViewFrame.height)
|
||||
}
|
||||
case .fromBottom:
|
||||
if point.y >= 0 {
|
||||
progress = abs(point.y / panViewFrame.height)
|
||||
}
|
||||
|
||||
case .fromLeft:
|
||||
if point.x <= 0 {
|
||||
progress = abs(point.x / panViewFrame.width)
|
||||
}
|
||||
|
||||
case .fromRight:
|
||||
if point.x >= 0 {
|
||||
progress = abs(point.x / panViewFrame.width)
|
||||
}
|
||||
case .fromCenter:
|
||||
progress = abs(point.y / panViewFrame.height)
|
||||
}
|
||||
return (progress, panDimissProgress)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-222
@@ -1,222 +0,0 @@
|
||||
//
|
||||
// SSAlertPresentAnimation.swift
|
||||
// SSAlert
|
||||
//
|
||||
// Created by yangsq on 2021/8/13.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
typealias PanDimissAnimation = (CGPoint, CGRect) -> (PanProgress, PanCancelProgress)
|
||||
typealias DimissAnimation = (DimissIsCancel) -> Void
|
||||
|
||||
class SSCustomInteractiveAnimation: UIPercentDrivenInteractiveTransition {
|
||||
private(set) var panGestureRecognizer: UIPanGestureRecognizer
|
||||
private var panDimissAnimation: PanDimissAnimation?
|
||||
private var dimissAnimation: DimissAnimation?
|
||||
|
||||
init(panGestureRecognizer: UIPanGestureRecognizer, panDimissAnimation: PanDimissAnimation?, dimissAnimation: DimissAnimation?) {
|
||||
self.panGestureRecognizer = panGestureRecognizer
|
||||
self.panDimissAnimation = panDimissAnimation
|
||||
self.dimissAnimation = dimissAnimation
|
||||
super.init()
|
||||
self.completionSpeed = 0.2
|
||||
panGestureRecognizer.addTarget(self, action: #selector(panAction(pan:)))
|
||||
}
|
||||
|
||||
@objc private func panAction(pan: UIPanGestureRecognizer) {
|
||||
guard let view = pan.view else {
|
||||
return
|
||||
}
|
||||
let poin = pan.translation(in: view)
|
||||
var progress: CGFloat = 0
|
||||
var cancelProgress: CGFloat = 0.4
|
||||
if let panDimissAnimation = self.panDimissAnimation {
|
||||
let (tProgress, tCancelProgress) = panDimissAnimation(poin, pan.view!.frame)
|
||||
progress = tProgress
|
||||
cancelProgress = tCancelProgress
|
||||
}
|
||||
switch pan.state {
|
||||
case .began:
|
||||
pan.setTranslation(CGPoint(x: 0, y: 0), in: view)
|
||||
case .changed:
|
||||
update(progress)
|
||||
case .cancelled:
|
||||
cancel()
|
||||
case .ended:
|
||||
if progress > cancelProgress {
|
||||
finish()
|
||||
dimissAnimation?(false)
|
||||
} else {
|
||||
cancel()
|
||||
dimissAnimation?(true)
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
override func startInteractiveTransition(_ transitionContext: UIViewControllerContextTransitioning) {
|
||||
super.startInteractiveTransition(transitionContext)
|
||||
}
|
||||
|
||||
deinit {
|
||||
panGestureRecognizer.removeTarget(self, action: #selector(panAction(pan:)))
|
||||
}
|
||||
}
|
||||
|
||||
class SSAlertPresentAnimation: NSObject {
|
||||
typealias AnimationCompletion = () -> Void
|
||||
var duration: TimeInterval = 0.35
|
||||
private var showAnimation: AnimationCompletion? = nil
|
||||
private var hideAnimation: AnimationCompletion? = nil
|
||||
private var endCompletion: AnimationCompletion? = nil
|
||||
private var panDimissAnimation: PanDimissAnimation? = nil
|
||||
private var dimissAnimation: DimissAnimation? = nil
|
||||
|
||||
private var transitionContext: UIViewControllerContextTransitioning?
|
||||
private weak var nav: UINavigationController?
|
||||
private weak var animationView: UIView?
|
||||
private var panGestureRecognizer: UIPanGestureRecognizer?
|
||||
|
||||
init(navigationViewController: UINavigationController, animationView: UIView, canPanDimiss: Bool = true) {
|
||||
self.nav = navigationViewController
|
||||
self.animationView = animationView
|
||||
super.init()
|
||||
if canPanDimiss {
|
||||
let pan = UIPanGestureRecognizer(target: self, action: #selector(panAction(pan:)))
|
||||
pan.maximumNumberOfTouches = 1
|
||||
animationView.addGestureRecognizer(pan)
|
||||
}
|
||||
}
|
||||
|
||||
@objc func panAction(pan: UIPanGestureRecognizer) {
|
||||
if pan.state == .began {
|
||||
panGestureRecognizer = pan
|
||||
nav?.viewControllers[0].dismiss(animated: true, completion: {
|
||||
[weak self] in guard let self = self else { return }
|
||||
self.panGestureRecognizer = nil
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
func animationCompletion(showAnimation: AnimationCompletion? = nil,
|
||||
hideAnimation: AnimationCompletion? = nil,
|
||||
endCompletion: AnimationCompletion? = nil,
|
||||
panDimissAnimation: PanDimissAnimation? = nil,
|
||||
dimissAnimation: DimissAnimation? = nil) {
|
||||
if showAnimation != nil {
|
||||
self.showAnimation = showAnimation
|
||||
}
|
||||
if hideAnimation != nil {
|
||||
self.hideAnimation = hideAnimation
|
||||
}
|
||||
|
||||
if endCompletion != nil {
|
||||
self.endCompletion = endCompletion
|
||||
}
|
||||
if panDimissAnimation != nil {
|
||||
self.panDimissAnimation = panDimissAnimation
|
||||
}
|
||||
if panDimissAnimation != nil {
|
||||
self.panDimissAnimation = panDimissAnimation
|
||||
}
|
||||
|
||||
if dimissAnimation != nil {
|
||||
self.dimissAnimation = dimissAnimation
|
||||
}
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
func setCompleteTransitionIsHide(isHide: Bool) -> Bool {
|
||||
if let transitionContext = transitionContext {
|
||||
let isCancelled = transitionContext.transitionWasCancelled
|
||||
if !isCancelled {
|
||||
if isHide {
|
||||
transitionContext.containerView.subviews.forEach { subView in
|
||||
subView.removeFromSuperview()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
transitionContext.completeTransition(!isCancelled)
|
||||
return isCancelled
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
extension SSAlertPresentAnimation: UIViewControllerTransitioningDelegate {
|
||||
func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
|
||||
return self
|
||||
}
|
||||
func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
|
||||
return self
|
||||
}
|
||||
|
||||
func interactionControllerForDismissal(using animator: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? {
|
||||
if self.panGestureRecognizer != nil {
|
||||
return SSCustomInteractiveAnimation(panGestureRecognizer: self.panGestureRecognizer!, panDimissAnimation: self.panDimissAnimation, dimissAnimation: dimissAnimation)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func interactionControllerForPresentation(using animator: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? {
|
||||
if self.panGestureRecognizer != nil {
|
||||
|
||||
return SSCustomInteractiveAnimation(panGestureRecognizer: self.panGestureRecognizer!, panDimissAnimation: self.panDimissAnimation, dimissAnimation: dimissAnimation)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
extension SSAlertPresentAnimation: UIViewControllerAnimatedTransitioning {
|
||||
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
|
||||
return self.duration
|
||||
}
|
||||
|
||||
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
|
||||
self.transitionContext = transitionContext
|
||||
let fromVC = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from)
|
||||
let toVC = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to)
|
||||
let containerView = transitionContext.containerView
|
||||
|
||||
if let fromVC = fromVC, let toVC = toVC {
|
||||
var fromView = fromVC.view
|
||||
var toView = toVC.view
|
||||
if transitionContext.responds(to: #selector(UIViewControllerContextTransitioning.view(forKey:))) {
|
||||
fromView = transitionContext.view(forKey: UITransitionContextViewKey.from)
|
||||
toView = transitionContext.view(forKey: UITransitionContextViewKey.to)
|
||||
}
|
||||
let isPresenting = toVC.presentingViewController == fromVC
|
||||
if isPresenting {
|
||||
if let toView = toView {
|
||||
containerView.addSubview(toView)
|
||||
|
||||
}
|
||||
if let showAnimation = self.showAnimation {
|
||||
showAnimation()
|
||||
}
|
||||
} else {
|
||||
if let toView = toView, let fromView = fromView {
|
||||
containerView.insertSubview(toView, belowSubview: fromView)
|
||||
|
||||
}
|
||||
if let hideAnimation = self.hideAnimation {
|
||||
hideAnimation()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
func animationEnded(_ transitionCompleted: Bool) {
|
||||
if let endCompletion = self.endCompletion, transitionCompleted, let transitionContext = transitionContext, transitionContext.isInteractive {
|
||||
endCompletion()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,312 +0,0 @@
|
||||
//
|
||||
// SSAlertView.swift
|
||||
// SSAlert
|
||||
//
|
||||
// Created by yangsq on 2021/8/13.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
extension SSAlertView {
|
||||
public enum BackgroundMaskType {
|
||||
/// 默认没有遮罩
|
||||
case none
|
||||
|
||||
/// 透明遮罩
|
||||
case clear
|
||||
|
||||
/// 黑色遮罩
|
||||
case black
|
||||
}
|
||||
}
|
||||
|
||||
fileprivate extension SSAlertView {
|
||||
typealias HideCompletion = () -> Void
|
||||
class HideCompletionData: NSObject {
|
||||
var completion: HideCompletion?
|
||||
}
|
||||
}
|
||||
|
||||
open class SSAlertView: UIView {
|
||||
/// customView 的内间距
|
||||
public var customEdgeInsets: UIEdgeInsets = .zero {
|
||||
didSet {
|
||||
setNeedsDisplay()
|
||||
layoutIfNeeded()
|
||||
}
|
||||
}
|
||||
|
||||
/// 展示和隐藏动画设置
|
||||
public var animation: SSAlertAnimation
|
||||
|
||||
///遮罩视图
|
||||
public private(set) var backgroundMask: UIView?
|
||||
|
||||
/// 是否点击遮罩隐藏,默认点击会隐藏
|
||||
public var canTouchMaskHide: Bool = true
|
||||
/// 点击遮罩隐藏是否开启动画,默认nil,跟随展示的时候设置是否开启动画
|
||||
public var isTouchMaskHideAnimated: Bool? = nil
|
||||
|
||||
/// 模态视图弹窗才有
|
||||
public private(set) var navigationController: UINavigationController?
|
||||
|
||||
public var isHideStatusBar = false {
|
||||
didSet {
|
||||
self.toViewContrller?.isHideStatusBar = isHideStatusBar
|
||||
}
|
||||
}
|
||||
public var isShowNavWhenViewWillDisappear = true {
|
||||
didSet {
|
||||
self.toViewContrller?.isShowNavWhenViewWillDisappear = isShowNavWhenViewWillDisappear
|
||||
}
|
||||
}
|
||||
private var onView: UIView
|
||||
public private(set) var maskType: BackgroundMaskType
|
||||
public private(set) var customView: UIView
|
||||
private weak var fromViewController: UIViewController?
|
||||
private weak var toViewContrller: SSAlertAnimationController?
|
||||
private var presentAnimation: SSAlertPresentAnimation?
|
||||
private var canPanDimiss: Bool = false
|
||||
private var hideCompletions = [HideCompletionData]()
|
||||
/// 初始化(普通视图弹窗)
|
||||
public init(customView: UIView,
|
||||
onView: UIView,
|
||||
animation: SSAlertAnimation = SSAlertDefaultAnmation(state: .fromCenter),
|
||||
maskType: BackgroundMaskType = .black) {
|
||||
self.animation = animation
|
||||
self.onView = onView
|
||||
self.maskType = maskType
|
||||
self.customView = customView
|
||||
super.init(frame: .zero)
|
||||
makeUI()
|
||||
}
|
||||
|
||||
/// 初始化(模态视图弹窗),canPanDimiss: 是否支持拖拽消息
|
||||
public convenience init(customView: UIView,
|
||||
fromViewController: UIViewController,
|
||||
animation: SSAlertAnimation = SSAlertDefaultAnmation(state: .fromCenter),
|
||||
navigationControllerClass: UINavigationController.Type = UINavigationController.self,
|
||||
maskType: BackgroundMaskType = .black,
|
||||
canPanDimiss: Bool = true) {
|
||||
let animaionVC = SSAlertAnimationController()
|
||||
self.init(customView: customView, onView: animaionVC.view, animation: animation, maskType: maskType)
|
||||
animaionVC.isHideStatusBar = self.isHideStatusBar
|
||||
if let superViewController = superViewController(view: customView), superViewController != animaionVC {
|
||||
animaionVC.addChild(superViewController)
|
||||
superViewController.didMove(toParent: animaionVC)
|
||||
}
|
||||
self.canPanDimiss = canPanDimiss
|
||||
self.fromViewController = fromViewController
|
||||
let nav = navigationControllerClass.init(rootViewController: animaionVC)
|
||||
nav.modalPresentationStyle = .custom
|
||||
self.navigationController = nav
|
||||
self.canPanDimiss = canPanDimiss
|
||||
let animation = SSAlertPresentAnimation(navigationViewController: nav, animationView: customView, canPanDimiss: canPanDimiss)
|
||||
self.navigationController!.transitioningDelegate = animation
|
||||
self.navigationController!.modalPresentationCapturesStatusBarAppearance = true
|
||||
self.presentAnimation = animation
|
||||
self.toViewContrller = animaionVC
|
||||
|
||||
}
|
||||
|
||||
open override func layoutSubviews() {
|
||||
super.layoutSubviews()
|
||||
backgroundMask?.frame = CGRect(x: 0, y: 0, width: onView.ss_w, height: onView.ss_h)
|
||||
customView.ss_x = customEdgeInsets.left
|
||||
customView.ss_y = customEdgeInsets.top
|
||||
customView.ss_w = frame.width - customEdgeInsets.left - customEdgeInsets.right
|
||||
customView.ss_h = frame.height - customEdgeInsets.top - customEdgeInsets.bottom
|
||||
}
|
||||
|
||||
|
||||
private func makeUI() {
|
||||
if maskType != .none {
|
||||
let backgroundMask = UIButton()
|
||||
backgroundMask.alpha = 0
|
||||
onView.addSubview(backgroundMask)
|
||||
backgroundMask.addTarget(self, action: #selector(backgroundMaskAction), for: .touchUpInside)
|
||||
self.backgroundMask = backgroundMask
|
||||
if maskType == .black {
|
||||
backgroundMask.backgroundColor = UIColor.black.withAlphaComponent(0.3)
|
||||
}
|
||||
}
|
||||
addSubview(customView)
|
||||
onView.addSubview(self)
|
||||
}
|
||||
/// 展示
|
||||
public func show(animated: Bool = true, completion: (() -> Void)? = nil) {
|
||||
if navigationController != nil {
|
||||
presentView(animated: animated, completion: completion)
|
||||
} else {
|
||||
showView(animated: animated, completion: completion)
|
||||
}
|
||||
}
|
||||
/// 隐藏
|
||||
public func hide(animated: Bool = true, completion: (() -> Void)? = nil) {
|
||||
if navigationController != nil {
|
||||
dimissView(animated: animated, completion: completion)
|
||||
} else {
|
||||
hideView(animated: animated, completion: completion)
|
||||
}
|
||||
}
|
||||
|
||||
/// 展示(普通视图弹窗)
|
||||
/// - Parameter animated: 是否动画
|
||||
private func showView(animated: Bool = true, completion: (() -> Void)? = nil) {
|
||||
isTouchMaskHideAnimated = animated
|
||||
var customSize = customView.systemLayoutSizeFitting(UIView.layoutFittingExpandedSize)
|
||||
if customView.ss_size != .zero {
|
||||
customSize = customView.ss_size
|
||||
}
|
||||
let size = CGSize(width: customSize.width + customEdgeInsets.left + customEdgeInsets.right, height: customSize.height + customEdgeInsets.top + customEdgeInsets.bottom)
|
||||
animation.showAnimationOfAnimationView(animationView: self, viewSize: size, animated: animated, completion: { _ in completion?() })
|
||||
}
|
||||
/// 隐藏(普通视图弹窗)
|
||||
/// - Parameter animated: 是否动画
|
||||
private func hideView(animated: Bool = true, completion: (() -> Void)? = nil) {
|
||||
var customSize = customView.systemLayoutSizeFitting(UIView.layoutFittingExpandedSize)
|
||||
if customView.ss_size != .zero {
|
||||
customSize = customView.ss_size
|
||||
}
|
||||
let size = CGSize(width: customSize.width + customEdgeInsets.left + customEdgeInsets.right, height: customSize.height + customEdgeInsets.top + customEdgeInsets.bottom)
|
||||
animation.hideAnimationOfAnimationView(animationView: self, viewSize: size, animated: animated) { [weak self] _ in guard let self = self else { return false }
|
||||
completion?()
|
||||
|
||||
self.hideCompletions.forEach { hideC in
|
||||
hideC.completion?()
|
||||
hideC.completion = nil
|
||||
self.hideCompletions.removeAll(where: {$0 == hideC})
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
}
|
||||
/// 展示(模态视图弹窗)
|
||||
/// - Parameter animated: 是否动画
|
||||
private func presentView(animated: Bool = true, completion: (() -> Void)? = nil) {
|
||||
isTouchMaskHideAnimated = animated
|
||||
var customSize = customView.systemLayoutSizeFitting(UIView.layoutFittingExpandedSize)
|
||||
if customView.ss_size != .zero {
|
||||
customSize = customView.ss_size
|
||||
}
|
||||
let size = CGSize(width: customSize.width + customEdgeInsets.left + customEdgeInsets.right, height: customSize.height + customEdgeInsets.top + customEdgeInsets.bottom)
|
||||
presentAnimation?.animationCompletion(showAnimation: {
|
||||
[weak self] in guard let self = self else { return }
|
||||
self.animation.showAnimationOfAnimationView(animationView: self, viewSize: size, animated: animated) { _ in
|
||||
self.presentAnimation?.setCompleteTransitionIsHide(isHide: false)
|
||||
completion?()
|
||||
}
|
||||
})
|
||||
self.presentAnimation?.duration = animation.animationDuration()
|
||||
///存在的问题: app当前显示的是弹窗界面,默认presnent出来的视图且modalPresentationStyle不是CurrentContext这这种,这个视图的presentingVC默认根控制器,例如存在tabbarVC的话就是tabbarVC,这个会造成一个问题:当这个视图dimiss的时候,会把所有的presentedVC都dimiss(其实调用dimiss的时候是调用当前视图的presentigngVC去dimiss,遵循随创建随释放)
|
||||
/// 这个通过设置 definesPresentationContext = true,modalPresentationStyle = UIModalPresentationOverCurrentContext,这样当前视图的presentigngVC为 self.navigationController,
|
||||
/// UIModalPresentationOverCurrentContext和 UIModalPresentationCurrentContext的区别是弹出的界面,前者不会把底部的视图stact移除,后者则会。
|
||||
self.navigationController?.definesPresentationContext = true
|
||||
self.navigationController?.modalPresentationStyle = .overCurrentContext
|
||||
self.fromViewController?.present(self.navigationController!, animated: true, completion: nil)
|
||||
if canPanDimiss {
|
||||
dimissViewDragToHideAnimation(animated: animated)
|
||||
}
|
||||
}
|
||||
/// 隐藏(模态视图弹窗)
|
||||
/// - Parameter animated: 是否动画
|
||||
private func dimissView(animated: Bool = true, completion: (() -> Void)? = nil) {
|
||||
var customSize = customView.systemLayoutSizeFitting(UIView.layoutFittingExpandedSize)
|
||||
if customView.ss_size != .zero {
|
||||
customSize = customView.ss_size
|
||||
}
|
||||
let size = CGSize(width: customSize.width + customEdgeInsets.left + customEdgeInsets.right, height: customSize.height + customEdgeInsets.top + customEdgeInsets.bottom)
|
||||
presentAnimation?.animationCompletion(hideAnimation: {
|
||||
[weak self] in guard let self = self else { return }
|
||||
self.animation.hideAnimationOfAnimationView(animationView: self, viewSize: size, animated: animated) { _ in
|
||||
return self.presentAnimation!.setCompleteTransitionIsHide(isHide: true)
|
||||
}
|
||||
})
|
||||
self.presentAnimation?.duration = animation.animationDuration()
|
||||
self.toViewContrller?.dismiss(animated: animated, completion: {
|
||||
[weak self] in guard let self = self else { return }
|
||||
completion?()
|
||||
self.hideCompletions.forEach { hideC in
|
||||
hideC.completion?()
|
||||
hideC.completion = nil
|
||||
self.hideCompletions.removeAll(where: {$0 == hideC})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private func dimissViewDragToHideAnimation(animated: Bool) {
|
||||
var customSize = customView.systemLayoutSizeFitting(UIView.layoutFittingExpandedSize)
|
||||
if customView.ss_size != .zero {
|
||||
customSize = customView.ss_size
|
||||
}
|
||||
let size = CGSize(width: customSize.width + customEdgeInsets.left + customEdgeInsets.right, height: customSize.height + customEdgeInsets.top + customEdgeInsets.bottom)
|
||||
presentAnimation?.animationCompletion(hideAnimation: {
|
||||
[weak self] in guard let self = self else { return }
|
||||
self.animation.hideAnimationOfAnimationView(animationView: self, viewSize: size, animated: animated) { _ in
|
||||
return self.presentAnimation!.setCompleteTransitionIsHide(isHide: true)
|
||||
}
|
||||
},endCompletion: {
|
||||
[weak self] in guard let self = self else { return }
|
||||
self.hideCompletions.forEach { hideC in
|
||||
hideC.completion?()
|
||||
hideC.completion = nil
|
||||
self.hideCompletions.removeAll(where: {$0 == hideC})
|
||||
}
|
||||
}, panDimissAnimation: { [weak self] point, frame in
|
||||
guard let self = self else { return (0, 0.4) }
|
||||
return self.animation.panToDimissTransilatePoint(point: point, panViewFrame: frame)
|
||||
}, dimissAnimation: { [weak self] isCancel in guard let self = self else { return }
|
||||
self.toViewContrller?.isDimiss = !isCancel
|
||||
})
|
||||
self.presentAnimation?.duration = animation.animationDuration()
|
||||
}
|
||||
|
||||
public func refreshFrame(animated: Bool = true) {
|
||||
var customSize = customView.systemLayoutSizeFitting(UIView.layoutFittingExpandedSize)
|
||||
if customView.ss_size != .zero {
|
||||
customSize = customView.ss_size
|
||||
}
|
||||
let size = CGSize(width: customSize.width + customEdgeInsets.left + customEdgeInsets.right, height: customSize.height + customEdgeInsets.top + customEdgeInsets.bottom)
|
||||
animation.refreshAnimationOfAnimationView(animationView: self, viewSize: size, animated: animated, completion: nil)
|
||||
}
|
||||
|
||||
|
||||
@objc private func backgroundMaskAction() {
|
||||
if canTouchMaskHide {
|
||||
if fromViewController != nil {
|
||||
dimissView(animated: isTouchMaskHideAnimated ?? false)
|
||||
} else {
|
||||
hideView(animated: isTouchMaskHideAnimated ?? false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func superViewController(view: UIView) -> UIViewController? {
|
||||
var next = view.next
|
||||
while next != nil {
|
||||
if next is UIViewController {
|
||||
return next as? UIViewController
|
||||
} else {
|
||||
next = next!.next
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
public func observeHideCompletion(completion: (() -> Void)?) {
|
||||
let completionData = HideCompletionData()
|
||||
completionData.completion = completion
|
||||
self.hideCompletions.append(completionData)
|
||||
}
|
||||
|
||||
required public init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-127
@@ -1,127 +0,0 @@
|
||||
//
|
||||
// SSAlertViewExtention.swift
|
||||
// SSAlert
|
||||
//
|
||||
// Created by yangsq on 2021/8/13.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
extension SSAlertView {
|
||||
@discardableResult
|
||||
public class func alertView(style: SSAlertAction.Style, title: String? = nil, message: String? = nil, cancelButton: String? = nil, otherButtons: [String] = [], onView: UIView, onTrigger:((Int) -> Void)? = nil) -> SSAlertView {
|
||||
var actionArray = [SSAlertAction]()
|
||||
var cancelAction: SSAlertAction? = nil
|
||||
var alertView: SSAlertView?
|
||||
if style == .alert {
|
||||
if let cancelButton = cancelButton, !cancelButton.isEmpty {
|
||||
cancelAction = SSAlertAction(style: style, title: cancelButton, addAction: {
|
||||
if let onTrigger = onTrigger {
|
||||
onTrigger(0)
|
||||
}
|
||||
alertView?.hide()
|
||||
})
|
||||
actionArray.append(cancelAction!)
|
||||
}
|
||||
otherButtons.forEach { title in
|
||||
let action = SSAlertAction(style: style, title: title) {
|
||||
if let onTrigger = onTrigger {
|
||||
let index = otherButtons.firstIndex(of: title)
|
||||
onTrigger(cancelAction != nil ? (index! + 1) : index!)
|
||||
}
|
||||
}
|
||||
actionArray.append(action)
|
||||
}
|
||||
}
|
||||
|
||||
if style == .actionSheet {
|
||||
otherButtons.forEach { title in
|
||||
let action = SSAlertAction(style: style, title: title) {
|
||||
if let onTrigger = onTrigger {
|
||||
let index = otherButtons.firstIndex(of: title)
|
||||
onTrigger(cancelAction != nil ? (index! + 1) : index!)
|
||||
}
|
||||
}
|
||||
actionArray.append(action)
|
||||
}
|
||||
if let cancelButton = cancelButton, !cancelButton.isEmpty {
|
||||
cancelAction = SSAlertAction(style: style, title: cancelButton, addAction: {
|
||||
if let onTrigger = onTrigger {
|
||||
onTrigger(0)
|
||||
}
|
||||
alertView?.hide()
|
||||
})
|
||||
actionArray.append(cancelAction!)
|
||||
}
|
||||
}
|
||||
|
||||
let customView = SSAlertCommonView(title: title, message: message, style: style, actions: actionArray)
|
||||
customView.backgroundColor = .white
|
||||
alertView = SSAlertView(customView: customView, onView: onView, animation: SSAlertDefaultAnmation(state: style == .actionSheet ? .fromBottom : .fromCenter), maskType: .black)
|
||||
alertView!.canTouchMaskHide = false
|
||||
if style == .alert {
|
||||
alertView!.layer.cornerRadius = 10
|
||||
alertView!.layer.masksToBounds = true
|
||||
}
|
||||
return alertView!
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
public class func modalAlertView(style: SSAlertAction.Style, title: String? = nil, message: String? = nil, cancelButton: String? = nil, otherButtons: [String] = [], fromViewController: UIViewController, navigationViewControllerClass: UINavigationController.Type = UINavigationController.self, onTrigger:((Int) -> Void)? = nil) -> SSAlertView {
|
||||
var actionArray = [SSAlertAction]()
|
||||
var cancelAction: SSAlertAction? = nil
|
||||
var alertView: SSAlertView?
|
||||
if style == .alert {
|
||||
if let cancelButton = cancelButton, !cancelButton.isEmpty {
|
||||
cancelAction = SSAlertAction(style: style, title: cancelButton, addAction: {
|
||||
if let onTrigger = onTrigger {
|
||||
onTrigger(0)
|
||||
}
|
||||
alertView?.hide()
|
||||
})
|
||||
actionArray.append(cancelAction!)
|
||||
}
|
||||
otherButtons.forEach { title in
|
||||
let action = SSAlertAction(style: style, title: title) {
|
||||
if let onTrigger = onTrigger {
|
||||
let index = otherButtons.firstIndex(of: title)
|
||||
onTrigger(cancelAction != nil ? (index! + 1) : index!)
|
||||
}
|
||||
}
|
||||
actionArray.append(action)
|
||||
}
|
||||
}
|
||||
|
||||
if style == .actionSheet {
|
||||
otherButtons.forEach { title in
|
||||
let action = SSAlertAction(style: style, title: title) {
|
||||
if let onTrigger = onTrigger {
|
||||
let index = otherButtons.firstIndex(of: title)
|
||||
onTrigger(cancelAction != nil ? (index! + 1) : index!)
|
||||
}
|
||||
}
|
||||
actionArray.append(action)
|
||||
}
|
||||
if let cancelButton = cancelButton, !cancelButton.isEmpty {
|
||||
cancelAction = SSAlertAction(style: style, title: cancelButton, addAction: {
|
||||
if let onTrigger = onTrigger {
|
||||
onTrigger(0)
|
||||
}
|
||||
alertView?.hide()
|
||||
})
|
||||
actionArray.append(cancelAction!)
|
||||
}
|
||||
}
|
||||
let customView = SSAlertCommonView(title: title, message: message, style: style, actions: actionArray)
|
||||
customView.backgroundColor = .white
|
||||
alertView = SSAlertView(customView: customView,fromViewController: fromViewController, animation: SSAlertDefaultAnmation(state: style == .actionSheet ? .fromBottom : .fromCenter), navigationControllerClass: navigationViewControllerClass, maskType: .black)
|
||||
alertView!.canTouchMaskHide = false
|
||||
if style == .alert {
|
||||
alertView!.layer.cornerRadius = 10
|
||||
alertView!.layer.masksToBounds = true
|
||||
}
|
||||
return alertView!
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
-132
@@ -1,132 +0,0 @@
|
||||
//
|
||||
// UIViewFrameExtension.swift
|
||||
// Pods-SSAlertSwiftDemo
|
||||
//
|
||||
// Created by yangsq on 2021/8/13.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
public extension UIView {
|
||||
var ss_size: CGSize {
|
||||
get {
|
||||
frame.size
|
||||
}
|
||||
set {
|
||||
var frame = frame
|
||||
frame.size = newValue
|
||||
self.frame = frame
|
||||
}
|
||||
}
|
||||
|
||||
var ss_origin: CGPoint {
|
||||
get {
|
||||
frame.origin
|
||||
}
|
||||
set {
|
||||
var frame = frame
|
||||
frame.origin = newValue
|
||||
self.frame = frame
|
||||
}
|
||||
}
|
||||
|
||||
var ss_center: CGPoint {
|
||||
get {
|
||||
center
|
||||
}
|
||||
set {
|
||||
center = newValue
|
||||
}
|
||||
}
|
||||
|
||||
var ss_x: CGFloat {
|
||||
get {
|
||||
frame.origin.x
|
||||
}
|
||||
set {
|
||||
var frame = frame
|
||||
frame.origin.x = newValue
|
||||
self.frame = frame
|
||||
}
|
||||
}
|
||||
|
||||
var ss_maxX: CGFloat {
|
||||
get {
|
||||
frame.maxX
|
||||
}
|
||||
}
|
||||
|
||||
var ss_y: CGFloat {
|
||||
get {
|
||||
frame.origin.y
|
||||
}
|
||||
set {
|
||||
var frame = frame
|
||||
frame.origin.y = newValue
|
||||
self.frame = frame
|
||||
}
|
||||
}
|
||||
|
||||
var ss_maxY: CGFloat {
|
||||
get {
|
||||
frame.maxY
|
||||
}
|
||||
set {
|
||||
var frame = frame
|
||||
frame.origin.y = newValue
|
||||
self.frame = frame
|
||||
}
|
||||
}
|
||||
|
||||
var ss_w: CGFloat {
|
||||
get {
|
||||
frame.width
|
||||
}
|
||||
set {
|
||||
var frame = frame
|
||||
frame.size.width = newValue
|
||||
self.frame = frame
|
||||
}
|
||||
}
|
||||
|
||||
var ss_h: CGFloat {
|
||||
get {
|
||||
frame.height
|
||||
}
|
||||
set {
|
||||
var frame = frame
|
||||
frame.size.height = newValue
|
||||
self.frame = frame
|
||||
}
|
||||
}
|
||||
|
||||
var ss_centerX: CGFloat {
|
||||
get {
|
||||
center.x
|
||||
}
|
||||
set {
|
||||
var center = center
|
||||
center.x = newValue
|
||||
self.center = center
|
||||
}
|
||||
}
|
||||
|
||||
var ss_centerY: CGFloat {
|
||||
get {
|
||||
center.y
|
||||
}
|
||||
set {
|
||||
var center = center
|
||||
center.y = newValue
|
||||
self.center = center
|
||||
}
|
||||
}
|
||||
|
||||
func ss_moveToCenter() {
|
||||
if let superV = superview {
|
||||
ss_center = CGPoint(x: superV.frame.width / 2, y: superV.frame.height / 2)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Generated
-19
@@ -1,19 +0,0 @@
|
||||
Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
Generated
-155
@@ -1,155 +0,0 @@
|
||||
<img src="https://snapkit.github.io/SnapKit/images/banner.jpg" alt="" />
|
||||
|
||||
SnapKit is a DSL to make Auto Layout easy on both iOS and OS X.
|
||||
|
||||
[](https://travis-ci.org/SnapKit/SnapKit)
|
||||
[](https://github.com/SnapKit/SnapKit)
|
||||
[](https://cocoapods.org/pods/SnapKit)
|
||||
[](https://github.com/Carthage/Carthage)
|
||||
|
||||
#### ⚠️ **To use with Swift 4.x please ensure you are using >= 4.0.0** ⚠️
|
||||
#### ⚠️ **To use with Swift 5.x please ensure you are using >= 5.0.0** ⚠️
|
||||
|
||||
## Contents
|
||||
|
||||
- [Requirements](#requirements)
|
||||
- [Migration Guides](#migration-guides)
|
||||
- [Communication](#communication)
|
||||
- [Installation](#installation)
|
||||
- [Usage](#usage)
|
||||
- [Credits](#credits)
|
||||
- [License](#license)
|
||||
|
||||
## Requirements
|
||||
|
||||
- iOS 12.0+ / Mac OS X 10.13+ / tvOS 10.0+
|
||||
- Xcode 10.0+
|
||||
- Swift 4.0+
|
||||
|
||||
## Migration Guides
|
||||
|
||||
- [SnapKit 3.0 Migration Guide](Documentation/SnapKit%203.0%20Migration%20Guide.md)
|
||||
|
||||
## Communication
|
||||
|
||||
- If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/snapkit). (Tag 'snapkit')
|
||||
- If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/snapkit).
|
||||
- If you **found a bug**, open an issue.
|
||||
- If you **have a feature request**, open an issue.
|
||||
- If you **want to contribute**, submit a pull request.
|
||||
|
||||
|
||||
## Installation
|
||||
|
||||
### CocoaPods
|
||||
|
||||
[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command:
|
||||
|
||||
```bash
|
||||
$ gem install cocoapods
|
||||
```
|
||||
|
||||
> CocoaPods 1.1.0+ is required to build SnapKit 4.0.0+.
|
||||
|
||||
To integrate SnapKit into your Xcode project using CocoaPods, specify it in your `Podfile`:
|
||||
|
||||
```ruby
|
||||
source 'https://github.com/CocoaPods/Specs.git'
|
||||
platform :ios, '10.0'
|
||||
use_frameworks!
|
||||
|
||||
target '<Your Target Name>' do
|
||||
pod 'SnapKit', '~> 5.7.0'
|
||||
end
|
||||
```
|
||||
|
||||
Then, run the following command:
|
||||
|
||||
```bash
|
||||
$ pod install
|
||||
```
|
||||
|
||||
### Carthage
|
||||
|
||||
[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.
|
||||
|
||||
You can install Carthage with [Homebrew](http://brew.sh/) using the following command:
|
||||
|
||||
```bash
|
||||
$ brew update
|
||||
$ brew install carthage
|
||||
```
|
||||
|
||||
To integrate SnapKit into your Xcode project using Carthage, specify it in your `Cartfile`:
|
||||
|
||||
```ogdl
|
||||
github "SnapKit/SnapKit" ~> 5.0.0
|
||||
```
|
||||
|
||||
Run `carthage update` to build the framework and drag the built `SnapKit.framework` into your Xcode project.
|
||||
|
||||
### Swift Package Manager
|
||||
|
||||
[Swift Package Manager](https://swift.org/package-manager/) is a tool for managing the distribution of Swift code. It’s integrated with the Swift build system to automate the process of downloading, compiling, and linking dependencies.
|
||||
|
||||
> Xcode 11+ is required to build SnapKit using Swift Package Manager.
|
||||
|
||||
To integrate SnapKit into your Xcode project using Swift Package Manager, add it to the dependencies value of your `Package.swift`:
|
||||
|
||||
```swift
|
||||
dependencies: [
|
||||
.package(url: "https://github.com/SnapKit/SnapKit.git", .upToNextMajor(from: "5.0.1"))
|
||||
]
|
||||
```
|
||||
|
||||
### Manually
|
||||
|
||||
If you prefer not to use either of the aforementioned dependency managers, you can integrate SnapKit into your project manually.
|
||||
|
||||
---
|
||||
|
||||
## Usage
|
||||
|
||||
### Quick Start
|
||||
|
||||
```swift
|
||||
import SnapKit
|
||||
|
||||
class MyViewController: UIViewController {
|
||||
|
||||
lazy var box = UIView()
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
self.view.addSubview(box)
|
||||
box.backgroundColor = .green
|
||||
box.snp.makeConstraints { (make) -> Void in
|
||||
make.width.height.equalTo(50)
|
||||
make.center.equalTo(self.view)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
### Playground
|
||||
You can try SnapKit in Playground.
|
||||
|
||||
**Note:**
|
||||
|
||||
> To try SnapKit in playground, open `SnapKit.xcworkspace` and build SnapKit.framework for any simulator first.
|
||||
|
||||
### Resources
|
||||
|
||||
- [Documentation](https://snapkit.github.io/SnapKit/docs/)
|
||||
- [F.A.Q.](https://snapkit.github.io/SnapKit/faq/)
|
||||
|
||||
## Credits
|
||||
|
||||
- Robert Payne ([@robertjpayne](https://twitter.com/robertjpayne))
|
||||
- Many other contributors
|
||||
|
||||
## License
|
||||
|
||||
SnapKit is released under the MIT license. See LICENSE for details.
|
||||
-341
@@ -1,341 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
public final class Constraint {
|
||||
|
||||
internal let sourceLocation: (String, UInt)
|
||||
internal let label: String?
|
||||
|
||||
private let from: ConstraintItem
|
||||
private let to: ConstraintItem
|
||||
private let relation: ConstraintRelation
|
||||
private let multiplier: ConstraintMultiplierTarget
|
||||
private var constant: ConstraintConstantTarget {
|
||||
didSet {
|
||||
self.updateConstantAndPriorityIfNeeded()
|
||||
}
|
||||
}
|
||||
private var priority: ConstraintPriorityTarget {
|
||||
didSet {
|
||||
self.updateConstantAndPriorityIfNeeded()
|
||||
}
|
||||
}
|
||||
public var layoutConstraints: [LayoutConstraint]
|
||||
|
||||
public var isActive: Bool {
|
||||
set {
|
||||
if newValue {
|
||||
activate()
|
||||
}
|
||||
else {
|
||||
deactivate()
|
||||
}
|
||||
}
|
||||
|
||||
get {
|
||||
for layoutConstraint in self.layoutConstraints {
|
||||
if layoutConstraint.isActive {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Initialization
|
||||
|
||||
internal init(from: ConstraintItem,
|
||||
to: ConstraintItem,
|
||||
relation: ConstraintRelation,
|
||||
sourceLocation: (String, UInt),
|
||||
label: String?,
|
||||
multiplier: ConstraintMultiplierTarget,
|
||||
constant: ConstraintConstantTarget,
|
||||
priority: ConstraintPriorityTarget) {
|
||||
self.from = from
|
||||
self.to = to
|
||||
self.relation = relation
|
||||
self.sourceLocation = sourceLocation
|
||||
self.label = label
|
||||
self.multiplier = multiplier
|
||||
self.constant = constant
|
||||
self.priority = priority
|
||||
self.layoutConstraints = []
|
||||
|
||||
// get attributes
|
||||
let layoutFromAttributes = self.from.attributes.layoutAttributes
|
||||
let layoutToAttributes = self.to.attributes.layoutAttributes
|
||||
|
||||
// get layout from
|
||||
let layoutFrom = self.from.layoutConstraintItem!
|
||||
|
||||
// get relation
|
||||
let layoutRelation = self.relation.layoutRelation
|
||||
|
||||
for layoutFromAttribute in layoutFromAttributes {
|
||||
// get layout to attribute
|
||||
let layoutToAttribute: LayoutAttribute
|
||||
#if canImport(UIKit)
|
||||
if layoutToAttributes.count > 0 {
|
||||
if self.from.attributes == .edges && self.to.attributes == .margins {
|
||||
switch layoutFromAttribute {
|
||||
case .left:
|
||||
layoutToAttribute = .leftMargin
|
||||
case .right:
|
||||
layoutToAttribute = .rightMargin
|
||||
case .top:
|
||||
layoutToAttribute = .topMargin
|
||||
case .bottom:
|
||||
layoutToAttribute = .bottomMargin
|
||||
default:
|
||||
fatalError()
|
||||
}
|
||||
} else if self.from.attributes == .margins && self.to.attributes == .edges {
|
||||
switch layoutFromAttribute {
|
||||
case .leftMargin:
|
||||
layoutToAttribute = .left
|
||||
case .rightMargin:
|
||||
layoutToAttribute = .right
|
||||
case .topMargin:
|
||||
layoutToAttribute = .top
|
||||
case .bottomMargin:
|
||||
layoutToAttribute = .bottom
|
||||
default:
|
||||
fatalError()
|
||||
}
|
||||
} else if self.from.attributes == .directionalEdges && self.to.attributes == .directionalMargins {
|
||||
switch layoutFromAttribute {
|
||||
case .leading:
|
||||
layoutToAttribute = .leadingMargin
|
||||
case .trailing:
|
||||
layoutToAttribute = .trailingMargin
|
||||
case .top:
|
||||
layoutToAttribute = .topMargin
|
||||
case .bottom:
|
||||
layoutToAttribute = .bottomMargin
|
||||
default:
|
||||
fatalError()
|
||||
}
|
||||
} else if self.from.attributes == .directionalMargins && self.to.attributes == .directionalEdges {
|
||||
switch layoutFromAttribute {
|
||||
case .leadingMargin:
|
||||
layoutToAttribute = .leading
|
||||
case .trailingMargin:
|
||||
layoutToAttribute = .trailing
|
||||
case .topMargin:
|
||||
layoutToAttribute = .top
|
||||
case .bottomMargin:
|
||||
layoutToAttribute = .bottom
|
||||
default:
|
||||
fatalError()
|
||||
}
|
||||
} else if self.from.attributes == self.to.attributes {
|
||||
layoutToAttribute = layoutFromAttribute
|
||||
} else {
|
||||
layoutToAttribute = layoutToAttributes[0]
|
||||
}
|
||||
} else {
|
||||
if self.to.target == nil && (layoutFromAttribute == .centerX || layoutFromAttribute == .centerY) {
|
||||
layoutToAttribute = layoutFromAttribute == .centerX ? .left : .top
|
||||
} else {
|
||||
layoutToAttribute = layoutFromAttribute
|
||||
}
|
||||
}
|
||||
#else
|
||||
if self.from.attributes == self.to.attributes {
|
||||
layoutToAttribute = layoutFromAttribute
|
||||
} else if layoutToAttributes.count > 0 {
|
||||
layoutToAttribute = layoutToAttributes[0]
|
||||
} else {
|
||||
layoutToAttribute = layoutFromAttribute
|
||||
}
|
||||
#endif
|
||||
|
||||
// get layout constant
|
||||
let layoutConstant: CGFloat = self.constant.constraintConstantTargetValueFor(layoutAttribute: layoutToAttribute)
|
||||
|
||||
// get layout to
|
||||
var layoutTo: AnyObject? = self.to.target
|
||||
|
||||
// use superview if possible
|
||||
if layoutTo == nil && layoutToAttribute != .width && layoutToAttribute != .height {
|
||||
layoutTo = layoutFrom.superview
|
||||
}
|
||||
|
||||
// create layout constraint
|
||||
let layoutConstraint = LayoutConstraint(
|
||||
item: layoutFrom,
|
||||
attribute: layoutFromAttribute,
|
||||
relatedBy: layoutRelation,
|
||||
toItem: layoutTo,
|
||||
attribute: layoutToAttribute,
|
||||
multiplier: self.multiplier.constraintMultiplierTargetValue,
|
||||
constant: layoutConstant
|
||||
)
|
||||
|
||||
// set label
|
||||
layoutConstraint.label = self.label
|
||||
|
||||
// set priority
|
||||
layoutConstraint.priority = LayoutPriority(rawValue: self.priority.constraintPriorityTargetValue)
|
||||
|
||||
// set constraint
|
||||
layoutConstraint.constraint = self
|
||||
|
||||
// append
|
||||
self.layoutConstraints.append(layoutConstraint)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Public
|
||||
|
||||
@available(*, deprecated, renamed:"activate()")
|
||||
public func install() {
|
||||
self.activate()
|
||||
}
|
||||
|
||||
@available(*, deprecated, renamed:"deactivate()")
|
||||
public func uninstall() {
|
||||
self.deactivate()
|
||||
}
|
||||
|
||||
public func activate() {
|
||||
self.activateIfNeeded()
|
||||
}
|
||||
|
||||
public func deactivate() {
|
||||
self.deactivateIfNeeded()
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
public func update(offset: ConstraintOffsetTarget) -> Constraint {
|
||||
self.constant = offset.constraintOffsetTargetValue
|
||||
return self
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
public func update(inset: ConstraintInsetTarget) -> Constraint {
|
||||
self.constant = inset.constraintInsetTargetValue
|
||||
return self
|
||||
}
|
||||
|
||||
#if canImport(UIKit)
|
||||
@discardableResult
|
||||
@available(iOS 11.0, tvOS 11.0, *)
|
||||
public func update(inset: ConstraintDirectionalInsetTarget) -> Constraint {
|
||||
self.constant = inset.constraintDirectionalInsetTargetValue
|
||||
return self
|
||||
}
|
||||
#endif
|
||||
|
||||
@discardableResult
|
||||
public func update(priority: ConstraintPriorityTarget) -> Constraint {
|
||||
self.priority = priority.constraintPriorityTargetValue
|
||||
return self
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
public func update(priority: ConstraintPriority) -> Constraint {
|
||||
self.priority = priority.value
|
||||
return self
|
||||
}
|
||||
|
||||
@available(*, deprecated, renamed:"update(offset:)")
|
||||
public func updateOffset(amount: ConstraintOffsetTarget) -> Void { self.update(offset: amount) }
|
||||
|
||||
@available(*, deprecated, renamed:"update(inset:)")
|
||||
public func updateInsets(amount: ConstraintInsetTarget) -> Void { self.update(inset: amount) }
|
||||
|
||||
@available(*, deprecated, renamed:"update(priority:)")
|
||||
public func updatePriority(amount: ConstraintPriorityTarget) -> Void { self.update(priority: amount) }
|
||||
|
||||
@available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.")
|
||||
public func updatePriorityRequired() -> Void {}
|
||||
|
||||
@available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.")
|
||||
public func updatePriorityHigh() -> Void { fatalError("Must be implemented by Concrete subclass.") }
|
||||
|
||||
@available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.")
|
||||
public func updatePriorityMedium() -> Void { fatalError("Must be implemented by Concrete subclass.") }
|
||||
|
||||
@available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.")
|
||||
public func updatePriorityLow() -> Void { fatalError("Must be implemented by Concrete subclass.") }
|
||||
|
||||
// MARK: Internal
|
||||
|
||||
internal func updateConstantAndPriorityIfNeeded() {
|
||||
for layoutConstraint in self.layoutConstraints {
|
||||
let attribute = (layoutConstraint.secondAttribute == .notAnAttribute) ? layoutConstraint.firstAttribute : layoutConstraint.secondAttribute
|
||||
layoutConstraint.constant = self.constant.constraintConstantTargetValueFor(layoutAttribute: attribute)
|
||||
|
||||
let requiredPriority = ConstraintPriority.required.value
|
||||
if (layoutConstraint.priority.rawValue < requiredPriority), (self.priority.constraintPriorityTargetValue != requiredPriority) {
|
||||
layoutConstraint.priority = LayoutPriority(rawValue: self.priority.constraintPriorityTargetValue)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal func activateIfNeeded(updatingExisting: Bool = false) {
|
||||
guard let item = self.from.layoutConstraintItem else {
|
||||
print("WARNING: SnapKit failed to get from item from constraint. Activate will be a no-op.")
|
||||
return
|
||||
}
|
||||
let layoutConstraints = self.layoutConstraints
|
||||
|
||||
if updatingExisting {
|
||||
var existingLayoutConstraints: [LayoutConstraint] = []
|
||||
for constraint in item.constraints {
|
||||
existingLayoutConstraints += constraint.layoutConstraints
|
||||
}
|
||||
|
||||
for layoutConstraint in layoutConstraints {
|
||||
let existingLayoutConstraint = existingLayoutConstraints.first { $0 == layoutConstraint }
|
||||
guard let updateLayoutConstraint = existingLayoutConstraint else {
|
||||
fatalError("Updated constraint could not find existing matching constraint to update: \(layoutConstraint)")
|
||||
}
|
||||
|
||||
let updateLayoutAttribute = (updateLayoutConstraint.secondAttribute == .notAnAttribute) ? updateLayoutConstraint.firstAttribute : updateLayoutConstraint.secondAttribute
|
||||
updateLayoutConstraint.constant = self.constant.constraintConstantTargetValueFor(layoutAttribute: updateLayoutAttribute)
|
||||
}
|
||||
} else {
|
||||
NSLayoutConstraint.activate(layoutConstraints)
|
||||
item.add(constraints: [self])
|
||||
}
|
||||
}
|
||||
|
||||
internal func deactivateIfNeeded() {
|
||||
guard let item = self.from.layoutConstraintItem else {
|
||||
print("WARNING: SnapKit failed to get from item from constraint. Deactivate will be a no-op.")
|
||||
return
|
||||
}
|
||||
let layoutConstraints = self.layoutConstraints
|
||||
NSLayoutConstraint.deactivate(layoutConstraints)
|
||||
item.remove(constraints: [self])
|
||||
}
|
||||
}
|
||||
@@ -1,203 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
internal struct ConstraintAttributes : OptionSet, ExpressibleByIntegerLiteral {
|
||||
|
||||
typealias IntegerLiteralType = UInt
|
||||
|
||||
internal init(rawValue: UInt) {
|
||||
self.rawValue = rawValue
|
||||
}
|
||||
internal init(_ rawValue: UInt) {
|
||||
self.init(rawValue: rawValue)
|
||||
}
|
||||
internal init(nilLiteral: ()) {
|
||||
self.rawValue = 0
|
||||
}
|
||||
internal init(integerLiteral rawValue: IntegerLiteralType) {
|
||||
self.init(rawValue: rawValue)
|
||||
}
|
||||
|
||||
internal private(set) var rawValue: UInt
|
||||
internal static var allZeros: ConstraintAttributes { return 0 }
|
||||
internal static func convertFromNilLiteral() -> ConstraintAttributes { return 0 }
|
||||
internal var boolValue: Bool { return self.rawValue != 0 }
|
||||
|
||||
internal func toRaw() -> UInt { return self.rawValue }
|
||||
internal static func fromRaw(_ raw: UInt) -> ConstraintAttributes? { return self.init(raw) }
|
||||
internal static func fromMask(_ raw: UInt) -> ConstraintAttributes { return self.init(raw) }
|
||||
|
||||
// normal
|
||||
|
||||
internal static let none: ConstraintAttributes = 0
|
||||
internal static let left: ConstraintAttributes = ConstraintAttributes(UInt(1) << 0)
|
||||
internal static let top: ConstraintAttributes = ConstraintAttributes(UInt(1) << 1)
|
||||
internal static let right: ConstraintAttributes = ConstraintAttributes(UInt(1) << 2)
|
||||
internal static let bottom: ConstraintAttributes = ConstraintAttributes(UInt(1) << 3)
|
||||
internal static let leading: ConstraintAttributes = ConstraintAttributes(UInt(1) << 4)
|
||||
internal static let trailing: ConstraintAttributes = ConstraintAttributes(UInt(1) << 5)
|
||||
internal static let width: ConstraintAttributes = ConstraintAttributes(UInt(1) << 6)
|
||||
internal static let height: ConstraintAttributes = ConstraintAttributes(UInt(1) << 7)
|
||||
internal static let centerX: ConstraintAttributes = ConstraintAttributes(UInt(1) << 8)
|
||||
internal static let centerY: ConstraintAttributes = ConstraintAttributes(UInt(1) << 9)
|
||||
internal static let lastBaseline: ConstraintAttributes = ConstraintAttributes(UInt(1) << 10)
|
||||
|
||||
@available(iOS 8.0, OSX 10.11, *)
|
||||
internal static let firstBaseline: ConstraintAttributes = ConstraintAttributes(UInt(1) << 11)
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
internal static let leftMargin: ConstraintAttributes = ConstraintAttributes(UInt(1) << 12)
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
internal static let rightMargin: ConstraintAttributes = ConstraintAttributes(UInt(1) << 13)
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
internal static let topMargin: ConstraintAttributes = ConstraintAttributes(UInt(1) << 14)
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
internal static let bottomMargin: ConstraintAttributes = ConstraintAttributes(UInt(1) << 15)
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
internal static let leadingMargin: ConstraintAttributes = ConstraintAttributes(UInt(1) << 16)
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
internal static let trailingMargin: ConstraintAttributes = ConstraintAttributes(UInt(1) << 17)
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
internal static let centerXWithinMargins: ConstraintAttributes = ConstraintAttributes(UInt(1) << 18)
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
internal static let centerYWithinMargins: ConstraintAttributes = ConstraintAttributes(UInt(1) << 19)
|
||||
|
||||
// aggregates
|
||||
|
||||
internal static let edges: ConstraintAttributes = [.horizontalEdges, .verticalEdges]
|
||||
internal static let horizontalEdges: ConstraintAttributes = [.left, .right]
|
||||
internal static let verticalEdges: ConstraintAttributes = [.top, .bottom]
|
||||
internal static let directionalEdges: ConstraintAttributes = [.directionalHorizontalEdges, .directionalVerticalEdges]
|
||||
internal static let directionalHorizontalEdges: ConstraintAttributes = [.leading, .trailing]
|
||||
internal static let directionalVerticalEdges: ConstraintAttributes = [.top, .bottom]
|
||||
internal static let size: ConstraintAttributes = [.width, .height]
|
||||
internal static let center: ConstraintAttributes = [.centerX, .centerY]
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
internal static let margins: ConstraintAttributes = [.leftMargin, .topMargin, .rightMargin, .bottomMargin]
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
internal static let directionalMargins: ConstraintAttributes = [.leadingMargin, .topMargin, .trailingMargin, .bottomMargin]
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
internal static let centerWithinMargins: ConstraintAttributes = [.centerXWithinMargins, .centerYWithinMargins]
|
||||
|
||||
internal var layoutAttributes:[LayoutAttribute] {
|
||||
var attrs = [LayoutAttribute]()
|
||||
if (self.contains(ConstraintAttributes.left)) {
|
||||
attrs.append(.left)
|
||||
}
|
||||
if (self.contains(ConstraintAttributes.top)) {
|
||||
attrs.append(.top)
|
||||
}
|
||||
if (self.contains(ConstraintAttributes.right)) {
|
||||
attrs.append(.right)
|
||||
}
|
||||
if (self.contains(ConstraintAttributes.bottom)) {
|
||||
attrs.append(.bottom)
|
||||
}
|
||||
if (self.contains(ConstraintAttributes.leading)) {
|
||||
attrs.append(.leading)
|
||||
}
|
||||
if (self.contains(ConstraintAttributes.trailing)) {
|
||||
attrs.append(.trailing)
|
||||
}
|
||||
if (self.contains(ConstraintAttributes.width)) {
|
||||
attrs.append(.width)
|
||||
}
|
||||
if (self.contains(ConstraintAttributes.height)) {
|
||||
attrs.append(.height)
|
||||
}
|
||||
if (self.contains(ConstraintAttributes.centerX)) {
|
||||
attrs.append(.centerX)
|
||||
}
|
||||
if (self.contains(ConstraintAttributes.centerY)) {
|
||||
attrs.append(.centerY)
|
||||
}
|
||||
if (self.contains(ConstraintAttributes.lastBaseline)) {
|
||||
attrs.append(.lastBaseline)
|
||||
}
|
||||
|
||||
#if canImport(UIKit)
|
||||
if (self.contains(ConstraintAttributes.firstBaseline)) {
|
||||
attrs.append(.firstBaseline)
|
||||
}
|
||||
if (self.contains(ConstraintAttributes.leftMargin)) {
|
||||
attrs.append(.leftMargin)
|
||||
}
|
||||
if (self.contains(ConstraintAttributes.rightMargin)) {
|
||||
attrs.append(.rightMargin)
|
||||
}
|
||||
if (self.contains(ConstraintAttributes.topMargin)) {
|
||||
attrs.append(.topMargin)
|
||||
}
|
||||
if (self.contains(ConstraintAttributes.bottomMargin)) {
|
||||
attrs.append(.bottomMargin)
|
||||
}
|
||||
if (self.contains(ConstraintAttributes.leadingMargin)) {
|
||||
attrs.append(.leadingMargin)
|
||||
}
|
||||
if (self.contains(ConstraintAttributes.trailingMargin)) {
|
||||
attrs.append(.trailingMargin)
|
||||
}
|
||||
if (self.contains(ConstraintAttributes.centerXWithinMargins)) {
|
||||
attrs.append(.centerXWithinMargins)
|
||||
}
|
||||
if (self.contains(ConstraintAttributes.centerYWithinMargins)) {
|
||||
attrs.append(.centerYWithinMargins)
|
||||
}
|
||||
#endif
|
||||
|
||||
return attrs
|
||||
}
|
||||
}
|
||||
|
||||
internal func + (left: ConstraintAttributes, right: ConstraintAttributes) -> ConstraintAttributes {
|
||||
return left.union(right)
|
||||
}
|
||||
|
||||
internal func +=(left: inout ConstraintAttributes, right: ConstraintAttributes) {
|
||||
left.formUnion(right)
|
||||
}
|
||||
|
||||
internal func -=(left: inout ConstraintAttributes, right: ConstraintAttributes) {
|
||||
left.subtract(right)
|
||||
}
|
||||
|
||||
internal func ==(left: ConstraintAttributes, right: ConstraintAttributes) -> Bool {
|
||||
return left.rawValue == right.rawValue
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
public typealias ConstraintInterfaceLayoutDirection = UIUserInterfaceLayoutDirection
|
||||
#else
|
||||
import AppKit
|
||||
public typealias ConstraintInterfaceLayoutDirection = NSUserInterfaceLayoutDirection
|
||||
#endif
|
||||
|
||||
|
||||
public struct ConstraintConfig {
|
||||
|
||||
public static var interfaceLayoutDirection: ConstraintInterfaceLayoutDirection = .leftToRight
|
||||
|
||||
}
|
||||
@@ -1,213 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
public protocol ConstraintConstantTarget {
|
||||
}
|
||||
|
||||
extension CGPoint: ConstraintConstantTarget {
|
||||
}
|
||||
|
||||
extension CGSize: ConstraintConstantTarget {
|
||||
}
|
||||
|
||||
extension ConstraintInsets: ConstraintConstantTarget {
|
||||
}
|
||||
|
||||
#if canImport(UIKit)
|
||||
@available(iOS 11.0, tvOS 11.0, *)
|
||||
extension ConstraintDirectionalInsets: ConstraintConstantTarget {
|
||||
}
|
||||
#endif
|
||||
|
||||
extension ConstraintConstantTarget {
|
||||
|
||||
internal func constraintConstantTargetValueFor(layoutAttribute: LayoutAttribute) -> CGFloat {
|
||||
if let value = self as? CGFloat {
|
||||
return value
|
||||
}
|
||||
|
||||
if let value = self as? Float {
|
||||
return CGFloat(value)
|
||||
}
|
||||
|
||||
if let value = self as? Double {
|
||||
return CGFloat(value)
|
||||
}
|
||||
|
||||
if let value = self as? Int {
|
||||
return CGFloat(value)
|
||||
}
|
||||
|
||||
if let value = self as? UInt {
|
||||
return CGFloat(value)
|
||||
}
|
||||
|
||||
if let value = self as? CGSize {
|
||||
if layoutAttribute == .width {
|
||||
return value.width
|
||||
} else if layoutAttribute == .height {
|
||||
return value.height
|
||||
} else {
|
||||
return 0.0
|
||||
}
|
||||
}
|
||||
|
||||
if let value = self as? CGPoint {
|
||||
#if canImport(UIKit)
|
||||
switch layoutAttribute {
|
||||
case .left, .right, .leading, .trailing, .centerX, .leftMargin, .rightMargin, .leadingMargin, .trailingMargin, .centerXWithinMargins:
|
||||
return value.x
|
||||
case .top, .bottom, .centerY, .topMargin, .bottomMargin, .centerYWithinMargins, .lastBaseline, .firstBaseline:
|
||||
return value.y
|
||||
case .width, .height, .notAnAttribute:
|
||||
return 0.0
|
||||
#if swift(>=5.0)
|
||||
@unknown default:
|
||||
return 0.0
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
switch layoutAttribute {
|
||||
case .left, .right, .leading, .trailing, .centerX:
|
||||
return value.x
|
||||
case .top, .bottom, .centerY, .lastBaseline, .firstBaseline:
|
||||
return value.y
|
||||
case .width, .height, .notAnAttribute:
|
||||
return 0.0
|
||||
#if swift(>=5.0)
|
||||
@unknown default:
|
||||
return 0.0
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if let value = self as? ConstraintInsets {
|
||||
#if canImport(UIKit)
|
||||
switch layoutAttribute {
|
||||
case .left, .leftMargin:
|
||||
return value.left
|
||||
case .top, .topMargin, .firstBaseline:
|
||||
return value.top
|
||||
case .right, .rightMargin:
|
||||
return -value.right
|
||||
case .bottom, .bottomMargin, .lastBaseline:
|
||||
return -value.bottom
|
||||
case .leading, .leadingMargin:
|
||||
return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.left : value.right
|
||||
case .trailing, .trailingMargin:
|
||||
return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.right : -value.left
|
||||
case .centerX, .centerXWithinMargins:
|
||||
return (value.left - value.right) / 2
|
||||
case .centerY, .centerYWithinMargins:
|
||||
return (value.top - value.bottom) / 2
|
||||
case .width:
|
||||
return -(value.left + value.right)
|
||||
case .height:
|
||||
return -(value.top + value.bottom)
|
||||
case .notAnAttribute:
|
||||
return 0.0
|
||||
#if swift(>=5.0)
|
||||
@unknown default:
|
||||
return 0.0
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
switch layoutAttribute {
|
||||
case .left:
|
||||
return value.left
|
||||
case .top, .firstBaseline:
|
||||
return value.top
|
||||
case .right:
|
||||
return -value.right
|
||||
case .bottom, .lastBaseline:
|
||||
return -value.bottom
|
||||
case .leading:
|
||||
return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.left : value.right
|
||||
case .trailing:
|
||||
return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.right : -value.left
|
||||
case .centerX:
|
||||
return (value.left - value.right) / 2
|
||||
case .centerY:
|
||||
return (value.top - value.bottom) / 2
|
||||
case .width:
|
||||
return -(value.left + value.right)
|
||||
case .height:
|
||||
return -(value.top + value.bottom)
|
||||
case .notAnAttribute:
|
||||
return 0.0
|
||||
#if swift(>=5.0)
|
||||
@unknown default:
|
||||
return 0.0
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if canImport(UIKit)
|
||||
if #available(iOS 11.0, tvOS 11.0, *), let value = self as? ConstraintDirectionalInsets {
|
||||
switch layoutAttribute {
|
||||
case .left, .leftMargin:
|
||||
return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.leading : value.trailing
|
||||
case .top, .topMargin, .firstBaseline:
|
||||
return value.top
|
||||
case .right, .rightMargin:
|
||||
return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.trailing : -value.leading
|
||||
case .bottom, .bottomMargin, .lastBaseline:
|
||||
return -value.bottom
|
||||
case .leading, .leadingMargin:
|
||||
return value.leading
|
||||
case .trailing, .trailingMargin:
|
||||
return -value.trailing
|
||||
case .centerX, .centerXWithinMargins:
|
||||
return (value.leading - value.trailing) / 2
|
||||
case .centerY, .centerYWithinMargins:
|
||||
return (value.top - value.bottom) / 2
|
||||
case .width:
|
||||
return -(value.leading + value.trailing)
|
||||
case .height:
|
||||
return -(value.top + value.bottom)
|
||||
case .notAnAttribute:
|
||||
return 0.0
|
||||
#if swift(>=5.0)
|
||||
@unknown default:
|
||||
return 0.0
|
||||
#else
|
||||
default:
|
||||
return 0.0
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0.0
|
||||
}
|
||||
|
||||
}
|
||||
-209
@@ -1,209 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
public protocol ConstraintDSL {
|
||||
|
||||
var target: AnyObject? { get }
|
||||
|
||||
func setLabel(_ value: String?)
|
||||
func label() -> String?
|
||||
|
||||
}
|
||||
extension ConstraintDSL {
|
||||
|
||||
public func setLabel(_ value: String?) {
|
||||
objc_setAssociatedObject(self.target as Any, &labelKey, value, .OBJC_ASSOCIATION_COPY_NONATOMIC)
|
||||
}
|
||||
public func label() -> String? {
|
||||
return objc_getAssociatedObject(self.target as Any, &labelKey) as? String
|
||||
}
|
||||
|
||||
}
|
||||
private var labelKey: UInt8 = 0
|
||||
|
||||
|
||||
public protocol ConstraintBasicAttributesDSL : ConstraintDSL {
|
||||
}
|
||||
extension ConstraintBasicAttributesDSL {
|
||||
|
||||
// MARK: Basics
|
||||
|
||||
public var left: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.left)
|
||||
}
|
||||
|
||||
public var top: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.top)
|
||||
}
|
||||
|
||||
public var right: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.right)
|
||||
}
|
||||
|
||||
public var bottom: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottom)
|
||||
}
|
||||
|
||||
public var leading: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leading)
|
||||
}
|
||||
|
||||
public var trailing: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.trailing)
|
||||
}
|
||||
|
||||
public var width: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.width)
|
||||
}
|
||||
|
||||
public var height: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.height)
|
||||
}
|
||||
|
||||
public var centerX: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerX)
|
||||
}
|
||||
|
||||
public var centerY: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerY)
|
||||
}
|
||||
|
||||
public var edges: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.edges)
|
||||
}
|
||||
|
||||
public var directionalEdges: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalEdges)
|
||||
}
|
||||
|
||||
public var horizontalEdges: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.horizontalEdges)
|
||||
}
|
||||
|
||||
public var verticalEdges: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.verticalEdges)
|
||||
}
|
||||
|
||||
public var directionalHorizontalEdges: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalHorizontalEdges)
|
||||
}
|
||||
|
||||
public var directionalVerticalEdges: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalVerticalEdges)
|
||||
}
|
||||
|
||||
public var size: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.size)
|
||||
}
|
||||
|
||||
public var center: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.center)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public protocol ConstraintAttributesDSL : ConstraintBasicAttributesDSL {
|
||||
}
|
||||
extension ConstraintAttributesDSL {
|
||||
|
||||
// MARK: Baselines
|
||||
@available(*, deprecated, renamed:"lastBaseline")
|
||||
public var baseline: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.lastBaseline)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, OSX 10.11, *)
|
||||
public var lastBaseline: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.lastBaseline)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, OSX 10.11, *)
|
||||
public var firstBaseline: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.firstBaseline)
|
||||
}
|
||||
|
||||
// MARK: Margins
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var leftMargin: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leftMargin)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var topMargin: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.topMargin)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var rightMargin: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.rightMargin)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var bottomMargin: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottomMargin)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var leadingMargin: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leadingMargin)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var trailingMargin: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.trailingMargin)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var centerXWithinMargins: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerXWithinMargins)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var centerYWithinMargins: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerYWithinMargins)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var margins: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.margins)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var directionalMargins: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalMargins)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var centerWithinMargins: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerWithinMargins)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,69 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
public class ConstraintDescription {
|
||||
|
||||
internal let item: LayoutConstraintItem
|
||||
internal var attributes: ConstraintAttributes
|
||||
internal var relation: ConstraintRelation? = nil
|
||||
internal var sourceLocation: (String, UInt)? = nil
|
||||
internal var label: String? = nil
|
||||
internal var related: ConstraintItem? = nil
|
||||
internal var multiplier: ConstraintMultiplierTarget = 1.0
|
||||
internal var constant: ConstraintConstantTarget = 0.0
|
||||
internal var priority: ConstraintPriorityTarget = 1000.0
|
||||
internal lazy var constraint: Constraint? = {
|
||||
guard let relation = self.relation,
|
||||
let related = self.related,
|
||||
let sourceLocation = self.sourceLocation else {
|
||||
return nil
|
||||
}
|
||||
let from = ConstraintItem(target: self.item, attributes: self.attributes)
|
||||
|
||||
return Constraint(
|
||||
from: from,
|
||||
to: related,
|
||||
relation: relation,
|
||||
sourceLocation: sourceLocation,
|
||||
label: self.label,
|
||||
multiplier: self.multiplier,
|
||||
constant: self.constant,
|
||||
priority: self.priority
|
||||
)
|
||||
}()
|
||||
|
||||
// MARK: Initialization
|
||||
|
||||
internal init(item: LayoutConstraintItem, attributes: ConstraintAttributes) {
|
||||
self.item = item
|
||||
self.attributes = attributes
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
#if canImport(UIKit)
|
||||
public protocol ConstraintDirectionalInsetTarget: ConstraintConstantTarget {
|
||||
}
|
||||
|
||||
@available(iOS 11.0, tvOS 11.0, *)
|
||||
extension ConstraintDirectionalInsets: ConstraintDirectionalInsetTarget {
|
||||
}
|
||||
|
||||
extension ConstraintDirectionalInsetTarget {
|
||||
|
||||
@available(iOS 11.0, tvOS 11.0, *)
|
||||
internal var constraintDirectionalInsetTargetValue: ConstraintDirectionalInsets {
|
||||
if let amount = self as? ConstraintDirectionalInsets {
|
||||
return amount
|
||||
} else {
|
||||
return ConstraintDirectionalInsets(top: 0, leading: 0, bottom: 0, trailing: 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -1,34 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
#if canImport(UIKit)
|
||||
@available(iOS 11.0, tvOS 11.0, *)
|
||||
public typealias ConstraintDirectionalInsets = NSDirectionalEdgeInsets
|
||||
#endif
|
||||
@@ -1,72 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
public protocol ConstraintInsetTarget: ConstraintConstantTarget {
|
||||
}
|
||||
|
||||
extension Int: ConstraintInsetTarget {
|
||||
}
|
||||
|
||||
extension UInt: ConstraintInsetTarget {
|
||||
}
|
||||
|
||||
extension Float: ConstraintInsetTarget {
|
||||
}
|
||||
|
||||
extension Double: ConstraintInsetTarget {
|
||||
}
|
||||
|
||||
extension CGFloat: ConstraintInsetTarget {
|
||||
}
|
||||
|
||||
extension ConstraintInsets: ConstraintInsetTarget {
|
||||
}
|
||||
|
||||
extension ConstraintInsetTarget {
|
||||
|
||||
internal var constraintInsetTargetValue: ConstraintInsets {
|
||||
if let amount = self as? ConstraintInsets {
|
||||
return amount
|
||||
} else if let amount = self as? Float {
|
||||
return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount))
|
||||
} else if let amount = self as? Double {
|
||||
return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount))
|
||||
} else if let amount = self as? CGFloat {
|
||||
return ConstraintInsets(top: amount, left: amount, bottom: amount, right: amount)
|
||||
} else if let amount = self as? Int {
|
||||
return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount))
|
||||
} else if let amount = self as? UInt {
|
||||
return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount))
|
||||
} else {
|
||||
return ConstraintInsets(top: 0, left: 0, bottom: 0, right: 0)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
#if canImport(UIKit)
|
||||
public typealias ConstraintInsets = UIEdgeInsets
|
||||
#else
|
||||
public typealias ConstraintInsets = NSEdgeInsets
|
||||
#endif
|
||||
@@ -1,61 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
public final class ConstraintItem {
|
||||
|
||||
internal weak var target: AnyObject?
|
||||
internal let attributes: ConstraintAttributes
|
||||
|
||||
internal init(target: AnyObject?, attributes: ConstraintAttributes) {
|
||||
self.target = target
|
||||
self.attributes = attributes
|
||||
}
|
||||
|
||||
internal var layoutConstraintItem: LayoutConstraintItem? {
|
||||
return self.target as? LayoutConstraintItem
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public func ==(lhs: ConstraintItem, rhs: ConstraintItem) -> Bool {
|
||||
// pointer equality
|
||||
guard lhs !== rhs else {
|
||||
return true
|
||||
}
|
||||
|
||||
// must both have valid targets and identical attributes
|
||||
guard let target1 = lhs.target,
|
||||
let target2 = rhs.target,
|
||||
target1 === target2 && lhs.attributes == rhs.attributes else {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#endif
|
||||
|
||||
|
||||
@available(iOS 9.0, OSX 10.11, *)
|
||||
public extension ConstraintLayoutGuide {
|
||||
|
||||
var snp: ConstraintLayoutGuideDSL {
|
||||
return ConstraintLayoutGuideDSL(guide: self)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
#if canImport(UIKit)
|
||||
@available(iOS 9.0, *)
|
||||
public typealias ConstraintLayoutGuide = UILayoutGuide
|
||||
#else
|
||||
@available(OSX 10.11, *)
|
||||
public typealias ConstraintLayoutGuide = NSLayoutGuide
|
||||
#endif
|
||||
@@ -1,66 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
@available(iOS 9.0, OSX 10.11, *)
|
||||
public struct ConstraintLayoutGuideDSL: ConstraintAttributesDSL {
|
||||
|
||||
@discardableResult
|
||||
public func prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] {
|
||||
return ConstraintMaker.prepareConstraints(item: self.guide, closure: closure)
|
||||
}
|
||||
|
||||
public func makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
|
||||
ConstraintMaker.makeConstraints(item: self.guide, closure: closure)
|
||||
}
|
||||
|
||||
public func remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
|
||||
ConstraintMaker.remakeConstraints(item: self.guide, closure: closure)
|
||||
}
|
||||
|
||||
public func updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
|
||||
ConstraintMaker.updateConstraints(item: self.guide, closure: closure)
|
||||
}
|
||||
|
||||
public func removeConstraints() {
|
||||
ConstraintMaker.removeConstraints(item: self.guide)
|
||||
}
|
||||
|
||||
public var target: AnyObject? {
|
||||
return self.guide
|
||||
}
|
||||
|
||||
internal let guide: ConstraintLayoutGuide
|
||||
|
||||
internal init(guide: ConstraintLayoutGuide) {
|
||||
self.guide = guide
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
#if canImport(UIKit)
|
||||
@available(iOS 8.0, *)
|
||||
public typealias ConstraintLayoutSupport = UILayoutSupport
|
||||
#else
|
||||
public class ConstraintLayoutSupport {}
|
||||
#endif
|
||||
@@ -1,56 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public struct ConstraintLayoutSupportDSL: ConstraintDSL {
|
||||
|
||||
public var target: AnyObject? {
|
||||
return self.support
|
||||
}
|
||||
|
||||
internal let support: ConstraintLayoutSupport
|
||||
|
||||
internal init(support: ConstraintLayoutSupport) {
|
||||
self.support = support
|
||||
|
||||
}
|
||||
|
||||
public var top: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.top)
|
||||
}
|
||||
|
||||
public var bottom: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottom)
|
||||
}
|
||||
|
||||
public var height: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.height)
|
||||
}
|
||||
}
|
||||
-224
@@ -1,224 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
public class ConstraintMaker {
|
||||
|
||||
public var left: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.left)
|
||||
}
|
||||
|
||||
public var top: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.top)
|
||||
}
|
||||
|
||||
public var bottom: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.bottom)
|
||||
}
|
||||
|
||||
public var right: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.right)
|
||||
}
|
||||
|
||||
public var leading: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.leading)
|
||||
}
|
||||
|
||||
public var trailing: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.trailing)
|
||||
}
|
||||
|
||||
public var width: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.width)
|
||||
}
|
||||
|
||||
public var height: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.height)
|
||||
}
|
||||
|
||||
public var centerX: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.centerX)
|
||||
}
|
||||
|
||||
public var centerY: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.centerY)
|
||||
}
|
||||
|
||||
@available(*, deprecated, renamed:"lastBaseline")
|
||||
public var baseline: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.lastBaseline)
|
||||
}
|
||||
|
||||
public var lastBaseline: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.lastBaseline)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, OSX 10.11, *)
|
||||
public var firstBaseline: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.firstBaseline)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var leftMargin: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.leftMargin)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var rightMargin: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.rightMargin)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var topMargin: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.topMargin)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var bottomMargin: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.bottomMargin)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var leadingMargin: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.leadingMargin)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var trailingMargin: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.trailingMargin)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var centerXWithinMargins: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.centerXWithinMargins)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var centerYWithinMargins: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.centerYWithinMargins)
|
||||
}
|
||||
|
||||
public var edges: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.edges)
|
||||
}
|
||||
public var horizontalEdges: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.horizontalEdges)
|
||||
}
|
||||
public var verticalEdges: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.verticalEdges)
|
||||
}
|
||||
public var directionalEdges: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.directionalEdges)
|
||||
}
|
||||
public var directionalHorizontalEdges: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.directionalHorizontalEdges)
|
||||
}
|
||||
public var directionalVerticalEdges: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.directionalVerticalEdges)
|
||||
}
|
||||
public var size: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.size)
|
||||
}
|
||||
public var center: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.center)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var margins: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.margins)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var directionalMargins: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.directionalMargins)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var centerWithinMargins: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.centerWithinMargins)
|
||||
}
|
||||
|
||||
public let item: LayoutConstraintItem
|
||||
private var descriptions = [ConstraintDescription]()
|
||||
|
||||
internal init(item: LayoutConstraintItem) {
|
||||
self.item = item
|
||||
self.item.prepare()
|
||||
}
|
||||
|
||||
internal func makeExtendableWithAttributes(_ attributes: ConstraintAttributes) -> ConstraintMakerExtendable {
|
||||
let description = ConstraintDescription(item: self.item, attributes: attributes)
|
||||
self.descriptions.append(description)
|
||||
return ConstraintMakerExtendable(description)
|
||||
}
|
||||
|
||||
internal static func prepareConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] {
|
||||
let maker = ConstraintMaker(item: item)
|
||||
closure(maker)
|
||||
var constraints: [Constraint] = []
|
||||
for description in maker.descriptions {
|
||||
guard let constraint = description.constraint else {
|
||||
continue
|
||||
}
|
||||
constraints.append(constraint)
|
||||
}
|
||||
return constraints
|
||||
}
|
||||
|
||||
internal static func makeConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) {
|
||||
let constraints = prepareConstraints(item: item, closure: closure)
|
||||
for constraint in constraints {
|
||||
constraint.activateIfNeeded(updatingExisting: false)
|
||||
}
|
||||
}
|
||||
|
||||
internal static func remakeConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) {
|
||||
self.removeConstraints(item: item)
|
||||
self.makeConstraints(item: item, closure: closure)
|
||||
}
|
||||
|
||||
internal static func updateConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) {
|
||||
guard item.constraints.count > 0 else {
|
||||
self.makeConstraints(item: item, closure: closure)
|
||||
return
|
||||
}
|
||||
|
||||
let constraints = prepareConstraints(item: item, closure: closure)
|
||||
for constraint in constraints {
|
||||
constraint.activateIfNeeded(updatingExisting: true)
|
||||
}
|
||||
}
|
||||
|
||||
internal static func removeConstraints(item: LayoutConstraintItem) {
|
||||
let constraints = item.constraints
|
||||
for constraint in constraints {
|
||||
constraint.deactivateIfNeeded()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,64 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
public class ConstraintMakerEditable: ConstraintMakerPrioritizable {
|
||||
|
||||
@discardableResult
|
||||
public func multipliedBy(_ amount: ConstraintMultiplierTarget) -> ConstraintMakerEditable {
|
||||
self.description.multiplier = amount
|
||||
return self
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
public func dividedBy(_ amount: ConstraintMultiplierTarget) -> ConstraintMakerEditable {
|
||||
return self.multipliedBy(1.0 / amount.constraintMultiplierTargetValue)
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
public func offset(_ amount: ConstraintOffsetTarget) -> ConstraintMakerEditable {
|
||||
self.description.constant = amount.constraintOffsetTargetValue
|
||||
return self
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
public func inset(_ amount: ConstraintInsetTarget) -> ConstraintMakerEditable {
|
||||
self.description.constant = amount.constraintInsetTargetValue
|
||||
return self
|
||||
}
|
||||
|
||||
#if canImport(UIKit)
|
||||
@discardableResult
|
||||
@available(iOS 11.0, tvOS 11.0, *)
|
||||
public func inset(_ amount: ConstraintDirectionalInsetTarget) -> ConstraintMakerEditable {
|
||||
self.description.constant = amount.constraintDirectionalInsetTargetValue
|
||||
return self
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -1,195 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
public class ConstraintMakerExtendable: ConstraintMakerRelatable {
|
||||
|
||||
public var left: ConstraintMakerExtendable {
|
||||
self.description.attributes += .left
|
||||
return self
|
||||
}
|
||||
|
||||
public var top: ConstraintMakerExtendable {
|
||||
self.description.attributes += .top
|
||||
return self
|
||||
}
|
||||
|
||||
public var bottom: ConstraintMakerExtendable {
|
||||
self.description.attributes += .bottom
|
||||
return self
|
||||
}
|
||||
|
||||
public var right: ConstraintMakerExtendable {
|
||||
self.description.attributes += .right
|
||||
return self
|
||||
}
|
||||
|
||||
public var leading: ConstraintMakerExtendable {
|
||||
self.description.attributes += .leading
|
||||
return self
|
||||
}
|
||||
|
||||
public var trailing: ConstraintMakerExtendable {
|
||||
self.description.attributes += .trailing
|
||||
return self
|
||||
}
|
||||
|
||||
public var width: ConstraintMakerExtendable {
|
||||
self.description.attributes += .width
|
||||
return self
|
||||
}
|
||||
|
||||
public var height: ConstraintMakerExtendable {
|
||||
self.description.attributes += .height
|
||||
return self
|
||||
}
|
||||
|
||||
public var centerX: ConstraintMakerExtendable {
|
||||
self.description.attributes += .centerX
|
||||
return self
|
||||
}
|
||||
|
||||
public var centerY: ConstraintMakerExtendable {
|
||||
self.description.attributes += .centerY
|
||||
return self
|
||||
}
|
||||
|
||||
@available(*, deprecated, renamed:"lastBaseline")
|
||||
public var baseline: ConstraintMakerExtendable {
|
||||
self.description.attributes += .lastBaseline
|
||||
return self
|
||||
}
|
||||
|
||||
public var lastBaseline: ConstraintMakerExtendable {
|
||||
self.description.attributes += .lastBaseline
|
||||
return self
|
||||
}
|
||||
|
||||
@available(iOS 8.0, OSX 10.11, *)
|
||||
public var firstBaseline: ConstraintMakerExtendable {
|
||||
self.description.attributes += .firstBaseline
|
||||
return self
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var leftMargin: ConstraintMakerExtendable {
|
||||
self.description.attributes += .leftMargin
|
||||
return self
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var rightMargin: ConstraintMakerExtendable {
|
||||
self.description.attributes += .rightMargin
|
||||
return self
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var topMargin: ConstraintMakerExtendable {
|
||||
self.description.attributes += .topMargin
|
||||
return self
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var bottomMargin: ConstraintMakerExtendable {
|
||||
self.description.attributes += .bottomMargin
|
||||
return self
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var leadingMargin: ConstraintMakerExtendable {
|
||||
self.description.attributes += .leadingMargin
|
||||
return self
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var trailingMargin: ConstraintMakerExtendable {
|
||||
self.description.attributes += .trailingMargin
|
||||
return self
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var centerXWithinMargins: ConstraintMakerExtendable {
|
||||
self.description.attributes += .centerXWithinMargins
|
||||
return self
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var centerYWithinMargins: ConstraintMakerExtendable {
|
||||
self.description.attributes += .centerYWithinMargins
|
||||
return self
|
||||
}
|
||||
|
||||
public var edges: ConstraintMakerExtendable {
|
||||
self.description.attributes += .edges
|
||||
return self
|
||||
}
|
||||
public var horizontalEdges: ConstraintMakerExtendable {
|
||||
self.description.attributes += .horizontalEdges
|
||||
return self
|
||||
}
|
||||
public var verticalEdges: ConstraintMakerExtendable {
|
||||
self.description.attributes += .verticalEdges
|
||||
return self
|
||||
}
|
||||
public var directionalEdges: ConstraintMakerExtendable {
|
||||
self.description.attributes += .directionalEdges
|
||||
return self
|
||||
}
|
||||
public var directionalHorizontalEdges: ConstraintMakerExtendable {
|
||||
self.description.attributes += .directionalHorizontalEdges
|
||||
return self
|
||||
}
|
||||
public var directionalVerticalEdges: ConstraintMakerExtendable {
|
||||
self.description.attributes += .directionalVerticalEdges
|
||||
return self
|
||||
}
|
||||
public var size: ConstraintMakerExtendable {
|
||||
self.description.attributes += .size
|
||||
return self
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var margins: ConstraintMakerExtendable {
|
||||
self.description.attributes += .margins
|
||||
return self
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var directionalMargins: ConstraintMakerExtendable {
|
||||
self.description.attributes += .directionalMargins
|
||||
return self
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var centerWithinMargins: ConstraintMakerExtendable {
|
||||
self.description.attributes += .centerWithinMargins
|
||||
return self
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
public class ConstraintMakerFinalizable {
|
||||
|
||||
internal let description: ConstraintDescription
|
||||
|
||||
internal init(_ description: ConstraintDescription) {
|
||||
self.description = description
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
public func labeled(_ label: String) -> ConstraintMakerFinalizable {
|
||||
self.description.label = label
|
||||
return self
|
||||
}
|
||||
|
||||
public var constraint: Constraint {
|
||||
return self.description.constraint!
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
@available(*, deprecated, message:"Use ConstraintMakerPrioritizable instead.")
|
||||
public typealias ConstraintMakerPriortizable = ConstraintMakerPrioritizable
|
||||
|
||||
public class ConstraintMakerPrioritizable: ConstraintMakerFinalizable {
|
||||
|
||||
@discardableResult
|
||||
public func priority(_ amount: ConstraintPriority) -> ConstraintMakerFinalizable {
|
||||
self.description.priority = amount.value
|
||||
return self
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
public func priority(_ amount: ConstraintPriorityTarget) -> ConstraintMakerFinalizable {
|
||||
self.description.priority = amount
|
||||
return self
|
||||
}
|
||||
|
||||
@available(*, deprecated, message:"Use priority(.required) instead.")
|
||||
@discardableResult
|
||||
public func priorityRequired() -> ConstraintMakerFinalizable {
|
||||
return self.priority(.required)
|
||||
}
|
||||
|
||||
@available(*, deprecated, message:"Use priority(.high) instead.")
|
||||
@discardableResult
|
||||
public func priorityHigh() -> ConstraintMakerFinalizable {
|
||||
return self.priority(.high)
|
||||
}
|
||||
|
||||
@available(*, deprecated, message:"Use priority(.medium) instead.")
|
||||
@discardableResult
|
||||
public func priorityMedium() -> ConstraintMakerFinalizable {
|
||||
return self.priority(.medium)
|
||||
}
|
||||
|
||||
@available(*, deprecated, message:"Use priority(.low) instead.")
|
||||
@discardableResult
|
||||
public func priorityLow() -> ConstraintMakerFinalizable {
|
||||
return self.priority(.low)
|
||||
}
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
extension ConstraintMakerRelatable {
|
||||
|
||||
@discardableResult
|
||||
public func equalToSuperview<T: ConstraintRelatableTarget>(_ closure: (ConstraintView) -> T, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable {
|
||||
guard let other = self.description.item.superview else {
|
||||
fatalError("Expected superview but found nil when attempting make constraint `equalToSuperview`.")
|
||||
}
|
||||
return self.relatedTo(closure(other), relation: .equal, file: file, line: line)
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
public func lessThanOrEqualToSuperview<T: ConstraintRelatableTarget>(_ closure: (ConstraintView) -> T, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable {
|
||||
guard let other = self.description.item.superview else {
|
||||
fatalError("Expected superview but found nil when attempting make constraint `lessThanOrEqualToSuperview`.")
|
||||
}
|
||||
return self.relatedTo(closure(other), relation: .lessThanOrEqual, file: file, line: line)
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
public func greaterThanOrEqualToSuperview<T: ConstraintRelatableTarget>(_ closure: (ConstraintView) -> T, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable {
|
||||
guard let other = self.description.item.superview else {
|
||||
fatalError("Expected superview but found nil when attempting make constraint `greaterThanOrEqualToSuperview`.")
|
||||
}
|
||||
return self.relatedTo(closure(other), relation: .greaterThanOrEqual, file: file, line: line)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,115 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
public class ConstraintMakerRelatable {
|
||||
|
||||
internal let description: ConstraintDescription
|
||||
|
||||
internal init(_ description: ConstraintDescription) {
|
||||
self.description = description
|
||||
}
|
||||
|
||||
internal func relatedTo(_ other: ConstraintRelatableTarget, relation: ConstraintRelation, file: String, line: UInt) -> ConstraintMakerEditable {
|
||||
let related: ConstraintItem
|
||||
let constant: ConstraintConstantTarget
|
||||
|
||||
if let other = other as? ConstraintItem {
|
||||
guard other.attributes == ConstraintAttributes.none ||
|
||||
other.attributes.layoutAttributes.count <= 1 ||
|
||||
other.attributes.layoutAttributes == self.description.attributes.layoutAttributes ||
|
||||
other.attributes == .edges && self.description.attributes == .margins ||
|
||||
other.attributes == .margins && self.description.attributes == .edges ||
|
||||
other.attributes == .directionalEdges && self.description.attributes == .directionalMargins ||
|
||||
other.attributes == .directionalMargins && self.description.attributes == .directionalEdges else {
|
||||
fatalError("Cannot constraint to multiple non identical attributes. (\(file), \(line))");
|
||||
}
|
||||
|
||||
related = other
|
||||
constant = 0.0
|
||||
} else if let other = other as? ConstraintView {
|
||||
related = ConstraintItem(target: other, attributes: ConstraintAttributes.none)
|
||||
constant = 0.0
|
||||
} else if let other = other as? ConstraintConstantTarget {
|
||||
related = ConstraintItem(target: nil, attributes: ConstraintAttributes.none)
|
||||
constant = other
|
||||
} else if #available(iOS 9.0, OSX 10.11, *), let other = other as? ConstraintLayoutGuide {
|
||||
related = ConstraintItem(target: other, attributes: ConstraintAttributes.none)
|
||||
constant = 0.0
|
||||
} else {
|
||||
fatalError("Invalid constraint. (\(file), \(line))")
|
||||
}
|
||||
|
||||
let editable = ConstraintMakerEditable(self.description)
|
||||
editable.description.sourceLocation = (file, line)
|
||||
editable.description.relation = relation
|
||||
editable.description.related = related
|
||||
editable.description.constant = constant
|
||||
return editable
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
public func equalTo(_ other: ConstraintRelatableTarget, _ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable {
|
||||
return self.relatedTo(other, relation: .equal, file: file, line: line)
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
public func equalToSuperview(_ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable {
|
||||
guard let other = self.description.item.superview else {
|
||||
fatalError("Expected superview but found nil when attempting make constraint `equalToSuperview`.")
|
||||
}
|
||||
return self.relatedTo(other, relation: .equal, file: file, line: line)
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
public func lessThanOrEqualTo(_ other: ConstraintRelatableTarget, _ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable {
|
||||
return self.relatedTo(other, relation: .lessThanOrEqual, file: file, line: line)
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
public func lessThanOrEqualToSuperview(_ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable {
|
||||
guard let other = self.description.item.superview else {
|
||||
fatalError("Expected superview but found nil when attempting make constraint `lessThanOrEqualToSuperview`.")
|
||||
}
|
||||
return self.relatedTo(other, relation: .lessThanOrEqual, file: file, line: line)
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
public func greaterThanOrEqualTo(_ other: ConstraintRelatableTarget, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable {
|
||||
return self.relatedTo(other, relation: .greaterThanOrEqual, file: file, line: line)
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
public func greaterThanOrEqualToSuperview(_ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable {
|
||||
guard let other = self.description.item.superview else {
|
||||
fatalError("Expected superview but found nil when attempting make constraint `greaterThanOrEqualToSuperview`.")
|
||||
}
|
||||
return self.relatedTo(other, relation: .greaterThanOrEqual, file: file, line: line)
|
||||
}
|
||||
}
|
||||
@@ -1,75 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
public protocol ConstraintMultiplierTarget {
|
||||
|
||||
var constraintMultiplierTargetValue: CGFloat { get }
|
||||
|
||||
}
|
||||
|
||||
extension Int: ConstraintMultiplierTarget {
|
||||
|
||||
public var constraintMultiplierTargetValue: CGFloat {
|
||||
return CGFloat(self)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension UInt: ConstraintMultiplierTarget {
|
||||
|
||||
public var constraintMultiplierTargetValue: CGFloat {
|
||||
return CGFloat(self)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension Float: ConstraintMultiplierTarget {
|
||||
|
||||
public var constraintMultiplierTargetValue: CGFloat {
|
||||
return CGFloat(self)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension Double: ConstraintMultiplierTarget {
|
||||
|
||||
public var constraintMultiplierTargetValue: CGFloat {
|
||||
return CGFloat(self)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension CGFloat: ConstraintMultiplierTarget {
|
||||
|
||||
public var constraintMultiplierTargetValue: CGFloat {
|
||||
return self
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,69 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
public protocol ConstraintOffsetTarget: ConstraintConstantTarget {
|
||||
}
|
||||
|
||||
extension Int: ConstraintOffsetTarget {
|
||||
}
|
||||
|
||||
extension UInt: ConstraintOffsetTarget {
|
||||
}
|
||||
|
||||
extension Float: ConstraintOffsetTarget {
|
||||
}
|
||||
|
||||
extension Double: ConstraintOffsetTarget {
|
||||
}
|
||||
|
||||
extension CGFloat: ConstraintOffsetTarget {
|
||||
}
|
||||
|
||||
extension ConstraintOffsetTarget {
|
||||
|
||||
internal var constraintOffsetTargetValue: CGFloat {
|
||||
let offset: CGFloat
|
||||
if let amount = self as? Float {
|
||||
offset = CGFloat(amount)
|
||||
} else if let amount = self as? Double {
|
||||
offset = CGFloat(amount)
|
||||
} else if let amount = self as? CGFloat {
|
||||
offset = CGFloat(amount)
|
||||
} else if let amount = self as? Int {
|
||||
offset = CGFloat(amount)
|
||||
} else if let amount = self as? UInt {
|
||||
offset = CGFloat(amount)
|
||||
} else {
|
||||
offset = 0.0
|
||||
}
|
||||
return offset
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,77 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
public struct ConstraintPriority : ExpressibleByFloatLiteral, Equatable, Strideable {
|
||||
public typealias FloatLiteralType = Float
|
||||
|
||||
public let value: Float
|
||||
|
||||
public init(floatLiteral value: Float) {
|
||||
self.value = value
|
||||
}
|
||||
|
||||
public init(_ value: Float) {
|
||||
self.value = value
|
||||
}
|
||||
|
||||
public static var required: ConstraintPriority {
|
||||
return 1000.0
|
||||
}
|
||||
|
||||
public static var high: ConstraintPriority {
|
||||
return 750.0
|
||||
}
|
||||
|
||||
public static var medium: ConstraintPriority {
|
||||
#if os(OSX)
|
||||
return 501.0
|
||||
#else
|
||||
return 500.0
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
public static var low: ConstraintPriority {
|
||||
return 250.0
|
||||
}
|
||||
|
||||
public static func ==(lhs: ConstraintPriority, rhs: ConstraintPriority) -> Bool {
|
||||
return lhs.value == rhs.value
|
||||
}
|
||||
|
||||
// MARK: Strideable
|
||||
|
||||
public func advanced(by n: FloatLiteralType) -> ConstraintPriority {
|
||||
return ConstraintPriority(floatLiteral: value + n)
|
||||
}
|
||||
|
||||
public func distance(to other: ConstraintPriority) -> FloatLiteralType {
|
||||
return other.value - value
|
||||
}
|
||||
}
|
||||
@@ -1,85 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
public protocol ConstraintPriorityTarget {
|
||||
|
||||
var constraintPriorityTargetValue: Float { get }
|
||||
|
||||
}
|
||||
|
||||
extension Int: ConstraintPriorityTarget {
|
||||
|
||||
public var constraintPriorityTargetValue: Float {
|
||||
return Float(self)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension UInt: ConstraintPriorityTarget {
|
||||
|
||||
public var constraintPriorityTargetValue: Float {
|
||||
return Float(self)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension Float: ConstraintPriorityTarget {
|
||||
|
||||
public var constraintPriorityTargetValue: Float {
|
||||
return self
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension Double: ConstraintPriorityTarget {
|
||||
|
||||
public var constraintPriorityTargetValue: Float {
|
||||
return Float(self)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension CGFloat: ConstraintPriorityTarget {
|
||||
|
||||
public var constraintPriorityTargetValue: Float {
|
||||
return Float(self)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#if canImport(UIKit)
|
||||
extension UILayoutPriority: ConstraintPriorityTarget {
|
||||
|
||||
public var constraintPriorityTargetValue: Float {
|
||||
return self.rawValue
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
@@ -1,72 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
public protocol ConstraintRelatableTarget {
|
||||
}
|
||||
|
||||
extension Int: ConstraintRelatableTarget {
|
||||
}
|
||||
|
||||
extension UInt: ConstraintRelatableTarget {
|
||||
}
|
||||
|
||||
extension Float: ConstraintRelatableTarget {
|
||||
}
|
||||
|
||||
extension Double: ConstraintRelatableTarget {
|
||||
}
|
||||
|
||||
extension CGFloat: ConstraintRelatableTarget {
|
||||
}
|
||||
|
||||
extension CGSize: ConstraintRelatableTarget {
|
||||
}
|
||||
|
||||
extension CGPoint: ConstraintRelatableTarget {
|
||||
}
|
||||
|
||||
extension ConstraintInsets: ConstraintRelatableTarget {
|
||||
}
|
||||
|
||||
#if canImport(UIKit)
|
||||
@available(iOS 11.0, tvOS 11.0, *)
|
||||
extension ConstraintDirectionalInsets: ConstraintRelatableTarget {
|
||||
}
|
||||
#endif
|
||||
|
||||
extension ConstraintItem: ConstraintRelatableTarget {
|
||||
}
|
||||
|
||||
extension ConstraintView: ConstraintRelatableTarget {
|
||||
}
|
||||
|
||||
@available(iOS 9.0, OSX 10.11, *)
|
||||
extension ConstraintLayoutGuide: ConstraintRelatableTarget {
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
internal enum ConstraintRelation : Int {
|
||||
case equal = 1
|
||||
case lessThanOrEqual
|
||||
case greaterThanOrEqual
|
||||
|
||||
internal var layoutRelation: LayoutRelation {
|
||||
get {
|
||||
switch(self) {
|
||||
case .equal:
|
||||
return .equal
|
||||
case .lessThanOrEqual:
|
||||
return .lessThanOrEqual
|
||||
case .greaterThanOrEqual:
|
||||
return .greaterThanOrEqual
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,152 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
public extension ConstraintView {
|
||||
|
||||
@available(*, deprecated, renamed:"snp.left")
|
||||
var snp_left: ConstraintItem { return self.snp.left }
|
||||
|
||||
@available(*, deprecated, renamed:"snp.top")
|
||||
var snp_top: ConstraintItem { return self.snp.top }
|
||||
|
||||
@available(*, deprecated, renamed:"snp.right")
|
||||
var snp_right: ConstraintItem { return self.snp.right }
|
||||
|
||||
@available(*, deprecated, renamed:"snp.bottom")
|
||||
var snp_bottom: ConstraintItem { return self.snp.bottom }
|
||||
|
||||
@available(*, deprecated, renamed:"snp.leading")
|
||||
var snp_leading: ConstraintItem { return self.snp.leading }
|
||||
|
||||
@available(*, deprecated, renamed:"snp.trailing")
|
||||
var snp_trailing: ConstraintItem { return self.snp.trailing }
|
||||
|
||||
@available(*, deprecated, renamed:"snp.width")
|
||||
var snp_width: ConstraintItem { return self.snp.width }
|
||||
|
||||
@available(*, deprecated, renamed:"snp.height")
|
||||
var snp_height: ConstraintItem { return self.snp.height }
|
||||
|
||||
@available(*, deprecated, renamed:"snp.centerX")
|
||||
var snp_centerX: ConstraintItem { return self.snp.centerX }
|
||||
|
||||
@available(*, deprecated, renamed:"snp.centerY")
|
||||
var snp_centerY: ConstraintItem { return self.snp.centerY }
|
||||
|
||||
@available(*, deprecated, renamed:"snp.baseline")
|
||||
var snp_baseline: ConstraintItem { return self.snp.baseline }
|
||||
|
||||
@available(*, deprecated, renamed:"snp.lastBaseline")
|
||||
@available(iOS 8.0, OSX 10.11, *)
|
||||
var snp_lastBaseline: ConstraintItem { return self.snp.lastBaseline }
|
||||
|
||||
@available(iOS, deprecated, renamed:"snp.firstBaseline")
|
||||
@available(iOS 8.0, OSX 10.11, *)
|
||||
var snp_firstBaseline: ConstraintItem { return self.snp.firstBaseline }
|
||||
|
||||
@available(iOS, deprecated, renamed:"snp.leftMargin")
|
||||
@available(iOS 8.0, *)
|
||||
var snp_leftMargin: ConstraintItem { return self.snp.leftMargin }
|
||||
|
||||
@available(iOS, deprecated, renamed:"snp.topMargin")
|
||||
@available(iOS 8.0, *)
|
||||
var snp_topMargin: ConstraintItem { return self.snp.topMargin }
|
||||
|
||||
@available(iOS, deprecated, renamed:"snp.rightMargin")
|
||||
@available(iOS 8.0, *)
|
||||
var snp_rightMargin: ConstraintItem { return self.snp.rightMargin }
|
||||
|
||||
@available(iOS, deprecated, renamed:"snp.bottomMargin")
|
||||
@available(iOS 8.0, *)
|
||||
var snp_bottomMargin: ConstraintItem { return self.snp.bottomMargin }
|
||||
|
||||
@available(iOS, deprecated, renamed:"snp.leadingMargin")
|
||||
@available(iOS 8.0, *)
|
||||
var snp_leadingMargin: ConstraintItem { return self.snp.leadingMargin }
|
||||
|
||||
@available(iOS, deprecated, renamed:"snp.trailingMargin")
|
||||
@available(iOS 8.0, *)
|
||||
var snp_trailingMargin: ConstraintItem { return self.snp.trailingMargin }
|
||||
|
||||
@available(iOS, deprecated, renamed:"snp.centerXWithinMargins")
|
||||
@available(iOS 8.0, *)
|
||||
var snp_centerXWithinMargins: ConstraintItem { return self.snp.centerXWithinMargins }
|
||||
|
||||
@available(iOS, deprecated, renamed:"snp.centerYWithinMargins")
|
||||
@available(iOS 8.0, *)
|
||||
var snp_centerYWithinMargins: ConstraintItem { return self.snp.centerYWithinMargins }
|
||||
|
||||
@available(*, deprecated, renamed:"snp.edges")
|
||||
var snp_edges: ConstraintItem { return self.snp.edges }
|
||||
|
||||
@available(*, deprecated, renamed:"snp.size")
|
||||
var snp_size: ConstraintItem { return self.snp.size }
|
||||
|
||||
@available(*, deprecated, renamed:"snp.center")
|
||||
var snp_center: ConstraintItem { return self.snp.center }
|
||||
|
||||
@available(iOS, deprecated, renamed:"snp.margins")
|
||||
@available(iOS 8.0, *)
|
||||
var snp_margins: ConstraintItem { return self.snp.margins }
|
||||
|
||||
@available(iOS, deprecated, renamed:"snp.centerWithinMargins")
|
||||
@available(iOS 8.0, *)
|
||||
var snp_centerWithinMargins: ConstraintItem { return self.snp.centerWithinMargins }
|
||||
|
||||
@available(*, deprecated, renamed:"snp.prepareConstraints(_:)")
|
||||
func snp_prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] {
|
||||
return self.snp.prepareConstraints(closure)
|
||||
}
|
||||
|
||||
@available(*, deprecated, renamed:"snp.makeConstraints(_:)")
|
||||
func snp_makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
|
||||
self.snp.makeConstraints(closure)
|
||||
}
|
||||
|
||||
@available(*, deprecated, renamed:"snp.remakeConstraints(_:)")
|
||||
func snp_remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
|
||||
self.snp.remakeConstraints(closure)
|
||||
}
|
||||
|
||||
@available(*, deprecated, renamed:"snp.updateConstraints(_:)")
|
||||
func snp_updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
|
||||
self.snp.updateConstraints(closure)
|
||||
}
|
||||
|
||||
@available(*, deprecated, renamed:"snp.removeConstraints()")
|
||||
func snp_removeConstraints() {
|
||||
self.snp.removeConstraints()
|
||||
}
|
||||
|
||||
var snp: ConstraintViewDSL {
|
||||
return ConstraintViewDSL(view: self)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
#if canImport(UIKit)
|
||||
public typealias ConstraintView = UIView
|
||||
#else
|
||||
public typealias ConstraintView = NSView
|
||||
#endif
|
||||
@@ -1,101 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
public struct ConstraintViewDSL: ConstraintAttributesDSL {
|
||||
|
||||
@discardableResult
|
||||
public func prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] {
|
||||
return ConstraintMaker.prepareConstraints(item: self.view, closure: closure)
|
||||
}
|
||||
|
||||
public func makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
|
||||
ConstraintMaker.makeConstraints(item: self.view, closure: closure)
|
||||
}
|
||||
|
||||
public func remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
|
||||
ConstraintMaker.remakeConstraints(item: self.view, closure: closure)
|
||||
}
|
||||
|
||||
public func updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
|
||||
ConstraintMaker.updateConstraints(item: self.view, closure: closure)
|
||||
}
|
||||
|
||||
public func removeConstraints() {
|
||||
ConstraintMaker.removeConstraints(item: self.view)
|
||||
}
|
||||
|
||||
public var contentHuggingHorizontalPriority: Float {
|
||||
get {
|
||||
return self.view.contentHuggingPriority(for: .horizontal).rawValue
|
||||
}
|
||||
nonmutating set {
|
||||
self.view.setContentHuggingPriority(LayoutPriority(rawValue: newValue), for: .horizontal)
|
||||
}
|
||||
}
|
||||
|
||||
public var contentHuggingVerticalPriority: Float {
|
||||
get {
|
||||
return self.view.contentHuggingPriority(for: .vertical).rawValue
|
||||
}
|
||||
nonmutating set {
|
||||
self.view.setContentHuggingPriority(LayoutPriority(rawValue: newValue), for: .vertical)
|
||||
}
|
||||
}
|
||||
|
||||
public var contentCompressionResistanceHorizontalPriority: Float {
|
||||
get {
|
||||
return self.view.contentCompressionResistancePriority(for: .horizontal).rawValue
|
||||
}
|
||||
nonmutating set {
|
||||
self.view.setContentCompressionResistancePriority(LayoutPriority(rawValue: newValue), for: .horizontal)
|
||||
}
|
||||
}
|
||||
|
||||
public var contentCompressionResistanceVerticalPriority: Float {
|
||||
get {
|
||||
return self.view.contentCompressionResistancePriority(for: .vertical).rawValue
|
||||
}
|
||||
nonmutating set {
|
||||
self.view.setContentCompressionResistancePriority(LayoutPriority(rawValue: newValue), for: .vertical)
|
||||
}
|
||||
}
|
||||
|
||||
public var target: AnyObject? {
|
||||
return self.view
|
||||
}
|
||||
|
||||
internal let view: ConstraintView
|
||||
|
||||
internal init(view: ConstraintView) {
|
||||
self.view = view
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
-169
@@ -1,169 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
public extension LayoutConstraint {
|
||||
|
||||
override var description: String {
|
||||
var description = "<"
|
||||
|
||||
description += descriptionForObject(self)
|
||||
|
||||
if let firstItem = conditionalOptional(from: self.firstItem) {
|
||||
description += " \(descriptionForObject(firstItem))"
|
||||
}
|
||||
|
||||
if self.firstAttribute != .notAnAttribute {
|
||||
description += ".\(descriptionForAttribute(self.firstAttribute))"
|
||||
}
|
||||
|
||||
description += " \(descriptionForRelation(self.relation))"
|
||||
|
||||
if let secondItem = self.secondItem {
|
||||
description += " \(descriptionForObject(secondItem))"
|
||||
}
|
||||
|
||||
if self.secondAttribute != .notAnAttribute {
|
||||
description += ".\(descriptionForAttribute(self.secondAttribute))"
|
||||
}
|
||||
|
||||
if self.multiplier != 1.0 {
|
||||
description += " * \(self.multiplier)"
|
||||
}
|
||||
|
||||
if self.secondAttribute == .notAnAttribute {
|
||||
description += " \(self.constant)"
|
||||
} else {
|
||||
if self.constant > 0.0 {
|
||||
description += " + \(self.constant)"
|
||||
} else if self.constant < 0.0 {
|
||||
description += " - \(abs(self.constant))"
|
||||
}
|
||||
}
|
||||
|
||||
if self.priority.rawValue != 1000.0 {
|
||||
description += " ^\(self.priority)"
|
||||
}
|
||||
|
||||
description += ">"
|
||||
|
||||
return description
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private func descriptionForRelation(_ relation: LayoutRelation) -> String {
|
||||
switch relation {
|
||||
case .equal: return "=="
|
||||
case .greaterThanOrEqual: return ">="
|
||||
case .lessThanOrEqual: return "<="
|
||||
#if swift(>=5.0)
|
||||
@unknown default: return "unknown"
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
private func descriptionForAttribute(_ attribute: LayoutAttribute) -> String {
|
||||
#if canImport(UIKit)
|
||||
switch attribute {
|
||||
case .notAnAttribute: return "notAnAttribute"
|
||||
case .top: return "top"
|
||||
case .left: return "left"
|
||||
case .bottom: return "bottom"
|
||||
case .right: return "right"
|
||||
case .leading: return "leading"
|
||||
case .trailing: return "trailing"
|
||||
case .width: return "width"
|
||||
case .height: return "height"
|
||||
case .centerX: return "centerX"
|
||||
case .centerY: return "centerY"
|
||||
case .lastBaseline: return "lastBaseline"
|
||||
case .firstBaseline: return "firstBaseline"
|
||||
case .topMargin: return "topMargin"
|
||||
case .leftMargin: return "leftMargin"
|
||||
case .bottomMargin: return "bottomMargin"
|
||||
case .rightMargin: return "rightMargin"
|
||||
case .leadingMargin: return "leadingMargin"
|
||||
case .trailingMargin: return "trailingMargin"
|
||||
case .centerXWithinMargins: return "centerXWithinMargins"
|
||||
case .centerYWithinMargins: return "centerYWithinMargins"
|
||||
#if swift(>=5.0)
|
||||
@unknown default: return "unknown"
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
switch attribute {
|
||||
case .notAnAttribute: return "notAnAttribute"
|
||||
case .top: return "top"
|
||||
case .left: return "left"
|
||||
case .bottom: return "bottom"
|
||||
case .right: return "right"
|
||||
case .leading: return "leading"
|
||||
case .trailing: return "trailing"
|
||||
case .width: return "width"
|
||||
case .height: return "height"
|
||||
case .centerX: return "centerX"
|
||||
case .centerY: return "centerY"
|
||||
case .lastBaseline: return "lastBaseline"
|
||||
case .firstBaseline: return "firstBaseline"
|
||||
#if swift(>=5.0)
|
||||
@unknown default: return "unknown"
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
private func conditionalOptional<T>(from object: Optional<T>) -> Optional<T> {
|
||||
return object
|
||||
}
|
||||
|
||||
private func conditionalOptional<T>(from object: T) -> Optional<T> {
|
||||
return Optional.some(object)
|
||||
}
|
||||
|
||||
private func descriptionForObject(_ object: AnyObject) -> String {
|
||||
let pointerDescription = String(format: "%p", UInt(bitPattern: ObjectIdentifier(object)))
|
||||
var desc = ""
|
||||
|
||||
desc += type(of: object).description()
|
||||
|
||||
if let object = object as? ConstraintView {
|
||||
desc += ":\(object.snp.label() ?? pointerDescription)"
|
||||
} else if let object = object as? LayoutConstraint {
|
||||
desc += ":\(object.label ?? pointerDescription)"
|
||||
} else {
|
||||
desc += ":\(pointerDescription)"
|
||||
}
|
||||
|
||||
if let object = object as? LayoutConstraint, let file = object.constraint?.sourceLocation.0, let line = object.constraint?.sourceLocation.1 {
|
||||
desc += "@\((file as NSString).lastPathComponent)#\(line)"
|
||||
}
|
||||
|
||||
desc += ""
|
||||
return desc
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
public class LayoutConstraint : NSLayoutConstraint {
|
||||
|
||||
public var label: String? {
|
||||
get {
|
||||
return self.identifier
|
||||
}
|
||||
set {
|
||||
self.identifier = newValue
|
||||
}
|
||||
}
|
||||
|
||||
internal weak var constraint: Constraint? = nil
|
||||
|
||||
}
|
||||
|
||||
internal func ==(lhs: LayoutConstraint, rhs: LayoutConstraint) -> Bool {
|
||||
// If firstItem or secondItem on either constraint has a dangling pointer
|
||||
// this comparison can cause a crash. The solution for this is to ensure
|
||||
// your layout code hold strong references to things like Views, LayoutGuides
|
||||
// and LayoutAnchors as SnapKit will not keep strong references to any of these.
|
||||
guard lhs.firstAttribute == rhs.firstAttribute &&
|
||||
lhs.secondAttribute == rhs.secondAttribute &&
|
||||
lhs.relation == rhs.relation &&
|
||||
lhs.priority == rhs.priority &&
|
||||
lhs.multiplier == rhs.multiplier &&
|
||||
lhs.secondItem === rhs.secondItem &&
|
||||
lhs.firstItem === rhs.firstItem else {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
@@ -1,93 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#else
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
|
||||
public protocol LayoutConstraintItem: AnyObject {
|
||||
}
|
||||
|
||||
@available(iOS 9.0, OSX 10.11, *)
|
||||
extension ConstraintLayoutGuide : LayoutConstraintItem {
|
||||
}
|
||||
|
||||
extension ConstraintView : LayoutConstraintItem {
|
||||
}
|
||||
|
||||
|
||||
extension LayoutConstraintItem {
|
||||
|
||||
internal func prepare() {
|
||||
if let view = self as? ConstraintView {
|
||||
view.translatesAutoresizingMaskIntoConstraints = false
|
||||
}
|
||||
}
|
||||
|
||||
internal var superview: ConstraintView? {
|
||||
if let view = self as? ConstraintView {
|
||||
return view.superview
|
||||
}
|
||||
|
||||
if #available(iOS 9.0, OSX 10.11, *), let guide = self as? ConstraintLayoutGuide {
|
||||
return guide.owningView
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
internal var constraints: [Constraint] {
|
||||
return self.constraintsSet.allObjects as! [Constraint]
|
||||
}
|
||||
|
||||
internal func add(constraints: [Constraint]) {
|
||||
let constraintsSet = self.constraintsSet
|
||||
for constraint in constraints {
|
||||
constraintsSet.add(constraint)
|
||||
}
|
||||
}
|
||||
|
||||
internal func remove(constraints: [Constraint]) {
|
||||
let constraintsSet = self.constraintsSet
|
||||
for constraint in constraints {
|
||||
constraintsSet.remove(constraint)
|
||||
}
|
||||
}
|
||||
|
||||
private var constraintsSet: NSMutableSet {
|
||||
let constraintsSet: NSMutableSet
|
||||
|
||||
if let existing = objc_getAssociatedObject(self, &constraintsKey) as? NSMutableSet {
|
||||
constraintsSet = existing
|
||||
} else {
|
||||
constraintsSet = NSMutableSet()
|
||||
objc_setAssociatedObject(self, &constraintsKey, constraintsSet, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
|
||||
}
|
||||
return constraintsSet
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
private var constraintsKey: UInt8 = 0
|
||||
@@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>NSPrivacyTracking</key>
|
||||
<false/>
|
||||
<key>NSPrivacyAccessedAPITypes</key>
|
||||
<array/>
|
||||
<key>NSPrivacyCollectedDataTypes</key>
|
||||
<array/>
|
||||
<key>NSPrivacyTrackingDomains</key>
|
||||
<array/>
|
||||
</dict>
|
||||
</plist>
|
||||
-42
@@ -1,42 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
import Foundation
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#if swift(>=4.2)
|
||||
typealias LayoutRelation = NSLayoutConstraint.Relation
|
||||
typealias LayoutAttribute = NSLayoutConstraint.Attribute
|
||||
#else
|
||||
typealias LayoutRelation = NSLayoutRelation
|
||||
typealias LayoutAttribute = NSLayoutAttribute
|
||||
#endif
|
||||
typealias LayoutPriority = UILayoutPriority
|
||||
#else
|
||||
import AppKit
|
||||
typealias LayoutRelation = NSLayoutConstraint.Relation
|
||||
typealias LayoutAttribute = NSLayoutConstraint.Attribute
|
||||
typealias LayoutPriority = NSLayoutConstraint.Priority
|
||||
#endif
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
//
|
||||
// SnapKit
|
||||
//
|
||||
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#endif
|
||||
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public extension ConstraintLayoutSupport {
|
||||
|
||||
var snp: ConstraintLayoutSupportDSL {
|
||||
return ConstraintLayoutSupportDSL(support: self)
|
||||
}
|
||||
|
||||
}
|
||||
ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-acknowledgements.markdown
Generated
-23
@@ -53,29 +53,6 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
## SnapKit
|
||||
|
||||
Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
|
||||
## ZIPFoundation
|
||||
|
||||
MIT License
|
||||
|
||||
Generated
-29
@@ -76,35 +76,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
<key>Type</key>
|
||||
<string>PSGroupSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>FooterText</key>
|
||||
<string>Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
</string>
|
||||
<key>License</key>
|
||||
<string>MIT</string>
|
||||
<key>Title</key>
|
||||
<string>SnapKit</string>
|
||||
<key>Type</key>
|
||||
<string>PSGroupSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>FooterText</key>
|
||||
<string>MIT License
|
||||
|
||||
-2
@@ -2,6 +2,4 @@ ${PODS_ROOT}/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks
|
||||
${BUILT_PRODUCTS_DIR}/DTCoreText/DTCoreText.framework
|
||||
${BUILT_PRODUCTS_DIR}/DTFoundation/DTFoundation.framework
|
||||
${BUILT_PRODUCTS_DIR}/RDReaderView/RDReaderView.framework
|
||||
${BUILT_PRODUCTS_DIR}/SSAlertSwift/SSAlertSwift.framework
|
||||
${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework
|
||||
${BUILT_PRODUCTS_DIR}/ZIPFoundation/ZIPFoundation.framework
|
||||
-2
@@ -1,6 +1,4 @@
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DTCoreText.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DTFoundation.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RDReaderView.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SSAlertSwift.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZIPFoundation.framework
|
||||
-2
@@ -2,6 +2,4 @@ ${PODS_ROOT}/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks
|
||||
${BUILT_PRODUCTS_DIR}/DTCoreText/DTCoreText.framework
|
||||
${BUILT_PRODUCTS_DIR}/DTFoundation/DTFoundation.framework
|
||||
${BUILT_PRODUCTS_DIR}/RDReaderView/RDReaderView.framework
|
||||
${BUILT_PRODUCTS_DIR}/SSAlertSwift/SSAlertSwift.framework
|
||||
${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework
|
||||
${BUILT_PRODUCTS_DIR}/ZIPFoundation/ZIPFoundation.framework
|
||||
-2
@@ -1,6 +1,4 @@
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DTCoreText.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DTFoundation.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RDReaderView.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SSAlertSwift.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZIPFoundation.framework
|
||||
-4
@@ -179,16 +179,12 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/DTCoreText/DTCoreText.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/DTFoundation/DTFoundation.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/RDReaderView/RDReaderView.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/SSAlertSwift/SSAlertSwift.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/ZIPFoundation/ZIPFoundation.framework"
|
||||
fi
|
||||
if [[ "$CONFIGURATION" == "Release" ]]; then
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/DTCoreText/DTCoreText.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/DTFoundation/DTFoundation.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/RDReaderView/RDReaderView.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/SSAlertSwift/SSAlertSwift.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/ZIPFoundation/ZIPFoundation.framework"
|
||||
fi
|
||||
if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
|
||||
|
||||
+5
-5
@@ -1,12 +1,12 @@
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "${PODS_CONFIGURATION_BUILD_DIR}/RDReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/SSAlertSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation"
|
||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "${PODS_CONFIGURATION_BUILD_DIR}/RDReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation"
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText/DTCoreText.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation/DTFoundation.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDReaderView/RDReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SSAlertSwift/SSAlertSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.framework/Headers" "$(SDKROOT)/usr/include/libxml2"
|
||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText/DTCoreText.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation/DTFoundation.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDReaderView/RDReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.framework/Headers" "$(SDKROOT)/usr/include/libxml2"
|
||||
LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
||||
OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -l"xml2" -framework "CoreGraphics" -framework "CoreText" -framework "DTCoreText" -framework "DTFoundation" -framework "ImageIO" -framework "MediaPlayer" -framework "QuartzCore" -framework "RDReaderView" -framework "SSAlertSwift" -framework "SnapKit" -framework "ZIPFoundation"
|
||||
OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "-F${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SSAlertSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation"
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
|
||||
OTHER_LDFLAGS = $(inherited) -l"xml2" -framework "CoreGraphics" -framework "CoreText" -framework "DTCoreText" -framework "DTFoundation" -framework "ImageIO" -framework "MediaPlayer" -framework "QuartzCore" -framework "RDReaderView" -framework "ZIPFoundation"
|
||||
OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "-F${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation"
|
||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||
|
||||
Generated
+5
-5
@@ -1,12 +1,12 @@
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "${PODS_CONFIGURATION_BUILD_DIR}/RDReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/SSAlertSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation"
|
||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "${PODS_CONFIGURATION_BUILD_DIR}/RDReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation"
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText/DTCoreText.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation/DTFoundation.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDReaderView/RDReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SSAlertSwift/SSAlertSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.framework/Headers" "$(SDKROOT)/usr/include/libxml2"
|
||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText/DTCoreText.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation/DTFoundation.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDReaderView/RDReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.framework/Headers" "$(SDKROOT)/usr/include/libxml2"
|
||||
LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
||||
OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -l"xml2" -framework "CoreGraphics" -framework "CoreText" -framework "DTCoreText" -framework "DTFoundation" -framework "ImageIO" -framework "MediaPlayer" -framework "QuartzCore" -framework "RDReaderView" -framework "SSAlertSwift" -framework "SnapKit" -framework "ZIPFoundation"
|
||||
OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "-F${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SSAlertSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation"
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
|
||||
OTHER_LDFLAGS = $(inherited) -l"xml2" -framework "CoreGraphics" -framework "CoreText" -framework "DTCoreText" -framework "DTFoundation" -framework "ImageIO" -framework "MediaPlayer" -framework "QuartzCore" -framework "RDReaderView" -framework "ZIPFoundation"
|
||||
OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "-F${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation"
|
||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RDReaderView
|
||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "${PODS_CONFIGURATION_BUILD_DIR}/SSAlertSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation"
|
||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation"
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
|
||||
OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "CoreText" -framework "DTCoreText" -framework "ImageIO" -framework "MediaPlayer" -framework "QuartzCore" -framework "SSAlertSwift" -framework "SnapKit" -framework "ZIPFoundation"
|
||||
OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "CoreText" -framework "DTCoreText" -framework "ImageIO" -framework "MediaPlayer" -framework "QuartzCore" -framework "ZIPFoundation"
|
||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RDReaderView
|
||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "${PODS_CONFIGURATION_BUILD_DIR}/SSAlertSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation"
|
||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation"
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
|
||||
OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "CoreText" -framework "DTCoreText" -framework "ImageIO" -framework "MediaPlayer" -framework "QuartzCore" -framework "SSAlertSwift" -framework "SnapKit" -framework "ZIPFoundation"
|
||||
OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "CoreText" -framework "DTCoreText" -framework "ImageIO" -framework "MediaPlayer" -framework "QuartzCore" -framework "ZIPFoundation"
|
||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>${PODS_DEVELOPMENT_LANGUAGE}</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>${EXECUTABLE_NAME}</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>${PRODUCT_NAME}</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.0.15</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>${CURRENT_PROJECT_VERSION}</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1,5 +0,0 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
@interface PodsDummy_SSAlertSwift : NSObject
|
||||
@end
|
||||
@implementation PodsDummy_SSAlertSwift
|
||||
@end
|
||||
@@ -1,12 +0,0 @@
|
||||
#ifdef __OBJC__
|
||||
#import <UIKit/UIKit.h>
|
||||
#else
|
||||
#ifndef FOUNDATION_EXPORT
|
||||
#if defined(__cplusplus)
|
||||
#define FOUNDATION_EXPORT extern "C"
|
||||
#else
|
||||
#define FOUNDATION_EXPORT extern
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
#ifdef __OBJC__
|
||||
#import <UIKit/UIKit.h>
|
||||
#else
|
||||
#ifndef FOUNDATION_EXPORT
|
||||
#if defined(__cplusplus)
|
||||
#define FOUNDATION_EXPORT extern "C"
|
||||
#else
|
||||
#define FOUNDATION_EXPORT extern
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
FOUNDATION_EXPORT double SSAlertSwiftVersionNumber;
|
||||
FOUNDATION_EXPORT const unsigned char SSAlertSwiftVersionString[];
|
||||
|
||||
-14
@@ -1,14 +0,0 @@
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SSAlertSwift
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
|
||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||
PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
|
||||
PODS_ROOT = ${SRCROOT}
|
||||
PODS_TARGET_SRCROOT = ${PODS_ROOT}/SSAlertSwift
|
||||
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
|
||||
SKIP_INSTALL = YES
|
||||
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
||||
@@ -1,6 +0,0 @@
|
||||
framework module SSAlertSwift {
|
||||
umbrella header "SSAlertSwift-umbrella.h"
|
||||
|
||||
export *
|
||||
module * { export * }
|
||||
}
|
||||
-14
@@ -1,14 +0,0 @@
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SSAlertSwift
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
|
||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||
PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
|
||||
PODS_ROOT = ${SRCROOT}
|
||||
PODS_TARGET_SRCROOT = ${PODS_ROOT}/SSAlertSwift
|
||||
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
|
||||
SKIP_INSTALL = YES
|
||||
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
||||
Generated
-24
@@ -1,24 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>${PODS_DEVELOPMENT_LANGUAGE}</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>${PRODUCT_NAME}</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>BNDL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>5.7.1</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1,26 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>${PODS_DEVELOPMENT_LANGUAGE}</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>${EXECUTABLE_NAME}</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>${PRODUCT_NAME}</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>5.7.1</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>${CURRENT_PROJECT_VERSION}</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1,5 +0,0 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
@interface PodsDummy_SnapKit : NSObject
|
||||
@end
|
||||
@implementation PodsDummy_SnapKit
|
||||
@end
|
||||
@@ -1,12 +0,0 @@
|
||||
#ifdef __OBJC__
|
||||
#import <UIKit/UIKit.h>
|
||||
#else
|
||||
#ifndef FOUNDATION_EXPORT
|
||||
#if defined(__cplusplus)
|
||||
#define FOUNDATION_EXPORT extern "C"
|
||||
#else
|
||||
#define FOUNDATION_EXPORT extern
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
#ifdef __OBJC__
|
||||
#import <UIKit/UIKit.h>
|
||||
#else
|
||||
#ifndef FOUNDATION_EXPORT
|
||||
#if defined(__cplusplus)
|
||||
#define FOUNDATION_EXPORT extern "C"
|
||||
#else
|
||||
#define FOUNDATION_EXPORT extern
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
FOUNDATION_EXPORT double SnapKitVersionNumber;
|
||||
FOUNDATION_EXPORT const unsigned char SnapKitVersionString[];
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
||||
OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics"
|
||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||
PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
|
||||
PODS_ROOT = ${SRCROOT}
|
||||
PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit
|
||||
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
|
||||
SKIP_INSTALL = YES
|
||||
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
||||
@@ -1,6 +0,0 @@
|
||||
framework module SnapKit {
|
||||
umbrella header "SnapKit-umbrella.h"
|
||||
|
||||
export *
|
||||
module * { export * }
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
||||
OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics"
|
||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||
PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
|
||||
PODS_ROOT = ${SRCROOT}
|
||||
PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit
|
||||
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
|
||||
SKIP_INSTALL = YES
|
||||
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
||||
Reference in New Issue
Block a user