Commit a7116f46 authored by yqz's avatar yqz

隐私空间 图片和设备适配

parent 2584358c
......@@ -346,7 +346,8 @@ extension HomeNoAdsViewController : UIScrollViewDelegate {
}
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
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 {
var Callback:((_ suc:Bool)->Void)?
var secretType:SecretType = .create {
didSet{
if secretType == .create {
......@@ -24,7 +25,6 @@ class SecretSetViewController: BaseViewController, UITextFieldDelegate {
setTitle.text = "Please Enter PlN"
}
}
}
override func viewDidLoad() {
......@@ -46,6 +46,7 @@ class SecretSetViewController: BaseViewController, UITextFieldDelegate {
if Ps != Secret {
alert("Pin Verification Failed")
Secret = ""
self.ps.text = ""
return
}
}else{
......@@ -139,6 +140,7 @@ extension SecretSetViewController:UICollectionViewDelegate,UICollectionViewDataS
st = st.replacingCharacters(in: range, with: string) as NSString
if st.length > 4 {
Secret = st.substring(to: 4)
textField.text = ""
return false
}
Secret = st as String;
......
......@@ -22,31 +22,28 @@ class SecretViewController: BaseViewController {
private var selectArray = NSMutableSet() {
didSet{
secretCollect.reloadData()
bottomm.state = selectArray.count > 0 ? .del : .add
}
}
var isVerify:Bool = false {
didSet {
if pass.count > 0 && isVerify{
data = loadData()
} else {
data = []
}
if isVerify {
NotDataView.isHidden = data.count > 0
secretCollect.isHidden = !(data.count > 0)
NotDataView.isHidden = dataSource.count > 0
secretCollect.isHidden = !(dataSource.count > 0)
seletedAllBtn.isHidden = secretCollect.isHidden
}else{
NotDataView.isHidden = false
secretCollect.isHidden = true
seletedAllBtn.isHidden = true
}
secretCollect.reloadData()
}
}
let AddAction = SecretActionView()
var data:[String] = [] {
var dataSource:[String] = [] {
didSet {
secretCollect.reloadData()
}
......@@ -93,9 +90,25 @@ class SecretViewController: BaseViewController {
}
}
secretDesc.text = "\(p) Photos, \(v) Videos"
dataSource = 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 {
if pass.count < 4 {
let alert = SecretAlert()
......@@ -140,7 +153,8 @@ class SecretViewController: BaseViewController {
titleView.addSubview(seletedAllBtn)
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
make.left.equalTo(secretTL.snp.left)
......@@ -216,9 +230,14 @@ class SecretViewController: BaseViewController {
let b = SecretBottomView()
view.addSubview(b)
b.callback = { [weak self] in
self?.AddAction.show();
self?.AddAction.callback = { [weak self] idx in
self?.AddImagePicker(idx)
guard let self = self else { return }
if b.state == .add {
self.AddAction.show();
self.AddAction.callback = { idx in
self.AddImagePicker(idx)
}
}else{
self.deleteData()
}
}
return b
......@@ -246,13 +265,17 @@ class SecretViewController: BaseViewController {
return btn
}()
deinit {
SecretImageCache.share.removeAllImage()
}
}
extension SecretViewController : UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout {
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 {
......@@ -260,7 +283,7 @@ extension SecretViewController : UICollectionViewDelegate,UICollectionViewDataSo
cell.layer.cornerRadius = 12;
cell.clipsToBounds = true
cell.isSelect = selectArray.contains((indexPath.row))
cell.imageText = data[indexPath.row]
cell.imageText = dataSource[indexPath.row]
cell.callback = { [weak self] in
self?.selectImgVideo(indexPath.row)
}
......@@ -269,7 +292,7 @@ extension SecretViewController : UICollectionViewDelegate,UICollectionViewDataSo
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let play = SecretShowImgVideoController()
play.imageVideoPath = data[indexPath.row]
play.imageVideoPath = dataSource[indexPath.row]
self.navigationController?.pushViewController(play, animated: true)
}
......@@ -286,7 +309,7 @@ extension SecretViewController : UICollectionViewDelegate,UICollectionViewDataSo
seletedAllBtn.x = titleView.width - marginLR - seletedAllBtn.width
let sets = NSMutableSet()
if seletedAllBtn.isSelected {
for i in 0..<data.count {
for i in 0..<dataSource.count {
sets.add((i))
}
selectArray = sets
......@@ -295,18 +318,20 @@ extension SecretViewController : UICollectionViewDelegate,UICollectionViewDataSo
}
}
}
}
extension SecretViewController : UIImagePickerControllerDelegate , UINavigationControllerDelegate{
private func selectImgVideo(_ row:Int) -> Void {
if selectArray.contains((row)) {
selectArray.remove((row))
let set:NSMutableSet = NSMutableSet(set: selectArray)
if set.contains((row)) {
set.remove((row))
}else{
selectArray.add((row))
set.add((row))
}
seletedAllBtn.isSelected = selectArray.count == data.count
selectArray = set
seletedAllBtn.isSelected = selectArray.count == dataSource.count
secretCollect.reloadData()
}
......@@ -319,16 +344,18 @@ extension SecretViewController : UIImagePickerControllerDelegate , UINavigationC
set.getImage {[weak self] icon in
if icon != nil {
self?.SaveSecret(name + ".png", icon!.pngData() ?? Data())
self?.loadData()
}
}
}else if set.mediaType == .video {
set.getVideoURL { resltu in
set.getVideoURL {[weak self] resltu in
switch resltu {
case .success(let assetUrl):
let fab = assetUrl.url
do {
let data = try Data(contentsOf: fab)
self.SaveSecret(name + ".mp4", data)
self?.SaveSecret(name + ".mp4", data)
self?.loadData()
}catch{
}
......@@ -353,6 +380,7 @@ extension SecretViewController : UIImagePickerControllerDelegate , UINavigationC
}
let isv = isVerify
isVerify = isv
loadData()
}
}
......
......@@ -9,6 +9,11 @@ import UIKit
class SecretBottomView: UIView {
enum SecretState {
case add
case del
}
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(but)
......@@ -52,6 +57,18 @@ class SecretBottomView: UIView {
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) {
fatalError("init(coder:) has not been implemented")
}
......
......@@ -32,7 +32,7 @@ class SecretFirstCell: UICollectionViewCell {
}
selectInfo.snp.makeConstraints { make in
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
make.left.bottom.equalToSuperview().inset(14)
......@@ -73,6 +73,7 @@ class SecretFirstCell: UICollectionViewCell {
info.setImage(UIImage(named: "home_info_seleted"), for: .selected)
info.addTarget(self, action: #selector(SelectTouch), for: .touchUpInside)
addSubview(info)
info.contentEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
return info
}()
......
......@@ -71,9 +71,8 @@ extension UIImage {
}
extension String {
// 获取文档路径
func document() -> URL {
let document = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
......@@ -83,8 +82,25 @@ extension String {
func af() -> String {
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 {
if let img = SecretImageCache.share.loadCacheImage(self) {
pv(img.1,img.0 ?? UIImage())
return
}
let path = self.af() + "/SecretIm/"
let abe = path + self
if self.hasSuffix(".png") {
......@@ -92,7 +108,8 @@ extension String {
pv(-1,UIImage.Clear())
return
}
icon.compressImage(0.5) { image in
icon.compressImage(0.3) { image in
SecretImageCache.share.saveImageCache(self, image)
pv(-1,image)
}
}else{
......@@ -104,7 +121,8 @@ extension String {
do {
let cgImage = try imageGenerator.copyCGImage(at: CMTime(value: 0, timescale: 1), actualTime: nil)
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)
}
} 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