Commit a7116f46 authored by yqz's avatar yqz

隐私空间 图片和设备适配

parent 2584358c
...@@ -346,7 +346,8 @@ extension HomeNoAdsViewController : UIScrollViewDelegate { ...@@ -346,7 +346,8 @@ extension HomeNoAdsViewController : UIScrollViewDelegate {
} }
closeBtn.snp.makeConstraints { make in closeBtn.snp.makeConstraints { make in
make.left.top.equalTo(view).inset(UIEdgeInsets(top: 35, left: 13, bottom: 0, right: 0)) make.left.equalTo(view).inset(UIEdgeInsets(top: 35, left: 13, bottom: 0, right: 0))
make.top.equalTo(view.snp.topMargin).offset(15)
} }
NoAdTitle.snp.makeConstraints { make in NoAdTitle.snp.makeConstraints { make in
make.centerX.equalToSuperview().inset(20) make.centerX.equalToSuperview().inset(20)
......
//
// SecretImageCache.swift
// PhoneManager
//
// Created by edy on 2025/4/9.
//
import UIKit
class SecretImageCache: NSObject {
private var imageCache:[String:UIImage] = [:]
private var VideoCache:[String:Float64] = [:]
func loadCacheImage(_ nm:String) -> (UIImage?,Float64)? {
let duration:Float64 = self.VideoCache[nm] ?? -1
if let image = self.imageCache[nm] {
return (image,duration)
}
return nil
}
func removeAllImage() -> Void {
self.imageCache.removeAll()
self.VideoCache.removeAll()
}
func removeImage(_ nm:String) -> Void {
self.imageCache.removeValue(forKey: nm)
self.VideoCache.removeValue(forKey: nm)
}
func saveImageCache(_ nm:String ,_ image:UIImage ,_ duration:Float64 = -1) -> Void {
self.imageCache[nm] = image
if duration > 0 {
self.VideoCache[nm] = duration
}
}
static let share = SecretImageCache()
}
...@@ -16,6 +16,7 @@ class SecretSetViewController: BaseViewController, UITextFieldDelegate { ...@@ -16,6 +16,7 @@ class SecretSetViewController: BaseViewController, UITextFieldDelegate {
var Callback:((_ suc:Bool)->Void)? var Callback:((_ suc:Bool)->Void)?
var secretType:SecretType = .create { var secretType:SecretType = .create {
didSet{ didSet{
if secretType == .create { if secretType == .create {
...@@ -24,7 +25,6 @@ class SecretSetViewController: BaseViewController, UITextFieldDelegate { ...@@ -24,7 +25,6 @@ class SecretSetViewController: BaseViewController, UITextFieldDelegate {
setTitle.text = "Please Enter PlN" setTitle.text = "Please Enter PlN"
} }
} }
} }
override func viewDidLoad() { override func viewDidLoad() {
...@@ -46,6 +46,7 @@ class SecretSetViewController: BaseViewController, UITextFieldDelegate { ...@@ -46,6 +46,7 @@ class SecretSetViewController: BaseViewController, UITextFieldDelegate {
if Ps != Secret { if Ps != Secret {
alert("Pin Verification Failed") alert("Pin Verification Failed")
Secret = "" Secret = ""
self.ps.text = ""
return return
} }
}else{ }else{
...@@ -139,6 +140,7 @@ extension SecretSetViewController:UICollectionViewDelegate,UICollectionViewDataS ...@@ -139,6 +140,7 @@ extension SecretSetViewController:UICollectionViewDelegate,UICollectionViewDataS
st = st.replacingCharacters(in: range, with: string) as NSString st = st.replacingCharacters(in: range, with: string) as NSString
if st.length > 4 { if st.length > 4 {
Secret = st.substring(to: 4) Secret = st.substring(to: 4)
textField.text = ""
return false return false
} }
Secret = st as String; Secret = st as String;
......
...@@ -22,31 +22,28 @@ class SecretViewController: BaseViewController { ...@@ -22,31 +22,28 @@ class SecretViewController: BaseViewController {
private var selectArray = NSMutableSet() { private var selectArray = NSMutableSet() {
didSet{ didSet{
secretCollect.reloadData() secretCollect.reloadData()
bottomm.state = selectArray.count > 0 ? .del : .add
} }
} }
var isVerify:Bool = false { var isVerify:Bool = false {
didSet { didSet {
if pass.count > 0 && isVerify{
data = loadData()
} else {
data = []
}
if isVerify { if isVerify {
NotDataView.isHidden = data.count > 0 NotDataView.isHidden = dataSource.count > 0
secretCollect.isHidden = !(data.count > 0) secretCollect.isHidden = !(dataSource.count > 0)
seletedAllBtn.isHidden = secretCollect.isHidden seletedAllBtn.isHidden = secretCollect.isHidden
}else{ }else{
NotDataView.isHidden = false NotDataView.isHidden = false
secretCollect.isHidden = true secretCollect.isHidden = true
seletedAllBtn.isHidden = true seletedAllBtn.isHidden = true
} }
secretCollect.reloadData()
} }
} }
let AddAction = SecretActionView() let AddAction = SecretActionView()
var data:[String] = [] { var dataSource:[String] = [] {
didSet { didSet {
secretCollect.reloadData() secretCollect.reloadData()
} }
...@@ -93,9 +90,25 @@ class SecretViewController: BaseViewController { ...@@ -93,9 +90,25 @@ class SecretViewController: BaseViewController {
} }
} }
secretDesc.text = "\(p) Photos, \(v) Videos" secretDesc.text = "\(p) Photos, \(v) Videos"
dataSource = file
return file return file
} }
private func deleteData() -> Void {
var delName:[String] = []
for idx in selectArray.allObjects {
guard let row:Int = idx as? Int else { return }
let name = dataSource[row]
delName.append(name)
}
"".delPhotoVideo(delName)
if selectArray.count > 0 {
selectArray.removeAllObjects()
}
Print("删除成功")
dataSource = loadData()
}
@objc private func lockTouch(_ sender:UIButton) -> Void { @objc private func lockTouch(_ sender:UIButton) -> Void {
if pass.count < 4 { if pass.count < 4 {
let alert = SecretAlert() let alert = SecretAlert()
...@@ -140,7 +153,8 @@ class SecretViewController: BaseViewController { ...@@ -140,7 +153,8 @@ class SecretViewController: BaseViewController {
titleView.addSubview(seletedAllBtn) titleView.addSubview(seletedAllBtn)
secretTL.snp.makeConstraints { make in secretTL.snp.makeConstraints { make in
make.left.top.equalToSuperview().inset(UIEdgeInsets(top: 72.RW(), left: 15.RW(), bottom: 0, right: 0)) make.left.equalToSuperview().inset(UIEdgeInsets(top: 72.RW(), left: 15.RW(), bottom: 0, right: 0))
make.top.equalTo(titleView.snp.bottom).offset(10)
} }
secretDesc.snp.makeConstraints { make in secretDesc.snp.makeConstraints { make in
make.left.equalTo(secretTL.snp.left) make.left.equalTo(secretTL.snp.left)
...@@ -216,9 +230,14 @@ class SecretViewController: BaseViewController { ...@@ -216,9 +230,14 @@ class SecretViewController: BaseViewController {
let b = SecretBottomView() let b = SecretBottomView()
view.addSubview(b) view.addSubview(b)
b.callback = { [weak self] in b.callback = { [weak self] in
self?.AddAction.show(); guard let self = self else { return }
self?.AddAction.callback = { [weak self] idx in if b.state == .add {
self?.AddImagePicker(idx) self.AddAction.show();
self.AddAction.callback = { idx in
self.AddImagePicker(idx)
}
}else{
self.deleteData()
} }
} }
return b return b
...@@ -246,13 +265,17 @@ class SecretViewController: BaseViewController { ...@@ -246,13 +265,17 @@ class SecretViewController: BaseViewController {
return btn return btn
}() }()
deinit {
SecretImageCache.share.removeAllImage()
}
} }
extension SecretViewController : UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout { extension SecretViewController : UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return data.count; return (dataSource.count > 0 && isVerify) ? dataSource.count : 0;
} }
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
...@@ -260,7 +283,7 @@ extension SecretViewController : UICollectionViewDelegate,UICollectionViewDataSo ...@@ -260,7 +283,7 @@ extension SecretViewController : UICollectionViewDelegate,UICollectionViewDataSo
cell.layer.cornerRadius = 12; cell.layer.cornerRadius = 12;
cell.clipsToBounds = true cell.clipsToBounds = true
cell.isSelect = selectArray.contains((indexPath.row)) cell.isSelect = selectArray.contains((indexPath.row))
cell.imageText = data[indexPath.row] cell.imageText = dataSource[indexPath.row]
cell.callback = { [weak self] in cell.callback = { [weak self] in
self?.selectImgVideo(indexPath.row) self?.selectImgVideo(indexPath.row)
} }
...@@ -269,7 +292,7 @@ extension SecretViewController : UICollectionViewDelegate,UICollectionViewDataSo ...@@ -269,7 +292,7 @@ extension SecretViewController : UICollectionViewDelegate,UICollectionViewDataSo
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let play = SecretShowImgVideoController() let play = SecretShowImgVideoController()
play.imageVideoPath = data[indexPath.row] play.imageVideoPath = dataSource[indexPath.row]
self.navigationController?.pushViewController(play, animated: true) self.navigationController?.pushViewController(play, animated: true)
} }
...@@ -286,7 +309,7 @@ extension SecretViewController : UICollectionViewDelegate,UICollectionViewDataSo ...@@ -286,7 +309,7 @@ extension SecretViewController : UICollectionViewDelegate,UICollectionViewDataSo
seletedAllBtn.x = titleView.width - marginLR - seletedAllBtn.width seletedAllBtn.x = titleView.width - marginLR - seletedAllBtn.width
let sets = NSMutableSet() let sets = NSMutableSet()
if seletedAllBtn.isSelected { if seletedAllBtn.isSelected {
for i in 0..<data.count { for i in 0..<dataSource.count {
sets.add((i)) sets.add((i))
} }
selectArray = sets selectArray = sets
...@@ -295,18 +318,20 @@ extension SecretViewController : UICollectionViewDelegate,UICollectionViewDataSo ...@@ -295,18 +318,20 @@ extension SecretViewController : UICollectionViewDelegate,UICollectionViewDataSo
} }
} }
} }
}
}
extension SecretViewController : UIImagePickerControllerDelegate , UINavigationControllerDelegate{ extension SecretViewController : UIImagePickerControllerDelegate , UINavigationControllerDelegate{
private func selectImgVideo(_ row:Int) -> Void { private func selectImgVideo(_ row:Int) -> Void {
if selectArray.contains((row)) { let set:NSMutableSet = NSMutableSet(set: selectArray)
selectArray.remove((row)) if set.contains((row)) {
set.remove((row))
}else{ }else{
selectArray.add((row)) set.add((row))
} }
seletedAllBtn.isSelected = selectArray.count == data.count selectArray = set
seletedAllBtn.isSelected = selectArray.count == dataSource.count
secretCollect.reloadData() secretCollect.reloadData()
} }
...@@ -319,16 +344,18 @@ extension SecretViewController : UIImagePickerControllerDelegate , UINavigationC ...@@ -319,16 +344,18 @@ extension SecretViewController : UIImagePickerControllerDelegate , UINavigationC
set.getImage {[weak self] icon in set.getImage {[weak self] icon in
if icon != nil { if icon != nil {
self?.SaveSecret(name + ".png", icon!.pngData() ?? Data()) self?.SaveSecret(name + ".png", icon!.pngData() ?? Data())
self?.loadData()
} }
} }
}else if set.mediaType == .video { }else if set.mediaType == .video {
set.getVideoURL { resltu in set.getVideoURL {[weak self] resltu in
switch resltu { switch resltu {
case .success(let assetUrl): case .success(let assetUrl):
let fab = assetUrl.url let fab = assetUrl.url
do { do {
let data = try Data(contentsOf: fab) let data = try Data(contentsOf: fab)
self.SaveSecret(name + ".mp4", data) self?.SaveSecret(name + ".mp4", data)
self?.loadData()
}catch{ }catch{
} }
...@@ -353,6 +380,7 @@ extension SecretViewController : UIImagePickerControllerDelegate , UINavigationC ...@@ -353,6 +380,7 @@ extension SecretViewController : UIImagePickerControllerDelegate , UINavigationC
} }
let isv = isVerify let isv = isVerify
isVerify = isv isVerify = isv
loadData()
} }
} }
......
...@@ -9,6 +9,11 @@ import UIKit ...@@ -9,6 +9,11 @@ import UIKit
class SecretBottomView: UIView { class SecretBottomView: UIView {
enum SecretState {
case add
case del
}
override init(frame: CGRect) { override init(frame: CGRect) {
super.init(frame: frame) super.init(frame: frame)
addSubview(but) addSubview(but)
...@@ -52,6 +57,18 @@ class SecretBottomView: UIView { ...@@ -52,6 +57,18 @@ class SecretBottomView: UIView {
return b return b
}() }()
var state:SecretState = .add {
didSet{
if state == .add {
but.setTitle("Add New", for: .normal)
but.setImage(UIImage(named: "ic_add_secret"), for: .normal)
}else{
but.setTitle("Delete", for: .normal)
but.setImage(UIImage(), for: .normal)
}
}
}
required init?(coder: NSCoder) { required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented") fatalError("init(coder:) has not been implemented")
} }
......
...@@ -32,7 +32,7 @@ class SecretFirstCell: UICollectionViewCell { ...@@ -32,7 +32,7 @@ class SecretFirstCell: UICollectionViewCell {
} }
selectInfo.snp.makeConstraints { make in selectInfo.snp.makeConstraints { make in
make.right.bottom.equalToSuperview().inset(12) make.right.bottom.equalToSuperview().inset(12)
make.size.equalTo(CGSize(width: 24, height: 24)) // make.size.equalTo(CGSize(width: 24, height: 24))
} }
timeLabe.snp.makeConstraints { make in timeLabe.snp.makeConstraints { make in
make.left.bottom.equalToSuperview().inset(14) make.left.bottom.equalToSuperview().inset(14)
...@@ -73,6 +73,7 @@ class SecretFirstCell: UICollectionViewCell { ...@@ -73,6 +73,7 @@ class SecretFirstCell: UICollectionViewCell {
info.setImage(UIImage(named: "home_info_seleted"), for: .selected) info.setImage(UIImage(named: "home_info_seleted"), for: .selected)
info.addTarget(self, action: #selector(SelectTouch), for: .touchUpInside) info.addTarget(self, action: #selector(SelectTouch), for: .touchUpInside)
addSubview(info) addSubview(info)
info.contentEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
return info return info
}() }()
......
...@@ -71,7 +71,6 @@ extension UIImage { ...@@ -71,7 +71,6 @@ extension UIImage {
} }
extension String { extension String {
// 获取文档路径 // 获取文档路径
...@@ -84,7 +83,24 @@ extension String { ...@@ -84,7 +83,24 @@ extension String {
return NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first ?? "" return NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first ?? ""
} }
func delPhotoVideo(_ Nms:[String]) -> Void {
for name in Nms {
let path = self.af() + "/SecretIm/"
let delFile = path + name
SecretImageCache.share.removeImage(name)
do {
try FileManager.default.removeItem(atPath: delFile)
}catch{
Print("删除出错了")
}
}
}
func loadPhotoOrVideo( _ pv:@escaping ((Float64,UIImage)->Void) ) -> Void { func loadPhotoOrVideo( _ pv:@escaping ((Float64,UIImage)->Void) ) -> Void {
if let img = SecretImageCache.share.loadCacheImage(self) {
pv(img.1,img.0 ?? UIImage())
return
}
let path = self.af() + "/SecretIm/" let path = self.af() + "/SecretIm/"
let abe = path + self let abe = path + self
if self.hasSuffix(".png") { if self.hasSuffix(".png") {
...@@ -92,7 +108,8 @@ extension String { ...@@ -92,7 +108,8 @@ extension String {
pv(-1,UIImage.Clear()) pv(-1,UIImage.Clear())
return return
} }
icon.compressImage(0.5) { image in icon.compressImage(0.3) { image in
SecretImageCache.share.saveImageCache(self, image)
pv(-1,image) pv(-1,image)
} }
}else{ }else{
...@@ -104,7 +121,8 @@ extension String { ...@@ -104,7 +121,8 @@ extension String {
do { do {
let cgImage = try imageGenerator.copyCGImage(at: CMTime(value: 0, timescale: 1), actualTime: nil) let cgImage = try imageGenerator.copyCGImage(at: CMTime(value: 0, timescale: 1), actualTime: nil)
let icon = UIImage(cgImage: cgImage); let icon = UIImage(cgImage: cgImage);
icon.compressImage(0.5) { image in icon.compressImage(0.3) { image in
SecretImageCache.share.saveImageCache(self, image,CMTimeGetSeconds(duration))
pv(CMTimeGetSeconds(duration) ,image) pv(CMTimeGetSeconds(duration) ,image)
} }
} catch { } catch {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment