This commit is contained in:
zjx 2025-07-24 10:26:12 +08:00
parent a805885950
commit 1cd9e117f3
20 changed files with 415 additions and 7 deletions

View File

@ -61,6 +61,8 @@
BF3A56852E30CA78009E5CF9 /* BRSearchResultCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3A56842E30CA78009E5CF9 /* BRSearchResultCell.swift */; }; BF3A56852E30CA78009E5CF9 /* BRSearchResultCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3A56842E30CA78009E5CF9 /* BRSearchResultCell.swift */; };
BF3A56882E30E0DD009E5CF9 /* BREmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3A56872E30E0DD009E5CF9 /* BREmpty.swift */; }; BF3A56882E30E0DD009E5CF9 /* BREmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3A56872E30E0DD009E5CF9 /* BREmpty.swift */; };
BF3A568A2E30E7EF009E5CF9 /* BRNetworkStatusManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3A56892E30E7EF009E5CF9 /* BRNetworkStatusManager.swift */; }; BF3A568A2E30E7EF009E5CF9 /* BRNetworkStatusManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3A56892E30E7EF009E5CF9 /* BRNetworkStatusManager.swift */; };
BF3A568C2E30EBA2009E5CF9 /* BRHomePlayRecordButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3A568B2E30EBA2009E5CF9 /* BRHomePlayRecordButton.swift */; };
BF3A568E2E310217009E5CF9 /* BRHomePlayRecordView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3A568D2E310217009E5CF9 /* BRHomePlayRecordView.swift */; };
BF692AEB2E0A475D00A5C2DA /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF692AE12E0A475D00A5C2DA /* AppDelegate.swift */; }; BF692AEB2E0A475D00A5C2DA /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF692AE12E0A475D00A5C2DA /* AppDelegate.swift */; };
BF692AEC2E0A475D00A5C2DA /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF692AE82E0A475D00A5C2DA /* SceneDelegate.swift */; }; BF692AEC2E0A475D00A5C2DA /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF692AE82E0A475D00A5C2DA /* SceneDelegate.swift */; };
BF692AEE2E0A475D00A5C2DA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BF692AE22E0A475D00A5C2DA /* Assets.xcassets */; }; BF692AEE2E0A475D00A5C2DA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BF692AE22E0A475D00A5C2DA /* Assets.xcassets */; };
@ -208,6 +210,8 @@
BF3A56842E30CA78009E5CF9 /* BRSearchResultCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRSearchResultCell.swift; sourceTree = "<group>"; }; BF3A56842E30CA78009E5CF9 /* BRSearchResultCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRSearchResultCell.swift; sourceTree = "<group>"; };
BF3A56872E30E0DD009E5CF9 /* BREmpty.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BREmpty.swift; sourceTree = "<group>"; }; BF3A56872E30E0DD009E5CF9 /* BREmpty.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BREmpty.swift; sourceTree = "<group>"; };
BF3A56892E30E7EF009E5CF9 /* BRNetworkStatusManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRNetworkStatusManager.swift; sourceTree = "<group>"; }; BF3A56892E30E7EF009E5CF9 /* BRNetworkStatusManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRNetworkStatusManager.swift; sourceTree = "<group>"; };
BF3A568B2E30EBA2009E5CF9 /* BRHomePlayRecordButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRHomePlayRecordButton.swift; sourceTree = "<group>"; };
BF3A568D2E310217009E5CF9 /* BRHomePlayRecordView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRHomePlayRecordView.swift; sourceTree = "<group>"; };
BF692AC92E0A475500A5C2DA /* BeeReel.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BeeReel.app; sourceTree = BUILT_PRODUCTS_DIR; }; BF692AC92E0A475500A5C2DA /* BeeReel.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BeeReel.app; sourceTree = BUILT_PRODUCTS_DIR; };
BF692AE12E0A475D00A5C2DA /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; BF692AE12E0A475D00A5C2DA /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
BF692AE22E0A475D00A5C2DA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; BF692AE22E0A475D00A5C2DA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
@ -848,6 +852,8 @@
BFC676762E0E950A006659E5 /* Spotlight */, BFC676762E0E950A006659E5 /* Spotlight */,
BF692B6D2E0BD4CB00A5C2DA /* BRHomeHeaderView.swift */, BF692B6D2E0BD4CB00A5C2DA /* BRHomeHeaderView.swift */,
BFC6766A2E0E395F006659E5 /* BRHomeHeaderBannerCell.swift */, BFC6766A2E0E395F006659E5 /* BRHomeHeaderBannerCell.swift */,
BF3A568B2E30EBA2009E5CF9 /* BRHomePlayRecordButton.swift */,
BF3A568D2E310217009E5CF9 /* BRHomePlayRecordView.swift */,
); );
path = View; path = View;
sourceTree = "<group>"; sourceTree = "<group>";
@ -1136,6 +1142,7 @@
BF692B782E0D3A1200A5C2DA /* BRHomeModuleItem.swift in Sources */, BF692B782E0D3A1200A5C2DA /* BRHomeModuleItem.swift in Sources */,
BF692B5A2E0AAADD00A5C2DA /* BRPlayerListCell.swift in Sources */, BF692B5A2E0AAADD00A5C2DA /* BRPlayerListCell.swift in Sources */,
BF02B8312E30897700172177 /* BRSearchHomeView.swift in Sources */, BF02B8312E30897700172177 /* BRSearchHomeView.swift in Sources */,
BF3A568C2E30EBA2009E5CF9 /* BRHomePlayRecordButton.swift in Sources */,
BF692B162E0A7CD600A5C2DA /* BRHUD.swift in Sources */, BF692B162E0A7CD600A5C2DA /* BRHUD.swift in Sources */,
BF3338F72E16176900B10F76 /* BRDetailPlayerCell.swift in Sources */, BF3338F72E16176900B10F76 /* BRDetailPlayerCell.swift in Sources */,
BF3338EA2E152B8100B10F76 /* BRPlayerCache.swift in Sources */, BF3338EA2E152B8100B10F76 /* BRPlayerCache.swift in Sources */,
@ -1143,6 +1150,7 @@
BFC676952E126BBF006659E5 /* BRSpotlightNewCell.swift in Sources */, BFC676952E126BBF006659E5 /* BRSpotlightNewCell.swift in Sources */,
BF692B402E0A8FA100A5C2DA /* UIColor+BRAdd.swift in Sources */, BF692B402E0A8FA100A5C2DA /* UIColor+BRAdd.swift in Sources */,
BF692B102E0A7B4300A5C2DA /* BRUserDefaultsKey.swift in Sources */, BF692B102E0A7B4300A5C2DA /* BRUserDefaultsKey.swift in Sources */,
BF3A568E2E310217009E5CF9 /* BRHomePlayRecordView.swift in Sources */,
BFC676852E122D9E006659E5 /* BRVideoDetailViewController.swift in Sources */, BFC676852E122D9E006659E5 /* BRVideoDetailViewController.swift in Sources */,
BFC676912E126248006659E5 /* BRSpotlightTopCell.swift in Sources */, BFC676912E126248006659E5 /* BRSpotlightTopCell.swift in Sources */,
BFC676B72E137DFC006659E5 /* BRPopularPicksCell.swift in Sources */, BFC676B72E137DFC006659E5 /* BRPopularPicksCell.swift in Sources */,

View File

@ -79,13 +79,13 @@ extension BRHomeTop10ViewController: UICollectionViewDelegate, UICollectionViewD
if indexPath.section == 0 { if indexPath.section == 0 {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "BRHomeTop3Cell", for: indexPath) as! BRHomeTop3Cell let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "BRHomeTop3Cell", for: indexPath) as! BRHomeTop3Cell
cell.model = model
cell.num = indexPath.row + 1 cell.num = indexPath.row + 1
cell.model = model
return cell return cell
} else { } else {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! BRHomeTop10Cell let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! BRHomeTop10Cell
cell.model = model
cell.num = indexPath.row + 4 cell.num = indexPath.row + 4
cell.model = model
return cell return cell
} }
} }

View File

@ -137,6 +137,13 @@ class BRHomeViewController: BRViewController {
return button return button
}() }()
private lazy var recordButton: BRHomePlayRecordButton = {
let size = 48.0
let button = BRHomePlayRecordButton(frame: .init(x: UIScreen.width - size - 15, y: UIScreen.statusBarHeight + 350, width: size, height: size))
button.isHidden = true
return button
}()
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
self.edgesForExtendedLayout = [.top, .bottom] self.edgesForExtendedLayout = [.top, .bottom]
@ -147,6 +154,7 @@ class BRHomeViewController: BRViewController {
br_setupUI() br_setupUI()
requestHomeData() requestHomeData()
requestPlayHistorys()
setupPageView() setupPageView()
@ -158,6 +166,13 @@ class BRHomeViewController: BRViewController {
self.navigationController?.setNavigationBarHidden(true, animated: true) self.navigationController?.setNavigationBarHidden(true, animated: true)
} }
override func viewDidAppear(_ animated: Bool) {
if self.hasViewDidAppear {
requestPlayHistorys()
}
super.viewDidAppear(animated)
}
private func updateStatusBarStyle() { private func updateStatusBarStyle() {
let point = self.pageView.downSc?.contentOffset ?? .zero let point = self.pageView.downSc?.contentOffset ?? .zero
@ -170,6 +185,7 @@ class BRHomeViewController: BRViewController {
} }
override func handleHeaderRefresh(_ completer: (() -> Void)?) { override func handleHeaderRefresh(_ completer: (() -> Void)?) {
requestPlayHistorys()
self.requestGroup.enter() self.requestGroup.enter()
requestHomeData { [weak self] in requestHomeData { [weak self] in
@ -197,6 +213,7 @@ extension BRHomeViewController {
view.addSubview(bgImageView) view.addSubview(bgImageView)
view.addSubview(pageView) view.addSubview(pageView)
menuLeftView.addSubview(searchButton) menuLeftView.addSubview(searchButton)
view.addSubview(recordButton)
bgImageView.snp.makeConstraints { make in bgImageView.snp.makeConstraints { make in
make.top.equalToSuperview().offset(0) make.top.equalToSuperview().offset(0)
@ -283,6 +300,21 @@ extension BRHomeViewController {
} }
private func requestPlayHistorys() {
BRVideoAPI.requestPlayHistorys(page: 1, pageSize: 1) { [weak self] listModel in
guard let self = self else { return }
guard let list = listModel?.list else { return }
let model = list.first
self.recordButton.model = model
if model == nil {
self.recordButton.isHidden = true
} else {
self.recordButton.isHidden = false
}
}
}
} }

View File

@ -0,0 +1,118 @@
//
// BRHomePlayRecordButton.swift
// BeeReel
//
// Created by on 2025/7/23.
//
import UIKit
class BRHomePlayRecordButton: UIView {
var model: BRShortModel? {
didSet {
}
}
var minY: CGFloat = UIScreen.statusBarHeight
var maxY: CGFloat = UIScreen.height - UIScreen.customTabBarHeight - 48 - 10
var minX: CGFloat = 15
var maxX: CGFloat = UIScreen.width - 15 - 48
private lazy var iconView: UIImageView = {
let view = UIImageView(image: UIImage(named: "tv_icon_01"))
return view
}()
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = .colorFFFFFF()
self.layer.cornerRadius = 12
self.layer.shadowColor = UIColor.color000000(alpha: 0.15).cgColor
self.layer.shadowOpacity = 1
self.layer.shadowRadius = 14
self.layer.shadowOffset = .init(width: 0, height: 0)
self.addSubview(iconView)
iconView.snp.makeConstraints { make in
make.center.equalToSuperview()
}
let pan = UIPanGestureRecognizer(target: self, action: #selector(handlePanGesture))
self.addGestureRecognizer(pan)
let tap = UITapGestureRecognizer(target: self, action: #selector(handleTapGesture))
self.addGestureRecognizer(tap)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@objc private func handlePanGesture(sender: UIPanGestureRecognizer) {
let state = sender.state
switch state {
case .began:
sender.setTranslation(.zero, in: self.superview)
case .changed:
let point = sender.translation(in: self.superview)
sender.setTranslation(.zero, in: self.superview)
var newFrame = self.frame
newFrame.origin.y += point.y
newFrame.origin.x += point.x
if newFrame.origin.y < minY {
newFrame.origin.y = minY
}
if newFrame.origin.y > maxY {
newFrame.origin.y = maxY
}
if newFrame.origin.x > maxX {
newFrame.origin.x = maxX
}
if newFrame.origin.x < minX {
newFrame.origin.x = minX
}
self.frame = newFrame
default:
let superCenterX = self.superview?.centerX ?? 0
var resultX = 15.0
if self.centerX >= superCenterX {
resultX = (self.superview?.frame.width ?? 0) - self.frame.size.width - 15
}
var newFrame = self.frame
newFrame.origin.x = resultX
UIView.animate(withDuration: 0.3) {
self.frame = newFrame
}
brLog(message: "end")
}
}
@objc private func handleTapGesture() {
let view = BRHomePlayRecordView()
view.model = self.model
if self.frame.minX == minX {
view.show(startFrame: self.frame, animateDirection: .right)
} else {
view.show(startFrame: self.frame, animateDirection: .left)
}
}
}

View File

@ -0,0 +1,168 @@
//
// BRHomePlayRecordView.swift
// BeeReel
//
// Created by on 2025/7/23.
//
import UIKit
class BRHomePlayRecordView: UIView {
enum AnimateDirection: Int {
///
case left = 1
///
case right = 2
}
var model: BRShortModel? {
didSet {
label.text = model?.name
}
}
private var oldFrame: CGRect = .zero
///
private var animateDirection: AnimateDirection = .left
private lazy var contentView: UIView = {
let view = UIView()
view.backgroundColor = .colorFFFFFF()
view.layer.cornerRadius = 12
view.layer.masksToBounds = true
return view
}()
private lazy var iconView: UIImageView = {
let view = UIImageView(image: UIImage(named: "tv_icon_01"))
return view
}()
private lazy var label: UILabel = {
let label = UILabel()
label.font = .fontRegular(ofSize: 14)
label.textColor = .color1C1C1C()
return label
}()
private lazy var closeButton: UIButton = {
let button = UIButton(type: .custom)
button.setImage(UIImage(named: "Union"), for: .normal)
button.addTarget(self, action: #selector(handleCloseButton), for: .touchUpInside)
return button
}()
private lazy var playButton: UIButton = {
let button = UIButton(type: .custom)
button.setImage(UIImage(named: "Polygon 4"), for: .normal)
button.addTarget(self, action: #selector(handlePlayButton), for: .touchUpInside)
return button
}()
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = .color000000(alpha: 0.4)
br_setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesBegan(touches, with: event)
}
func show(startFrame: CGRect, animateDirection: AnimateDirection) {
self.oldFrame = startFrame
self.animateDirection = animateDirection
BRAppTool.keyWindow?.addSubview(self)
self.frame = BRAppTool.keyWindow?.bounds ?? .zero
self.contentView.frame = startFrame
let endWidth: CGFloat = 282.0
var endX: CGFloat = 0.0
if animateDirection == .left {
endX = self.frame.size.width - 15 - endWidth
} else {
endX = 15
}
let endFrame = CGRect(x: endX, y: startFrame.origin.y, width: endWidth, height: startFrame.size.height)
UIView.animate(withDuration: 0.3) {
self.contentView.frame = endFrame
} completion: { _ in
}
}
func dismiss(completion: (() -> Void)? = nil) {
UIView.animate(withDuration: 0.3) {
self.contentView.frame = self.oldFrame
} completion: { _ in
self.removeFromSuperview()
completion?()
}
}
}
extension BRHomePlayRecordView {
@objc private func handleCloseButton() {
dismiss()
}
@objc private func handlePlayButton() {
dismiss { [weak self] in
let vc = BRVideoDetailViewController()
vc.shortPlayId = self?.model?.short_play_id
BRAppTool.topViewController?.navigationController?.pushViewController(vc, animated: true)
}
}
}
extension BRHomePlayRecordView {
private func br_setupUI() {
addSubview(contentView)
contentView.addSubview(iconView)
contentView.addSubview(closeButton)
contentView.addSubview(label)
contentView.addSubview(playButton)
iconView.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.left.equalToSuperview().offset(12)
}
label.snp.makeConstraints { make in
make.left.equalToSuperview().offset(46)
make.centerY.equalToSuperview()
make.width.equalTo(154)
}
playButton.snp.makeConstraints { make in
make.top.equalToSuperview()
make.centerY.equalToSuperview()
make.left.equalTo(label.snp.right).offset(16)
make.width.equalTo(34)
}
closeButton.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.top.equalToSuperview()
make.left.equalTo(playButton.snp.right).offset(0)
make.width.equalTo(32)
}
}
}

View File

@ -63,7 +63,7 @@ class BRPopularPicksCell: BRCollectionViewCell {
guard let self = self else { return } guard let self = self else { return }
let count = model?.watch_total ?? 0 let count = model?.watch_total ?? 0
var string = "\(count)" var string = "\(count)"
if count > 100 { if count > 1000 {
string = String(format: "%.1fk", Float(count) / 1000) string = String(format: "%.1fk", Float(count) / 1000)
} }
button.configuration?.attributedTitle = AttributedString.br_createAttributedString(string: string, color: .colorFF7489(), font: .fontRegular(ofSize: 10)) button.configuration?.attributedTitle = AttributedString.br_createAttributedString(string: string, color: .colorFF7489(), font: .fontRegular(ofSize: 10))

View File

@ -59,7 +59,7 @@ class BRSpotlightHotCell: BRCollectionViewCell {
guard let self = self else { return } guard let self = self else { return }
let count = model?.watch_total ?? 0 let count = model?.watch_total ?? 0
var string = "\(count)" var string = "\(count)"
if count > 100 { if count > 1000 {
string = String(format: "%.1fk", Float(count) / 1000) string = String(format: "%.1fk", Float(count) / 1000)
} }
button.configuration?.attributedTitle = AttributedString.br_createAttributedString(string: string, color: .colorFF7489(), font: .fontRegular(ofSize: 10)) button.configuration?.attributedTitle = AttributedString.br_createAttributedString(string: string, color: .colorFF7489(), font: .fontRegular(ofSize: 10))

View File

@ -91,7 +91,7 @@ class BRSpotlightTopCell: BRCollectionViewCell {
guard let self = self else { return } guard let self = self else { return }
let count = model?.watch_total ?? 0 let count = model?.watch_total ?? 0
var string = "\(count)" var string = "\(count)"
if count > 100 { if count > 1000 {
string = String(format: "%.1fk", Float(count) / 1000) string = String(format: "%.1fk", Float(count) / 1000)
} }
button.configuration?.attributedTitle = AttributedString.br_createAttributedString(string: string, color: .colorFF7489(), font: .fontRegular(ofSize: 10)) button.configuration?.attributedTitle = AttributedString.br_createAttributedString(string: string, color: .colorFF7489(), font: .fontRegular(ofSize: 10))

View File

@ -75,7 +75,7 @@ class BRHomeTop10Cell: BRCollectionViewCell {
guard let self = self else { return } guard let self = self else { return }
let count = model?.watch_total ?? 0 let count = model?.watch_total ?? 0
var string = "\(count)" var string = "\(count)"
if count > 100 { if count > 1000 {
string = String(format: "%.1fk", Float(count) / 1000) string = String(format: "%.1fk", Float(count) / 1000)
} }
button.configuration?.attributedTitle = AttributedString.br_createAttributedString(string: string, color: .colorFF7489(), font: .fontRegular(ofSize: 10)) button.configuration?.attributedTitle = AttributedString.br_createAttributedString(string: string, color: .colorFF7489(), font: .fontRegular(ofSize: 10))

View File

@ -12,7 +12,16 @@ class BRHomeTop3Cell: BRCollectionViewCell {
var model: BRShortModel? { var model: BRShortModel? {
didSet { didSet {
coverImageView.br_setImage(url: model?.image_url) if num == 1 {
coverImageView.br_setImage(url: model?.image_url)
} else {
if let image = model?.horizontally_img, !image.isEmpty {
coverImageView.br_setImage(url: image)
} else {
coverImageView.br_setImage(url: model?.image_url)
}
}
} }
} }

View File

@ -92,6 +92,13 @@ extension BRSearchResultView: UICollectionViewDelegate, UICollectionViewDataSour
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
self.listArr.count self.listArr.count
} }
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let model = self.listArr[indexPath.row]
let vc = BRVideoDetailViewController()
vc.shortPlayId = model.short_play_id
self.viewController?.navigationController?.pushViewController(vc, animated: true)
}
} }

View File

@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Polygon 4@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Polygon 4@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 B

View File

@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Union@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Union@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 336 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 B

View File

@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Frame@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Frame@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB