This commit is contained in:
DDIsFriend
2023-08-18 17:28:57 +08:00
commit f0e8a1709d
4282 changed files with 192396 additions and 0 deletions

View File

@@ -0,0 +1,63 @@
//
// GradientView.swift
// SwiftEntryKit
//
// Created by Daniel Huri on 4/20/18.
// Copyright (c) 2018 huri000@gmail.com. All rights reserved.
//
import UIKit
class GradientView: UIView {
struct Style {
let gradient: EKAttributes.BackgroundStyle.Gradient
let displayMode: EKAttributes.DisplayMode
init?(gradient: EKAttributes.BackgroundStyle.Gradient?,
displayMode: EKAttributes.DisplayMode) {
guard let gradient = gradient else {
return nil
}
self.gradient = gradient
self.displayMode = displayMode
}
}
private let gradientLayer = CAGradientLayer()
var style: Style? {
didSet {
setupColor()
}
}
init() {
super.init(frame: .zero)
layer.addSublayer(gradientLayer)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func layoutSubviews() {
super.layoutSubviews()
gradientLayer.frame = bounds
}
private func setupColor() {
guard let style = style else {
return
}
gradientLayer.colors = style.gradient.colors.map {
$0.color(for: traitCollection, mode: style.displayMode).cgColor
}
gradientLayer.startPoint = style.gradient.startPoint
gradientLayer.endPoint = style.gradient.endPoint
}
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
setupColor()
}
}

View File

@@ -0,0 +1,20 @@
//
// HapticFeedbackGenerator.swift
// SwiftEntryKit
//
// Created by Daniel Huri on 4/20/18.
// Copyright (c) 2018 huri000@gmail.com. All rights reserved.
//
import UIKit
struct HapticFeedbackGenerator {
@available(iOS 10.0, *)
static func notification(type: EKAttributes.NotificationHapticFeedback) {
guard let value = type.value else {
return
}
let generator = UINotificationFeedbackGenerator()
generator.notificationOccurred(value)
}
}

View File

@@ -0,0 +1,22 @@
//
// UIView+Responder.swift
// SwiftEntryKit
//
// Created by Daniel Huri on 5/17/18.
//
import UIKit
extension UIView {
var containsFirstResponder: Bool {
var contains = false
for subview in subviews.reversed() where !contains {
if subview.isFirstResponder {
contains = true
} else {
contains = subview.containsFirstResponder
}
}
return contains
}
}