583 lines
17 KiB
Swift
583 lines
17 KiB
Swift
|
|
import Foundation
|
|
|
|
import UIKit
|
|
import SnapKit
|
|
import YYCategories
|
|
|
|
class GHRecordParserView: UIView {
|
|
var likePadding: Float? = 0.0
|
|
var default_p: Double? = 0.0
|
|
private var layoutGrid_str: String!
|
|
|
|
|
|
|
|
|
|
var contentHeight: CGFloat {
|
|
return self.scrollView.contentSize.height
|
|
}
|
|
|
|
var didChangeHeight: (() -> Void)?
|
|
|
|
var model: JXRecommend? {
|
|
didSet {
|
|
coverInfoView.model = model
|
|
|
|
let des = model?.nr_description ?? ""
|
|
|
|
let totalLineNum = des.numberOfLines(self.desLabel.font, .init(width: UIScreen.width - 32, height: .greatestFiniteMagnitude))
|
|
|
|
if Int(totalLineNum) > self.desTotalLineNum {
|
|
desMoreButton.isHidden = false
|
|
desMoreButton.isSelected = false
|
|
desLabel.numberOfLines = self.desTotalLineNum
|
|
} else {
|
|
desMoreButton.isHidden = true
|
|
}
|
|
|
|
desLabel.text = des
|
|
|
|
|
|
contentsTextLabel.text = "moduleVeloria".localizedReplace(text: "\(model?.episode_total ?? 0)")
|
|
|
|
collectDataView.num = CGFloat(model?.collect_total ?? 0)
|
|
heatsDataView.num = CGFloat(model?.heats ?? 0)
|
|
wordDataView.num = CGFloat(model?.words ?? 0)
|
|
rateDataView.num = model?.rate ?? 0
|
|
}
|
|
}
|
|
|
|
private let desTotalLineNum = 7
|
|
|
|
private let lineColor: UIColor = .F_2_EFEE
|
|
|
|
private lazy var scrollView: VIGuyanView = {
|
|
let scrollView = VIGuyanView()
|
|
scrollView.showsVerticalScrollIndicator = false
|
|
scrollView.isScrollEnabled = false
|
|
scrollView.addObserver(self, forKeyPath: "contentSize", context: nil)
|
|
return scrollView
|
|
}()
|
|
|
|
private lazy var contentView: UIView = {
|
|
let view = UIView()
|
|
view.backgroundColor = .white
|
|
view.nr_setRoundedCorner(topLeft: 16, topRight: 16, bottomLeft: 0, bottomRight: 0)
|
|
return view
|
|
}()
|
|
|
|
private lazy var coverInfoView: ISpacingView = {
|
|
let view = ISpacingView()
|
|
return view
|
|
}()
|
|
|
|
private lazy var collectDataView: WCoverParserView = {
|
|
let view = WCoverParserView()
|
|
view.num = 0
|
|
view.icon = UIImage(named: "verifyMireoGradient")
|
|
view.title = "contentElarisButton".localized
|
|
return view
|
|
}()
|
|
|
|
private lazy var heatsDataView: WCoverParserView = {
|
|
let view = WCoverParserView()
|
|
view.num = 0
|
|
view.icon = UIImage(named: "moduleScreen")
|
|
view.title = "recommendRegister_vmDelegate_t".localized
|
|
return view
|
|
}()
|
|
|
|
private lazy var wordDataView: WCoverParserView = {
|
|
let view = WCoverParserView()
|
|
view.num = 0
|
|
view.icon = UIImage(named: "coverJinmo")
|
|
view.title = "category_63Today".localized
|
|
return view
|
|
}()
|
|
|
|
private lazy var rateDataView: WCoverParserView = {
|
|
let view = WCoverParserView()
|
|
view.num = 0
|
|
view.icon = UIImage(named: "homeAble")
|
|
view.title = "genresReceive".localized
|
|
return view
|
|
}()
|
|
|
|
private lazy var dataLineView1: UIView = {
|
|
let view = UIView()
|
|
view.backgroundColor = self.lineColor
|
|
return view
|
|
}()
|
|
|
|
private lazy var dataLineView2: UIView = {
|
|
let view = UIView()
|
|
view.backgroundColor = self.lineColor
|
|
return view
|
|
}()
|
|
|
|
private lazy var dataLineView3: UIView = {
|
|
let view = UIView()
|
|
view.backgroundColor = self.lineColor
|
|
return view
|
|
}()
|
|
|
|
private lazy var lineView1: UIView = {
|
|
let view = UIView()
|
|
view.backgroundColor = self.lineColor
|
|
return view
|
|
}()
|
|
|
|
private lazy var desTitleLabel: UILabel = {
|
|
let label = UILabel()
|
|
label.font = .font(ofSize: 16, weight: .semibold)
|
|
label.textColor = .black
|
|
label.text = "vionConfirmFire".localized
|
|
return label
|
|
}()
|
|
|
|
private lazy var desMoreButton: UIButton = {
|
|
let button = UIButton(type: .custom, primaryAction: UIAction(handler: { [weak self] _ in
|
|
guard let self = self else { return }
|
|
self.desMoreButton.isSelected = !self.desMoreButton.isSelected
|
|
if self.desMoreButton.isSelected {
|
|
self.desLabel.numberOfLines = 0
|
|
} else {
|
|
self.desLabel.numberOfLines = desTotalLineNum
|
|
}
|
|
}))
|
|
button.isHidden = true
|
|
button.setImage(UIImage(named: "contentAtegory"), for: .normal)
|
|
button.setImage(UIImage(named: "screenCheck"), for: .selected)
|
|
button.setImage(UIImage(named: "screenCheck"), for: [.selected, .highlighted])
|
|
return button
|
|
}()
|
|
|
|
private lazy var desLabel: UILabel = {
|
|
let label = UILabel()
|
|
label.font = .font(ofSize: 12, weight: .regular)
|
|
label.textColor = .black.withAlphaComponent(0.5)
|
|
label.numberOfLines = desTotalLineNum
|
|
return label
|
|
}()
|
|
|
|
private lazy var lineView2: UIView = {
|
|
let view = UIView()
|
|
view.backgroundColor = self.lineColor
|
|
return view
|
|
}()
|
|
|
|
private lazy var contentsContainerView = UIView()
|
|
|
|
private lazy var contentsTitleLabel: UILabel = {
|
|
let label = UILabel()
|
|
label.font = .font(ofSize: 16, weight: .semibold)
|
|
label.textColor = .black
|
|
label.text = "reader_book_contents"
|
|
return label
|
|
}()
|
|
|
|
private lazy var contentsTextLabel: UILabel = {
|
|
let label = UILabel()
|
|
label.font = .font(ofSize: 12, weight: .regular)
|
|
label.textColor = .black.withAlphaComponent(0.5)
|
|
return label
|
|
}()
|
|
|
|
private lazy var contentsMoreButton: UIButton = {
|
|
var configuration = UIButton.Configuration.plain()
|
|
configuration.contentInsets = .zero
|
|
configuration.image = UIImage(named: "ableFddebcdbeeffcebdfCover")
|
|
configuration.imagePadding = 0
|
|
configuration.imagePlacement = .trailing
|
|
configuration.attributedTitle = AttributedString("loginEwardSetting".localized, attributes: AttributeContainer([
|
|
.font : UIFont.font(ofSize: 12, weight: .regular),
|
|
.foregroundColor : UIColor.black.withAlphaComponent(0.5)
|
|
]))
|
|
|
|
let button = UIButton(configuration: configuration, primaryAction: UIAction(handler: { [weak self] _ in
|
|
guard let self = self else { return }
|
|
let vc = YStarReadController()
|
|
vc.novelModel = self.model
|
|
self.viewController?.navigationController?.pushViewController(vc, animated: true)
|
|
}))
|
|
return button
|
|
}()
|
|
|
|
private lazy var lineView3: UIView = {
|
|
let view = UIView()
|
|
view.backgroundColor = self.lineColor
|
|
return view
|
|
}()
|
|
|
|
deinit {
|
|
scrollView.removeObserver(self, forKeyPath: "contentSize")
|
|
}
|
|
|
|
override init(frame: CGRect) {
|
|
super.init(frame: frame)
|
|
|
|
saveResultResignDateHeightFinite()
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
@discardableResult
|
|
func postAboutDropBottomMonth(loadingLert: [Any]!, barRecommend: [String: Any]!) -> Float {
|
|
var arra: Bool = true
|
|
var genresx: Int = 5
|
|
withUnsafeMutablePointer(to: &genresx) { pointer in
|
|
_ = pointer.pointee
|
|
}
|
|
var elyonH: Float = 5.0
|
|
_ = elyonH
|
|
genresx *= (genresx * (arra ? 3 : 3))
|
|
var minimumH: Float = 3.0
|
|
_ = minimumH
|
|
var ategoryl: Double = 2.0
|
|
var msgC: Float = 5.0
|
|
var colorT: String! = "init_f_48"
|
|
var reachabley: String! = "clut_z_66"
|
|
withUnsafeMutablePointer(to: &reachabley) { pointer in
|
|
_ = pointer.pointee
|
|
}
|
|
repeat {
|
|
msgC *= Float(colorT.count >> (Swift.min(labs(2), 3)))
|
|
if 303418.0 == msgC {
|
|
break
|
|
}
|
|
} while (303418.0 == msgC) && (5.18 == (Double(Double(2) * ategoryl)))
|
|
if 4 == colorT.count {
|
|
colorT.append("\((Int(minimumH > 350087490.0 || minimumH < -350087490.0 ? 77.0 : minimumH)))")
|
|
}
|
|
reachabley = "\((Int(ategoryl > 142223410.0 || ategoryl < -142223410.0 ? 78.0 : ategoryl)))"
|
|
for _ in 0 ..< 2 {
|
|
reachabley = "\(1)"
|
|
}
|
|
arra = 2.81 >= elyonH && 67 >= genresx
|
|
while ((2 * genresx) == 3 && (3.63 * elyonH) == 2.36) {
|
|
genresx -= (Int(elyonH > 10159026.0 || elyonH < -10159026.0 ? 29.0 : elyonH))
|
|
break
|
|
}
|
|
elyonH *= (Float(genresx | Int(elyonH > 164016574.0 || elyonH < -164016574.0 ? 2.0 : elyonH)))
|
|
for _ in 0 ..< 2 {
|
|
elyonH -= (Float(Int(elyonH > 302666718.0 || elyonH < -302666718.0 ? 81.0 : elyonH) + 2))
|
|
}
|
|
return elyonH
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
|
|
|
|
let passphraseHeadphone: Float = postAboutDropBottomMonth(loadingLert:[611, 370], barRecommend:["summed_1_69":229, "x_47_underlying":856])
|
|
|
|
print(passphraseHeadphone)
|
|
var _o_45 = Int(passphraseHeadphone)
|
|
switch _o_45 {
|
|
case 87:
|
|
_o_45 *= 15
|
|
break
|
|
case 72:
|
|
var p_85: Int = 0
|
|
let g_25 = 1
|
|
if _o_45 > g_25 {
|
|
_o_45 = g_25
|
|
|
|
}
|
|
if _o_45 <= 0 {
|
|
_o_45 = 1
|
|
|
|
}
|
|
for o_3 in 0 ..< _o_45 {
|
|
p_85 += o_3
|
|
var j_4 = p_85
|
|
break
|
|
|
|
}
|
|
break
|
|
case 17:
|
|
_o_45 /= 70
|
|
break
|
|
case 51:
|
|
var e_85 = 1
|
|
let h_43 = 1
|
|
if _o_45 > h_43 {
|
|
_o_45 = h_43
|
|
}
|
|
while e_85 < _o_45 {
|
|
e_85 += 1
|
|
var m_13 = e_85
|
|
break
|
|
}
|
|
break
|
|
case 22:
|
|
_o_45 += 54
|
|
_o_45 *= 45
|
|
break
|
|
case 38:
|
|
_o_45 *= 41
|
|
var s_40 = 1
|
|
let h_2 = 1
|
|
if _o_45 > h_2 {
|
|
_o_45 = h_2
|
|
}
|
|
while s_40 < _o_45 {
|
|
s_40 += 1
|
|
_o_45 /= s_40
|
|
var r_88 = s_40
|
|
if r_88 != 338 {
|
|
r_88 += 64
|
|
}
|
|
break
|
|
}
|
|
break
|
|
case 40:
|
|
var f_10 = 1
|
|
let s_25 = 0
|
|
if _o_45 > s_25 {
|
|
_o_45 = s_25
|
|
}
|
|
while f_10 < _o_45 {
|
|
f_10 += 1
|
|
_o_45 /= f_10
|
|
_o_45 -= 78
|
|
break
|
|
}
|
|
break
|
|
case 75:
|
|
_o_45 -= 65
|
|
if _o_45 < 170 {
|
|
_o_45 -= 17
|
|
}
|
|
break
|
|
default:()
|
|
|
|
}
|
|
|
|
_ = passphraseHeadphone
|
|
|
|
|
|
if keyPath == "contentSize" {
|
|
self.didChangeHeight?()
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
extension GHRecordParserView {
|
|
|
|
@discardableResult
|
|
func resetOutletCommonCode(detailArrivals: Float, navName: Float, short_saMonitor: Int) -> [String: Any]! {
|
|
var pageA: Int = 2
|
|
var avatorD: Float = 0.0
|
|
withUnsafeMutablePointer(to: &avatorD) { pointer in
|
|
|
|
}
|
|
var brief4: [String: Any]! = ["lua":"tempfile_m_0", "suiteb_g_93":"networks_3_38"]
|
|
withUnsafeMutablePointer(to: &brief4) { pointer in
|
|
_ = pointer.pointee
|
|
}
|
|
brief4["\(pageA)"] = 1 ^ pageA
|
|
for _ in 0 ..< 1 {
|
|
avatorD += Float(pageA)
|
|
}
|
|
var safeo: Bool = true
|
|
while (5.16 <= (Double(Float(pageA) * avatorD))) {
|
|
pageA <<= Swift.min(1, brief4.count)
|
|
break
|
|
}
|
|
if 3.41 <= (Double(Float(pageA) * avatorD)) {
|
|
pageA %= Swift.max(2, 1)
|
|
}
|
|
safeo = (((!safeo ? 68 : brief4.keys.count) ^ brief4.keys.count) <= 68)
|
|
return brief4
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private func saveResultResignDateHeightFinite() {
|
|
|
|
let playbackTool: [String: Any]! = resetOutletCommonCode(detailArrivals:3484.0, navName:3533.0, short_saMonitor:9802)
|
|
|
|
playbackTool.forEach({ (key, value) in
|
|
print(key)
|
|
print(value)
|
|
})
|
|
var playbackTool_len = playbackTool.count
|
|
var _r_17 = Int(playbackTool_len)
|
|
var o_98 = 1
|
|
let x_94 = 1
|
|
if _r_17 > x_94 {
|
|
_r_17 = x_94
|
|
}
|
|
while o_98 < _r_17 {
|
|
o_98 += 1
|
|
_r_17 /= o_98
|
|
var v_62 = o_98
|
|
var c_5 = 1
|
|
let o_90 = 0
|
|
if v_62 > o_90 {
|
|
v_62 = o_90
|
|
}
|
|
while c_5 < v_62 {
|
|
c_5 += 1
|
|
v_62 /= c_5
|
|
break
|
|
}
|
|
break
|
|
}
|
|
|
|
_ = playbackTool
|
|
|
|
|
|
addSubview(scrollView)
|
|
scrollView.addSubview(coverInfoView)
|
|
scrollView.addSubview(contentView)
|
|
contentView.addSubview(collectDataView)
|
|
contentView.addSubview(heatsDataView)
|
|
contentView.addSubview(wordDataView)
|
|
contentView.addSubview(rateDataView)
|
|
contentView.addSubview(dataLineView1)
|
|
contentView.addSubview(dataLineView2)
|
|
contentView.addSubview(dataLineView3)
|
|
contentView.addSubview(lineView1)
|
|
contentView.addSubview(desTitleLabel)
|
|
contentView.addSubview(desMoreButton)
|
|
contentView.addSubview(desLabel)
|
|
contentView.addSubview(lineView2)
|
|
contentView.addSubview(contentsContainerView)
|
|
contentsContainerView.addSubview(contentsTitleLabel)
|
|
contentsContainerView.addSubview(contentsTextLabel)
|
|
contentsContainerView.addSubview(contentsMoreButton)
|
|
contentView.addSubview(lineView3)
|
|
|
|
scrollView.snp.makeConstraints { make in
|
|
make.edges.equalToSuperview()
|
|
}
|
|
|
|
coverInfoView.snp.makeConstraints { make in
|
|
make.left.centerX.equalToSuperview()
|
|
make.top.equalToSuperview().offset(UIScreen.navBarHeight)
|
|
make.height.equalTo(240)
|
|
}
|
|
|
|
contentView.snp.makeConstraints { make in
|
|
make.left.centerX.equalToSuperview()
|
|
make.top.equalTo(coverInfoView.snp.bottom)
|
|
make.bottom.equalToSuperview()
|
|
}
|
|
|
|
collectDataView.snp.makeConstraints { make in
|
|
make.left.equalToSuperview().offset(16)
|
|
make.top.equalToSuperview().offset(16)
|
|
make.height.equalTo(50)
|
|
}
|
|
|
|
heatsDataView.snp.makeConstraints { make in
|
|
make.width.height.centerY.equalTo(collectDataView)
|
|
make.left.equalTo(collectDataView.snp.right)
|
|
}
|
|
|
|
wordDataView.snp.makeConstraints { make in
|
|
make.width.height.centerY.equalTo(collectDataView)
|
|
make.left.equalTo(heatsDataView.snp.right)
|
|
}
|
|
|
|
rateDataView.snp.makeConstraints { make in
|
|
make.width.height.centerY.equalTo(wordDataView)
|
|
make.left.equalTo(wordDataView.snp.right)
|
|
make.right.equalToSuperview().offset(-16)
|
|
}
|
|
|
|
dataLineView1.snp.makeConstraints { make in
|
|
make.width.equalTo(1)
|
|
make.height.equalTo(40)
|
|
make.centerY.equalTo(collectDataView)
|
|
make.centerX.equalTo(collectDataView.snp.right)
|
|
}
|
|
|
|
dataLineView2.snp.makeConstraints { make in
|
|
make.width.height.centerY.equalTo(dataLineView1)
|
|
make.centerX.equalTo(heatsDataView.snp.right)
|
|
}
|
|
|
|
dataLineView3.snp.makeConstraints { make in
|
|
make.width.height.centerY.equalTo(dataLineView1)
|
|
make.centerX.equalTo(wordDataView.snp.right)
|
|
}
|
|
|
|
lineView1.snp.makeConstraints { make in
|
|
make.left.equalToSuperview().offset(16)
|
|
make.centerX.equalToSuperview()
|
|
make.top.equalTo(collectDataView.snp.bottom).offset(17)
|
|
make.height.equalTo(1)
|
|
}
|
|
|
|
desTitleLabel.snp.makeConstraints { make in
|
|
make.left.equalToSuperview().offset(16)
|
|
make.centerY.equalTo(desMoreButton)
|
|
}
|
|
|
|
desMoreButton.snp.makeConstraints { make in
|
|
make.right.equalToSuperview().offset(-6)
|
|
make.top.equalTo(lineView1.snp.bottom).offset(2)
|
|
make.width.height.equalTo(44)
|
|
}
|
|
|
|
desLabel.snp.makeConstraints { make in
|
|
make.left.equalToSuperview().offset(16)
|
|
make.right.lessThanOrEqualToSuperview().offset(-16)
|
|
make.top.equalTo(lineView1.snp.bottom).offset(48)
|
|
}
|
|
|
|
lineView2.snp.makeConstraints { make in
|
|
make.left.equalToSuperview().offset(16)
|
|
make.centerX.equalToSuperview()
|
|
make.top.equalTo(desLabel.snp.bottom).offset(12)
|
|
make.height.equalTo(1)
|
|
}
|
|
|
|
contentsContainerView.snp.makeConstraints { make in
|
|
make.left.equalToSuperview().offset(16)
|
|
make.centerX.equalToSuperview()
|
|
make.top.equalTo(lineView2.snp.bottom)
|
|
make.height.equalTo(48)
|
|
}
|
|
|
|
contentsTitleLabel.snp.makeConstraints { make in
|
|
make.left.equalToSuperview()
|
|
make.centerY.equalToSuperview()
|
|
}
|
|
|
|
contentsTextLabel.snp.makeConstraints { make in
|
|
make.centerY.equalToSuperview()
|
|
make.left.equalTo(contentsTitleLabel.snp.right).offset(12)
|
|
}
|
|
|
|
contentsMoreButton.snp.makeConstraints { make in
|
|
make.right.equalToSuperview()
|
|
make.top.bottom.equalToSuperview()
|
|
}
|
|
|
|
lineView3.snp.makeConstraints { make in
|
|
make.left.equalToSuperview().offset(16)
|
|
make.centerX.equalToSuperview()
|
|
make.top.equalTo(contentsContainerView.snp.bottom)
|
|
make.height.equalTo(1)
|
|
make.bottom.equalToSuperview()
|
|
}
|
|
|
|
}
|
|
|
|
}
|