You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.7 KiB
118 lines
3.7 KiB
// |
|
// SportDetailHeaderView.swift |
|
// Lookfit |
|
// |
|
// Created by lemo. on 2020/4/20. |
|
// Copyright © 2020 Sheldon. All rights reserved. |
|
// |
|
|
|
import UIKit |
|
|
|
class SportDetailHeaderView: UIView { |
|
|
|
/// 轨迹视图 |
|
lazy var sportTrackView: SportTrackView = { |
|
let view = SportTrackView(frame: CGRect(x: 0, y: 0, width: kScreenW, height: kScaleHeight(380))) |
|
return view |
|
}() |
|
/// 视图 |
|
lazy var sportUserView: SportUserView = { |
|
let view = SportUserView() |
|
view.backgroundColor = .orange |
|
view.userIconImg.image = R.image.icon_header() |
|
if let userInfo = UserDefaultsManager.getUserInfo() { |
|
view.userNameLabel.text = userInfo.nickname |
|
if userInfo.avatarImg != nil { |
|
view.userIconImg.image = userInfo.avatarImg |
|
} |
|
} |
|
return view |
|
}() |
|
lazy var timeImg: UIImageView = { |
|
return UIImageView(image: R.image.icon_date()) |
|
}() |
|
lazy var timeLabel: UILabel = { |
|
let label = UILabel() |
|
label.textColor = kHexColor(0x888888) |
|
label.font = SystemRegularFont(12) |
|
return label |
|
}() |
|
lazy var distanceLabel: UILabel = { |
|
let label = UILabel() |
|
label.textColor = kHexColor(0x2A2A2A) |
|
label.font = UIFont.init(name: "DINAlternate-Bold", size: kScaleWidth(44)) |
|
return label |
|
}() |
|
lazy var distanceUnitLabel: UILabel = { |
|
let label = UILabel() |
|
label.textColor = kHexColor(0x888888) |
|
label.font = SystemRegularFont(12) |
|
return label |
|
}() |
|
|
|
override init(frame: CGRect) { |
|
super.init(frame: frame) |
|
addSubview(sportTrackView) |
|
addSubview(sportUserView) |
|
addSubview(timeImg) |
|
addSubview(timeLabel) |
|
addSubview(distanceLabel) |
|
addSubview(distanceUnitLabel) |
|
|
|
layoutUI() |
|
} |
|
|
|
required init?(coder: NSCoder) { |
|
fatalError("init(coder:) has not been implemented") |
|
} |
|
|
|
func layoutUI() { |
|
sportUserView.snp.makeConstraints { (make) in |
|
make.top.equalTo(sportTrackView.snp.bottom) |
|
make.width.equalToSuperview() |
|
make.height.equalTo(kScaleHeight(80)) |
|
} |
|
timeLabel.snp.makeConstraints { (make) in |
|
make.centerX.equalToSuperview() |
|
make.top.equalTo(sportUserView.snp.bottom) |
|
} |
|
timeImg.snp.makeConstraints { (make) in |
|
make.right.equalTo(timeLabel.snp.left).offset(-6) |
|
make.height.width.equalTo(8) |
|
make.centerY.equalTo(timeLabel.snp.centerY) |
|
} |
|
distanceLabel.snp.makeConstraints { (make) in |
|
make.centerX.equalToSuperview() |
|
make.top.equalTo(timeLabel.snp.bottom).offset(10) |
|
} |
|
distanceUnitLabel.snp.makeConstraints { (make) in |
|
make.left.equalTo(distanceLabel.snp.right).offset(10) |
|
make.firstBaseline.equalTo(distanceLabel.snp.firstBaseline) |
|
} |
|
} |
|
|
|
} |
|
|
|
// MARK: - RxExtension |
|
extension Reactive where Base: SportDetailHeaderView { |
|
|
|
// 轨迹更新 |
|
func trajectory() -> Binder<(Bool, [CLLocationCoordinate2D])> { |
|
return Binder(self.base, binding: { (view, arg1) in |
|
let (hidden, coordinates) = arg1 |
|
if hidden == false { |
|
view.sportTrackView.drawTrajectory(coordinates: coordinates) |
|
}else { |
|
view.sportTrackView.removeFromSuperview() |
|
view.frame.height = kScaleHeight(193) |
|
view.sportUserView.snp.remakeConstraints { (make) in |
|
make.top.equalTo(15) |
|
make.width.equalToSuperview() |
|
make.height.equalTo(kScaleHeight(80)) |
|
} |
|
} |
|
}) |
|
} |
|
|
|
} |
|
|
|
|