对B面bug的处理,以及部分性能优化,优化节点-进度条拖动问题

This commit is contained in:
Mr.zhou 2024-06-05 09:56:35 +08:00
parent da3177eb27
commit 88bf10f284
20 changed files with 242 additions and 126 deletions

View File

@ -612,9 +612,9 @@
CBAFCA3C2C0A10500054500E /* JsonStructs(js文件结构) */ = {
isa = PBXGroup;
children = (
CBAFCA322C0A10500054500E /* MPPositive_JsonBrowse.swift */,
CBAFCA302C0A10500054500E /* MPPositive_JsonArtist.swift */,
CBAFCA312C0A10500054500E /* MPPositive_JsonArtistMore.swift */,
CBAFCA322C0A10500054500E /* MPPositive_JsonBrowse.swift */,
CBAFCA332C0A10500054500E /* MPPositive_JsonListAlbum.swift */,
CBAFCA342C0A10500054500E /* MPPositive_JsonLyrics.swift */,
CBAFCA352C0A10500054500E /* MPPositive_JsonNext.swift */,
@ -682,8 +682,8 @@
CBAFCA5E2C0A10500054500E /* ViewModels */ = {
isa = PBXGroup;
children = (
CBAFCA572C0A10500054500E /* ListViewModels */,
CBAFCA5D2C0A10500054500E /* LoadViewModels */,
CBAFCA572C0A10500054500E /* ListViewModels */,
);
path = ViewModels;
sourceTree = "<group>";
@ -692,8 +692,8 @@
isa = PBXGroup;
children = (
CBAFCA3C2C0A10500054500E /* JsonStructs(js文件结构) */,
CBAFCA472C0A10500054500E /* Models */,
CBAFCA5E2C0A10500054500E /* ViewModels */,
CBAFCA472C0A10500054500E /* Models */,
);
path = Models;
sourceTree = "<group>";
@ -822,13 +822,13 @@
CBAFCA9F2C0A10500054500E /* Search */ = {
isa = PBXGroup;
children = (
CBAFCA982C0A10500054500E /* MPPositive_SearchResultPreviewShowView.swift */,
CBAFCA992C0A10500054500E /* MPPositive_SearchResultShowTableViewCell.swift */,
CBAFCA9A2C0A10500054500E /* MPPositive_SearchResultsShowView.swift */,
CBAFCA9B2C0A10500054500E /* MPPositive_SearchResultTypeShowView.swift */,
CBAFCA9C2C0A10500054500E /* MPPositive_SearchSuggestionItemTableViewCell.swift */,
CBAFCA9D2C0A10500054500E /* MPPositive_SearchSuggestionsView.swift */,
CBAFCA9E2C0A10500054500E /* MPPositive_SearchTagCollectionViewCell.swift */,
CBAFCA9D2C0A10500054500E /* MPPositive_SearchSuggestionsView.swift */,
CBAFCA9A2C0A10500054500E /* MPPositive_SearchResultsShowView.swift */,
CBAFCA982C0A10500054500E /* MPPositive_SearchResultPreviewShowView.swift */,
CBAFCA9B2C0A10500054500E /* MPPositive_SearchResultTypeShowView.swift */,
CBAFCA992C0A10500054500E /* MPPositive_SearchResultShowTableViewCell.swift */,
CBAFCA9C2C0A10500054500E /* MPPositive_SearchSuggestionItemTableViewCell.swift */,
);
path = Search;
sourceTree = "<group>";
@ -1541,9 +1541,10 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Manual;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 4;
DEVELOPMENT_TEAM = "";
DEVELOPMENT_TEAM = T93S37G27F;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = relax.offline.mp3.music/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = Musiclax;
@ -1580,9 +1581,10 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Manual;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 4;
DEVELOPMENT_TEAM = "";
DEVELOPMENT_TEAM = T93S37G27F;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = relax.offline.mp3.music/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = Musiclax;

View File

@ -31,68 +31,68 @@ class MP_LunchViewController: UIViewController {
timer.add(to: RunLoop.current, forMode: .common)
//idfa
_ = requestTrackingAuthorization(self)
MP_AnalyticsManager.shared.getOpenStatus { [weak self] open in
guard let self = self else {return}
if open {
//ip
MP_NetWorkManager.shared.requestIPInfo { statu in
if statu == true {
//b
print("BLog")
self.completionBlock = {
DispatchQueue.main.async {
[weak self] in
guard let self = self else {return}
//
timer.isPaused = true
//
accessAppdelegate.switch_positive()
}
}
}else {
print("ALog")
//A
self.completionBlock = {
DispatchQueue.main.async {
[weak self] in
guard let self = self else {return}
//
timer.isPaused = true
//
accessAppdelegate.switch_aSide()
}
}
}
}
}else {
print("ALog")
//A
completionBlock = {
DispatchQueue.main.async {
[weak self] in
guard let self = self else {return}
//
timer.isPaused = true
//
accessAppdelegate.switch_aSide()
}
}
}
}
//
timer.isPaused = false
// self.completionBlock = {
// DispatchQueue.main.async {
// [weak self] in
// guard let self = self else {return}
// //
// timer.isPaused = true
// //
// accessAppdelegate.switch_positive()
// //
// MPPositive_BrowseLoadViewModel.shared.reloadBrowseLists()
// MP_AnalyticsManager.shared.getOpenStatus { [weak self] open in
// guard let self = self else {return}
// if open {
// //ip
// MP_NetWorkManager.shared.requestIPInfo { statu in
// if statu == true {
// //b
// print("BLog")
// self.completionBlock = {
// DispatchQueue.main.async {
// [weak self] in
// guard let self = self else {return}
// //
// timer.isPaused = true
// //
// accessAppdelegate.switch_positive()
// }
// }
// }else {
// print("ALog")
// //A
// self.completionBlock = {
// DispatchQueue.main.async {
// [weak self] in
// guard let self = self else {return}
// //
// timer.isPaused = true
// //
// accessAppdelegate.switch_aSide()
// }
// }
// }
// }
// }else {
// print("ALog")
// //A
// completionBlock = {
// DispatchQueue.main.async {
// [weak self] in
// guard let self = self else {return}
// //
// timer.isPaused = true
// //
// accessAppdelegate.switch_aSide()
// }
// }
// }
// }
//
timer.isPaused = false
self.completionBlock = {
DispatchQueue.main.async {
[weak self] in
guard let self = self else {return}
//
timer.isPaused = true
//
accessAppdelegate.switch_positive()
//
MPPositive_BrowseLoadViewModel.shared.reloadBrowseLists()
}
}
}
deinit {
//

View File

@ -98,7 +98,7 @@ func improveDataforLycirsAndRelated(_ song:MPPositive_SongItemModel, completion:
}
}
///player
func improveDataforResouceAndCover(_ song:MPPositive_SongItemModel, completion:@escaping((([String],[Int],[String]), [String]?) -> Void)) {
func improveDataforResouceAndCover(_ song:MPPositive_SongItemModel, completion:@escaping((([String],[Int],[String])?, [String]?) -> Void)) {
//player
MP_NetWorkManager.shared.requestAndroidPlayer(song.videoId, playlistId: "") { resourceUrls, coverUrls in
completion(resourceUrls,coverUrls)

View File

@ -59,7 +59,8 @@ class MP_AnalyticsManager: NSObject {
super.init()
Crashlytics.crashlytics().log(app_crash)
//
// remoteConfig.setDefaults(["openStatus":false as NSObject])
remoteConfig.setDefaults(["versionCode":app_Version as NSObject,
"enter":false as NSObject])
}
//MARK: - A/B
func getOpenStatus(_ completion:@escaping ((Bool) -> Void)) {

View File

@ -19,7 +19,29 @@ class MP_NetWorkManager: NSObject {
static let shared = MP_NetWorkManager()
//MARK: -
///
private let MPSession = Alamofire.Session(interceptor: MP_CustomRetrier())
private lazy var MPSession:Session = {
let configuration = URLSessionConfiguration.af.default
//4
configuration.timeoutIntervalForRequest = 30
configuration.timeoutIntervalForResource = 30
return Alamofire.Session(configuration: configuration, interceptor: MP_CustomRetrier())
}()
///
private lazy var PlayerSeesion:Session = {
let configuration = URLSessionConfiguration.af.default
configuration.timeoutIntervalForRequest = 30
configuration.timeoutIntervalForResource = 30
//4
configuration.httpMaximumConnectionsPerHost = 4
return Alamofire.Session(configuration: configuration, interceptor: MP_CustomRetrier())
}()
///
private var playerRequests: [PlayerRequest] = []
///
struct PlayerRequest {
let request: DataRequest
let onCancel: (() -> Void)
}
//MARK: - API
///IP
private let iPInfo:String = "https://api.tikustok.com/app/common/getIPInfo"
@ -631,7 +653,7 @@ extension MP_NetWorkManager {
//MARK: - player
/// Player(/)
/// - Parameter item:
func requestAndroidPlayer(_ videoId: String, playlistId: String, completion:@escaping ((([String],[Int],[String]), [String]?) -> Void)){
func requestAndroidPlayer(_ videoId: String, playlistId: String, completion:@escaping ((([String],[Int],[String])?, [String]?) -> Void)){
//player
let path = header+point+player
//url
@ -650,12 +672,6 @@ extension MP_NetWorkManager {
"clientVersion": "\(day.month).\(day.toString(.custom("dd"))).1",
"platform":"MOBILE",
"browserVersion":"125.0.0.0",
// "userAgent":
// "clientName": "ANDROID_MUSIC",
// "clientVersion": "5.28.1",
// "platform": "MOBILE",
// "androidSdkVersion":"30",
// "userAgent": "com.google.android.apps.youtube.music/5.28.1 (Linux; U; Android 11) gzip"
]
]
@ -665,11 +681,20 @@ extension MP_NetWorkManager {
completion(resourceUlrs, coverUrls)
}
}
private func requestAndroidPostPlayer(_ url:URL, parameters:Parameters, completion:@escaping((([String],[Int],[String]), [String]?) -> Void)) {
private func requestAndroidPostPlayer(_ url:URL, parameters:Parameters, completion:@escaping((([String],[Int],[String])?, [String]?) -> Void)) {
//
playerRequests = playerRequests.filter({$0.request.task?.state == .running})
//
if playerRequests.count >= 4, let requestToCancel = playerRequests.first {
requestToCancel.request.cancel()
//
requestToCancel.onCancel()
playerRequests.removeFirst()
print("取消多余的Player资源请求: \(requestToCancel)")
}
//post
MPSession.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonAndroidPlayer.self) { [weak self] (response) in
let request = PlayerSeesion.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonAndroidPlayer.self) { [weak self] (response) in
guard let self = self else {return}
switch response.result {
case .success(let value):
parsingAndroidPlayer(value) { resourceUlrs, coverUrls in
@ -680,6 +705,10 @@ extension MP_NetWorkManager {
handleError(url, error: error)
}
}
//
playerRequests.append(.init(request: request, onCancel: {
completion(nil,nil)
}))
}
// func requestPlayer(_ videoId: String, playlistId: String, completion:@escaping ((([String],[Float],[String]), [String]?) -> Void)){
// //player

View File

@ -69,15 +69,36 @@ class MP_PlayerManager:NSObject{
private var queue:DispatchQueue?
///load
var loadPlayer:MPPositive_PlayerLoadViewModel!{
didSet{
if loadPlayer != nil {
//load
NotificationCenter.notificationKey.post(notificationName: .pup_bottom_show)
}else {
//load
NotificationCenter.notificationKey.post(notificationName: .player_delete_list)
playState = .Null
player.pause()
willSet{
DispatchQueue.main.async {
[weak self] in
guard let self = self else {return}
guard loadPlayer != nil else {
if newValue != nil {
//load
NotificationCenter.notificationKey.post(notificationName: .pup_bottom_show)
}
return
}
if newValue != nil {
//load
NotificationCenter.notificationKey.post(notificationName: .pup_bottom_show)
}else {
//load
NotificationCenter.notificationKey.post(notificationName: .player_delete_list)
playState = .Null
player.pause()
center?.playCommand.removeTarget(self)
center?.pauseCommand.removeTarget(self)
center?.nextTrackCommand.removeTarget(self)
center?.previousTrackCommand.removeTarget(self)
center = nil
do {
try AVAudioSession.sharedInstance().setActive(false)
} catch {
print("Error deactivating audio session: \(error)")
}
}
}
}
}
@ -194,10 +215,8 @@ class MP_PlayerManager:NSObject{
if startAction != nil {
startActionBlock = startAction
}
//
let newItem = loadPlayer.currentVideo.resourcePlayerItem
//playerItem
player.replaceCurrentItem(with: newItem)
player.replaceCurrentItem(with: loadPlayer?.currentVideo?.resourcePlayerItem)
if center == nil {
setCommandCenter()
}
@ -206,11 +225,11 @@ class MP_PlayerManager:NSObject{
//PlayerItem
if loadPlayer.currentVideo?.isKVO == false {
//
newItem?.addObserver(self, forKeyPath: "status", options: [.old,.new], context: nil)
loadPlayer?.currentVideo?.resourcePlayerItem?.addObserver(self, forKeyPath: "status", options: [.old,.new], context: nil)
//
newItem?.addObserver(self, forKeyPath: "loadedTimeRanges", options: [.old,.new], context: nil)
loadPlayer?.currentVideo?.resourcePlayerItem?.addObserver(self, forKeyPath: "loadedTimeRanges", options: [.old,.new], context: nil)
//
newItem?.addObserver(self, forKeyPath: "playbackLikelyToKeepUp", options: [.old,.new], context: nil)
loadPlayer?.currentVideo?.resourcePlayerItem?.addObserver(self, forKeyPath: "playbackLikelyToKeepUp", options: [.old,.new], context: nil)
loadPlayer.currentVideo.isKVO = true
//0
player.seek(to: .zero)
@ -262,7 +281,7 @@ class MP_PlayerManager:NSObject{
//
if playState != .Playing {
//statuVlaueplayerItem
print("当前音乐-\(loadPlayer.currentVideo?.title ?? "") 已经准备好播放")
print("当前音乐-\(loadPlayer?.currentVideo?.title ?? "") 已经准备好播放")
// if playState != .Playing {
// player.play()
// playState = .Playing
@ -295,8 +314,8 @@ class MP_PlayerManager:NSObject{
suspendTimer()
let times = Int(self.times)
let msTimes = times*1000
MP_AnalyticsManager.shared.player_b_delay_actionAction(loadPlayer.currentVideo?.song.videoId ?? "", videoname: loadPlayer.currentVideo?.title ?? "", artistname: loadPlayer.currentVideo?.song.shortBylineText ?? "", delay: "\(msTimes)ms")
MP_AnalyticsManager.shared.player_b_success_actionAction(loadPlayer.currentVideo?.song.videoId ?? "", videoname: loadPlayer.currentVideo?.title ?? "", artistname: loadPlayer.currentVideo?.song.shortBylineText ?? "")
MP_AnalyticsManager.shared.player_b_delay_actionAction(loadPlayer?.currentVideo?.song.videoId ?? "", videoname: loadPlayer?.currentVideo?.title ?? "", artistname: loadPlayer?.currentVideo?.song.shortBylineText ?? "", delay: "\(msTimes)ms")
MP_AnalyticsManager.shared.player_b_success_actionAction(loadPlayer?.currentVideo?.song.videoId ?? "", videoname: loadPlayer?.currentVideo?.title ?? "", artistname: loadPlayer?.currentVideo?.song.shortBylineText ?? "")
//
if startActionBlock != nil {
startActionBlock!()

View File

@ -44,6 +44,7 @@ class MPPositive_SongViewModel: NSObject {
configure()
}
deinit {
print("\(title ?? "")已经销毁了")
resourcePlayerItem = nil
resourcePlayerAsset = nil
resourcePlayerURL = nil

View File

@ -15,7 +15,7 @@ class MPPositive_PlayerLoadViewModel: NSObject {
///ViewModel
var currentVideo:MPPositive_SongViewModel!{
willSet{
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
DispatchQueue.main.asyncAfter(deadline: .now()) {
[weak self] in
guard let self = self else {return}
if newValue != nil {
@ -123,9 +123,11 @@ class MPPositive_PlayerLoadViewModel: NSObject {
//
//
improveDataforResouceAndCover(item) {[weak self] resourceUrls, coverUrls in
item.resourceUrls = resourceUrls.0
item.itags = resourceUrls.1
item.mimeTypes = resourceUrls.2
if let resourceUrls = resourceUrls {
item.resourceUrls = resourceUrls.0
item.itags = resourceUrls.1
item.mimeTypes = resourceUrls.2
}
item.coverUrls = coverUrls
//,ViewModellistViewVideos
self?.listViewVideos.append(.init(item))
@ -147,9 +149,11 @@ class MPPositive_PlayerLoadViewModel: NSObject {
//
improveDataforResouceAndCover(currentVideo.song) {[weak self] resourceUrls, coverUrls in
guard let self = self else {return}
currentVideo.song.resourceUrls = resourceUrls.0
currentVideo.song.itags = resourceUrls.1
currentVideo.song.mimeTypes = resourceUrls.2
if let resourceUrls = resourceUrls {
currentVideo.song.resourceUrls = resourceUrls.0
currentVideo.song.itags = resourceUrls.1
currentVideo.song.mimeTypes = resourceUrls.2
}
//listViewVideos
listViewVideos.forEach({ item in
if item.song.videoId == self.currentVideo.song.videoId {

View File

@ -75,6 +75,7 @@ class MPPositive_MoreSongOperationsViewController: UIViewController {
}
var removeBlock:(() -> Void)?
var disMissBlock:(() -> Void)?
var collectionBlock:(() -> Void)?
init(_ song:MPPositive_SongItemModel) {
super.init(nibName: nil, bundle: nil)
DispatchQueue.main.async {
@ -169,6 +170,9 @@ class MPPositive_MoreSongOperationsViewController: UIViewController {
MPPositive_LoadCoreModel.shared.reloadCollectionSongViewModel(nil)
MP_AnalyticsManager.shared.player_b_love_clickAction(song.videoId, videoname: song.title ?? "", artistname: song.shortBylineText ?? "")
}
if collectionBlock != nil {
collectionBlock!()
}
}
}
//MARK: - tableView

View File

@ -83,9 +83,11 @@ extension MPPositive_LoveSongsViewController: UITableViewDataSource, UITableView
group.enter()
//
improveDataforResouceAndCover(first) {[weak self] resourceUrls, coverUrls in
first.resourceUrls = resourceUrls.0
first.itags = resourceUrls.1
first.mimeTypes = resourceUrls.2
if let resourceUrls = resourceUrls {
first.resourceUrls = resourceUrls.0
first.itags = resourceUrls.1
first.mimeTypes = resourceUrls.2
}
first.coverUrls = coverUrls
group.leave()
}
@ -99,6 +101,9 @@ extension MPPositive_LoveSongsViewController: UITableViewDataSource, UITableView
moreVC.disMissBlock = {
self?.reload()
}
moreVC.collectionBlock = {
self?.reload()
}
moreVC.transitioningDelegate = self
moreVC.modalPresentationStyle = .custom
self?.present(moreVC, animated: true)

View File

@ -250,9 +250,11 @@ extension MPPositive_ArtistShowViewController: JXPagingViewDelegate{
group.enter()
//
improveDataforResouceAndCover(first) {[weak self] resourceUrls, coverUrls in
first.resourceUrls = resourceUrls.0
first.itags = resourceUrls.1
first.mimeTypes = resourceUrls.2
if let resourceUrls = resourceUrls {
first.resourceUrls = resourceUrls.0
first.itags = resourceUrls.1
first.mimeTypes = resourceUrls.2
}
first.coverUrls = coverUrls
group.leave()
}

View File

@ -320,9 +320,11 @@ extension MPPositive_ListShowViewController: UITableViewDataSource, UITableViewD
group.enter()
//
improveDataforResouceAndCover(first) {[weak self] resourceUrls, coverUrls in
first.resourceUrls = resourceUrls.0
first.itags = resourceUrls.1
first.mimeTypes = resourceUrls.2
if let resourceUrls = resourceUrls {
first.resourceUrls = resourceUrls.0
first.itags = resourceUrls.1
first.mimeTypes = resourceUrls.2
}
first.coverUrls = coverUrls
group.leave()
}

View File

@ -88,6 +88,9 @@ extension MPPositive_PlayerListShowViewController: UITableViewDataSource, UITabl
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//
dismiss(animated: true) {
guard MP_PlayerManager.shared.loadPlayer?.songVideos[indexPath.row].videoId != MP_PlayerManager.shared.loadPlayer?.currentVideo?.song.videoId else {
return
}
//
MP_PlayerManager.shared.loadPlayer.improveData(MP_PlayerManager.shared.loadPlayer.songVideos[indexPath.row].videoId)
}

View File

@ -259,9 +259,11 @@ extension MPPositive_RecommendViewController: JXSegmentedListContainerViewDataSo
group.enter()
//
improveDataforResouceAndCover(first) {[weak self] resourceUrls, coverUrls in
first.resourceUrls = resourceUrls.0
first.itags = resourceUrls.1
first.mimeTypes = resourceUrls.2
if let resourceUrls = resourceUrls {
first.resourceUrls = resourceUrls.0
first.itags = resourceUrls.1
first.mimeTypes = resourceUrls.2
}
first.coverUrls = coverUrls
group.leave()
}

View File

@ -148,9 +148,11 @@ class MPPositive_SearchResultShowViewController: MPPositive_BaseViewController,
group.enter()
//
improveDataforResouceAndCover(first) {[weak self] resourceUrls, coverUrls in
first.resourceUrls = resourceUrls.0
first.itags = resourceUrls.1
first.mimeTypes = resourceUrls.2
if let resourceUrls = resourceUrls {
first.resourceUrls = resourceUrls.0
first.itags = resourceUrls.1
first.mimeTypes = resourceUrls.2
}
first.coverUrls = coverUrls
group.leave()
}

View File

@ -40,6 +40,8 @@ class MPPositive_PlayerListShowTableViewCell: UITableViewCell {
coverImageView.kf.setImage(with: URL(string: song.reviewUrls?.first ?? ""), placeholder: placeholderImage)
titleLabel.text = song.title
subtitleLabel.text = song.shortBylineText
//
removeBtn.isHidden = (song.videoId == MP_PlayerManager.shared.loadPlayer?.currentVideo?.song.videoId)
}
}
var removeBlock:(() -> Void)?

View File

@ -8,6 +8,10 @@
import UIKit
///b
class MPPositive_PlayerSilder: UISlider {
///
var hitTestEdgeInsets: UIEdgeInsets = UIEdgeInsets(top: -20, left: -20, bottom: -20, right: -20)
/// Slider
var originalFrame: CGRect?
//
var thumbImage:UIImage = .init(named: "Player_Slider'logo")!
//
@ -26,6 +30,11 @@ class MPPositive_PlayerSilder: UISlider {
super.init(frame: frame)
setUpLayout()
}
override func awakeFromNib() {
super.awakeFromNib()
print("调整Slider大小")
originalFrame = self.frame
}
required init?(coder: NSCoder) {
super.init(coder: coder)
@ -122,4 +131,16 @@ class MPPositive_PlayerSilder: UISlider {
override func trackRect(forBounds bounds: CGRect) -> CGRect {
return CGRect(x: 0, y: 0, width: bounds.width, height: self.trackHeight)
}
//MARK: -
//
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
//Slider
let largerFrame: CGRect = self.bounds.inset(by: hitTestEdgeInsets)
//
let isInside = largerFrame.contains(point)
return true
}
//slider
}

View File

@ -13,6 +13,7 @@ class MPPositive_SearchResultShowTableViewCell: UITableViewCell {
let imageView:UIImageView = .init()
imageView.contentMode = .scaleAspectFill
imageView.layer.masksToBounds = true
imageView.layer.cornerRadius = 10*width
return imageView
}()
private lazy var titleLabel:UILabel = createLabel(font: .systemFont(ofSize: 14*width, weight: .regular), textColor: .white, textAlignment: .left)

View File

@ -56,6 +56,8 @@ class MPPositive_SearchResultTypeShowView: UIView, JXSegmentedListContainerViewL
}
var scrollBlock:(() -> Void)?
var moreBlock:((MPPositive_SearchResultItemViewModel) -> Void)?
//
var chooseItemBlock:((MPPositive_SearchResultItemViewModel) -> Void)?
init(frame: CGRect, list:MPPositive_SearchResultListViewModel) {
super.init(frame: frame)
backgroundColor = .init(hex: "1A1A1A")
@ -118,4 +120,9 @@ extension MPPositive_SearchResultTypeShowView:UITableViewDataSource, UITableView
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 0
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if chooseItemBlock != nil {
chooseItemBlock!(sectionList.allItemViews[indexPath.row])
}
}
}

View File

@ -173,6 +173,15 @@ extension MPPositive_SearchResultsShowView: JXSegmentedListContainerViewDataSour
moreBlock!(itemView)
}
}
showView.chooseItemBlock = {
[weak self] item in
guard let self = self else {
return
}
if chooseItemBlock != nil {
chooseItemBlock!(item)
}
}
return showView
}
}