广告
41
Podfile
Normal file
@ -0,0 +1,41 @@
|
||||
# Uncomment the next line to define a global platform for your project
|
||||
# platform :ios, '9.0'
|
||||
|
||||
target 'anniversary_Project' do
|
||||
# Comment the next line if you don't want to use dynamic frameworks
|
||||
use_frameworks!
|
||||
|
||||
pod 'SnapKit'
|
||||
#pod 'AFNetworking'
|
||||
pod 'SDWebImage/WebP'
|
||||
pod 'IQKeyboardManagerSwift'
|
||||
pod 'BRPickerView'
|
||||
pod 'Alamofire'
|
||||
pod "ESTabBarController-swift"
|
||||
pod 'RAMAnimatedTabBarController'
|
||||
pod 'MJExtension'
|
||||
pod 'MJRefresh'
|
||||
pod 'WCDB.swift'
|
||||
pod 'FSCalendar'
|
||||
pod 'SVProgressHUD'
|
||||
|
||||
pod 'AppLovinSDK'
|
||||
pod 'AppLovinDSPLinkedInAdapter'
|
||||
pod 'AppLovinMediationVungleAdapter'
|
||||
pod 'AppLovinMediationByteDanceAdapter'
|
||||
|
||||
pod 'Firebase/Core'
|
||||
pod 'Firebase/AnalyticsWithoutAdIdSupport'
|
||||
pod 'FirebaseRemoteConfig'
|
||||
|
||||
post_install do |installer|
|
||||
installer.generated_projects.each do |project|
|
||||
project.targets.each do |target|
|
||||
target.build_configurations.each do |config|
|
||||
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
1151
anniversary_Project.xcodeproj/project.pbxproj
Normal file
619
anniversary_Project/Add/C/AV_AddVC.swift
Normal file
@ -0,0 +1,619 @@
|
||||
//
|
||||
// AV_AddVC.swift
|
||||
// anniversary_Project
|
||||
//
|
||||
// Created by 忆海16 on 2024/4/15.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import BRPickerView
|
||||
import Photos
|
||||
import SVProgressHUD
|
||||
import WCDBSwift
|
||||
//import FirebaseAnalytics
|
||||
import AppLovinSDK
|
||||
import Alamofire
|
||||
import FirebaseRemoteConfig
|
||||
|
||||
class AV_AddVC: AV_RootVC {
|
||||
|
||||
|
||||
@IBOutlet weak var scheduleImagV: UIImageView!
|
||||
|
||||
|
||||
@IBOutlet weak var schedLabel: UILabel!
|
||||
|
||||
|
||||
@IBOutlet weak var birthdayImagV: UIImageView!
|
||||
|
||||
|
||||
@IBOutlet weak var birthdayLabel: UILabel!
|
||||
|
||||
|
||||
@IBOutlet weak var memoryImagV: UIImageView!
|
||||
|
||||
|
||||
@IBOutlet weak var memoryLabel: UILabel!
|
||||
|
||||
|
||||
@IBOutlet weak var titleLabel: UITextField!
|
||||
|
||||
|
||||
@IBOutlet weak var datetextF: UITextField!
|
||||
|
||||
|
||||
@IBOutlet weak var switchSelect: UISwitch!
|
||||
|
||||
|
||||
@IBOutlet weak var deleteBtn: UIButton!
|
||||
|
||||
|
||||
@IBOutlet weak var cameraImagV: UIImageView!
|
||||
|
||||
|
||||
@IBOutlet weak var scheduleV: UIView!
|
||||
|
||||
|
||||
@IBOutlet weak var birthdayV: UIView!
|
||||
|
||||
|
||||
@IBOutlet weak var memoryV: UIView!
|
||||
|
||||
|
||||
|
||||
var type:String = "Schedule"
|
||||
|
||||
var isremind:Bool = true
|
||||
|
||||
var model:UserModel?
|
||||
var typeedit:Int = 0
|
||||
|
||||
var dataUpdateClosure: ((UserModel) -> Void)?
|
||||
|
||||
var interstitialAd: MAInterstitialAd!
|
||||
var remoteConfig: RemoteConfig!
|
||||
var isadshow:Bool = false
|
||||
var retryAttempt = 0.0
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
cameraImagV.layer.cornerRadius = 8
|
||||
cameraImagV.clipsToBounds = true
|
||||
cameraImagV.isUserInteractionEnabled = true
|
||||
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(imageTouch))
|
||||
cameraImagV.addGestureRecognizer(tapGesture)
|
||||
|
||||
}
|
||||
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
|
||||
self.createInterstitialAd()
|
||||
remoteConfig = RemoteConfig.remoteConfig()
|
||||
|
||||
// 设置最小获取间隔(开发期间可以设置较小的值)
|
||||
let settings = RemoteConfigSettings()
|
||||
settings.minimumFetchInterval = 0
|
||||
remoteConfig.configSettings = settings
|
||||
// Fetch 配置值
|
||||
remoteConfig.setDefaults(fromPlist: "isopen")
|
||||
fetchRemoteConfig()
|
||||
|
||||
|
||||
if typeedit == 0{
|
||||
self.cameraImagV.image = UIImage(named: "camera")
|
||||
}else{
|
||||
self.titleLabel.text = model?.name
|
||||
self.datetextF.text = model?.date
|
||||
self.switchSelect.isOn = ((model?.notificationEnabled) != nil)
|
||||
let image = model?.getImage()
|
||||
self.cameraImagV.image = image
|
||||
}
|
||||
|
||||
self.scheduleImagV.image = UIImage(named: "schedule_s")
|
||||
self.schedLabel.alpha = 1.0
|
||||
|
||||
self.birthdayImagV.image = UIImage(named: "birthday_n")
|
||||
self.birthdayLabel.alpha = 0.5
|
||||
|
||||
self.memoryImagV.image = UIImage(named: "memor_n")
|
||||
self.memoryLabel.alpha = 0.5
|
||||
|
||||
scheduleV.layer.cornerRadius = 8
|
||||
scheduleV.layer.borderWidth = 1
|
||||
scheduleV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
|
||||
scheduleV.backgroundColor = .white
|
||||
|
||||
birthdayV.layer.cornerRadius = 8
|
||||
birthdayV.layer.borderWidth = 0
|
||||
birthdayV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
|
||||
birthdayV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1)
|
||||
|
||||
memoryV.layer.cornerRadius = 8
|
||||
memoryV.layer.borderWidth = 0
|
||||
memoryV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
|
||||
memoryV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1)
|
||||
|
||||
if self.cameraImagV.image == UIImage(named: "camera"){
|
||||
self.deleteBtn.isHidden = true
|
||||
}else{
|
||||
self.deleteBtn.isHidden = false
|
||||
}
|
||||
}
|
||||
|
||||
@IBAction func back(_ sender: Any) {
|
||||
|
||||
if self.typeedit == 0{
|
||||
self.dismiss(animated: true)
|
||||
}else{
|
||||
self.navigationController?.popViewController(animated: true)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@IBAction func sure(_ sender: Any) {
|
||||
|
||||
if let title = self.titleLabel.text, title.count > 0 && title.count <= 50 {
|
||||
if self.datetextF.text!.count != 0{
|
||||
if cameraImagV.image != UIImage(named: "camera"){
|
||||
// print("---成功")
|
||||
|
||||
if self.typeedit == 0{
|
||||
let user = UserModel()
|
||||
let uuid = UUID()
|
||||
user.uid = uuid.uuidString
|
||||
user.name = self.titleLabel.text!
|
||||
user.date = self.datetextF.text!
|
||||
user.notificationEnabled = self.isremind
|
||||
user.type = self.type
|
||||
user.setImage(image: self.cameraImagV.image!)
|
||||
PrWCDBBaseManager.shared.insertToDb(objects: [user], intoTable: userModelTableName)
|
||||
self.titleLabel.text = ""
|
||||
self.datetextF.text = ""
|
||||
self.cameraImagV.image = UIImage(named: "camera")
|
||||
self.deleteBtn.isHidden = true
|
||||
|
||||
SVProgressHUD.showSuccess(withStatus: "Added successfully")
|
||||
DispatchQueue.global().asyncAfter(wallDeadline: .now() + 1.5) {
|
||||
SVProgressHUD.dismiss()
|
||||
}
|
||||
if self.isadshow == true{
|
||||
DispatchQueue.main.asyncAfter(wallDeadline: .now() + 0.5) {
|
||||
|
||||
if self.interstitialAd.isReady {
|
||||
self.interstitialAd.show()
|
||||
self.setPostSHOW()
|
||||
|
||||
}else{
|
||||
|
||||
self.dismiss(animated: true)
|
||||
|
||||
}
|
||||
}
|
||||
}else{
|
||||
|
||||
self.dismiss(animated: true)
|
||||
|
||||
}
|
||||
|
||||
}else{
|
||||
let user = UserModel()
|
||||
// let uuid = UUID()
|
||||
user.uid = model!.uid
|
||||
user.name = self.titleLabel.text!
|
||||
user.date = self.datetextF.text!
|
||||
user.notificationEnabled = self.isremind
|
||||
user.type = self.type
|
||||
user.setImage(image: self.cameraImagV.image!)
|
||||
let condition: Condition = UserModel.Properties.uid == model!.uid
|
||||
PrWCDBBaseManager.shared.updateToDb(table: userModelTableName, on: [UserModel.Properties.name,UserModel.Properties.date,UserModel.Properties.type,UserModel.Properties.notificationEnabled,UserModel.Properties.imageBase64], with: user, where: condition)
|
||||
self.titleLabel.text = ""
|
||||
self.datetextF.text = ""
|
||||
self.cameraImagV.image = UIImage(named: "camera")
|
||||
self.deleteBtn.isHidden = true
|
||||
|
||||
SVProgressHUD.showInfo(withStatus: "update completed")
|
||||
DispatchQueue.global().asyncAfter(wallDeadline: .now() + 1.5) {
|
||||
SVProgressHUD.dismiss()
|
||||
}
|
||||
self.navigationController?.popViewController(animated: true)
|
||||
dataUpdateClosure?(user)
|
||||
|
||||
|
||||
}
|
||||
|
||||
}else{
|
||||
SVProgressHUD.showInfo(withStatus: "Please choose your commemorative picture")
|
||||
DispatchQueue.global().asyncAfter(deadline: .now() + 1.5) {
|
||||
SVProgressHUD.dismiss()
|
||||
}
|
||||
}
|
||||
|
||||
}else{
|
||||
SVProgressHUD.showInfo(withStatus: "Please select anniversary date")
|
||||
DispatchQueue.global().asyncAfter(deadline: .now() + 1.5) {
|
||||
SVProgressHUD.dismiss()
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
SVProgressHUD.showInfo(withStatus: "Please enter a title within 30 characters")
|
||||
DispatchQueue.global().asyncAfter(deadline: .now() + 1.5) {
|
||||
SVProgressHUD.dismiss()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@objc func imageTouch(){
|
||||
let imagePicker = UIImagePickerController()
|
||||
imagePicker.sourceType = .photoLibrary
|
||||
imagePicker.delegate = self
|
||||
present(imagePicker, animated: true, completion: nil)
|
||||
|
||||
if self.cameraImagV.image == UIImage(named: "camera"){
|
||||
self.deleteBtn.isHidden = true
|
||||
}else{
|
||||
self.deleteBtn.isHidden = false
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@IBAction func dateSelect(_ sender: UIButton) {
|
||||
titleLabel.resignFirstResponder()
|
||||
let datePicker = BRDatePickerView()
|
||||
datePicker.pickerMode = .YMD
|
||||
datePicker.title = "Select Date"
|
||||
datePicker.selectDate = Date()
|
||||
datePicker.isAutoSelect = true // 自动选择,滚动选择器时立即返回结果,默认为 false
|
||||
datePicker.resultBlock = { selectDate, selectValue in
|
||||
print("选择的值:\(selectValue ?? "")")
|
||||
self.datetextF.text = selectValue
|
||||
}
|
||||
let customestyle = BRPickerStyle()
|
||||
customestyle.cancelBtnTitle = "Cancel"
|
||||
customestyle.doneBtnTitle = "Sure"
|
||||
datePicker.pickerStyle = customestyle
|
||||
datePicker.show()
|
||||
}
|
||||
|
||||
|
||||
@IBAction func switchSele(_ sender: Any) {
|
||||
if switchSelect.isOn {
|
||||
print("Switch is ON")
|
||||
self.isremind = true
|
||||
} else {
|
||||
print("Switch is OFF")
|
||||
self.isremind = false
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@IBAction func scheduleBtn(_ sender: UIButton) {
|
||||
self.type = "Schedule"
|
||||
|
||||
self.scheduleImagV.image = UIImage(named: "schedule_s")
|
||||
self.schedLabel.alpha = 1.0
|
||||
|
||||
self.birthdayImagV.image = UIImage(named: "birthday_n")
|
||||
self.birthdayLabel.alpha = 0.5
|
||||
|
||||
self.memoryImagV.image = UIImage(named: "memor_n")
|
||||
self.memoryLabel.alpha = 0.5
|
||||
scheduleV.layer.cornerRadius = 8
|
||||
scheduleV.layer.borderWidth = 1
|
||||
scheduleV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
|
||||
scheduleV.backgroundColor = .white
|
||||
|
||||
birthdayV.layer.cornerRadius = 8
|
||||
birthdayV.layer.borderWidth = 0
|
||||
birthdayV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
|
||||
birthdayV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1)
|
||||
|
||||
memoryV.layer.cornerRadius = 8
|
||||
memoryV.layer.borderWidth = 0
|
||||
memoryV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
|
||||
memoryV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1)
|
||||
|
||||
}
|
||||
|
||||
|
||||
@IBAction func birthdatBtn(_ sender: UIButton) {
|
||||
self.type = "Birthday"
|
||||
self.scheduleImagV.image = UIImage(named: "schedule_n")
|
||||
self.schedLabel.alpha = 0.5
|
||||
|
||||
self.birthdayImagV.image = UIImage(named: "birthday_s")
|
||||
self.birthdayLabel.alpha = 1.0
|
||||
|
||||
self.memoryImagV.image = UIImage(named: "memor_n")
|
||||
self.memoryLabel.alpha = 0.5
|
||||
|
||||
scheduleV.layer.cornerRadius = 8
|
||||
scheduleV.layer.borderWidth = 0
|
||||
scheduleV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
|
||||
scheduleV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1)
|
||||
|
||||
birthdayV.layer.cornerRadius = 8
|
||||
birthdayV.layer.borderWidth = 1
|
||||
birthdayV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
|
||||
birthdayV.backgroundColor = .white
|
||||
|
||||
memoryV.layer.cornerRadius = 8
|
||||
memoryV.layer.borderWidth = 0
|
||||
memoryV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
|
||||
memoryV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1)
|
||||
|
||||
}
|
||||
|
||||
|
||||
@IBAction func memoryBtn(_ sender: UIButton) {
|
||||
|
||||
self.type = "Memory"
|
||||
self.scheduleImagV.image = UIImage(named: "schedule_n")
|
||||
self.schedLabel.alpha = 0.5
|
||||
|
||||
self.birthdayImagV.image = UIImage(named: "birthday_n")
|
||||
self.birthdayLabel.alpha = 0.5
|
||||
|
||||
self.memoryImagV.image = UIImage(named: "memor_S")
|
||||
self.memoryLabel.alpha = 1.0
|
||||
|
||||
scheduleV.layer.cornerRadius = 8
|
||||
scheduleV.layer.borderWidth = 0
|
||||
scheduleV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
|
||||
scheduleV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1)
|
||||
|
||||
birthdayV.layer.cornerRadius = 8
|
||||
birthdayV.layer.borderWidth = 0
|
||||
birthdayV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
|
||||
birthdayV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1)
|
||||
|
||||
memoryV.layer.cornerRadius = 8
|
||||
memoryV.layer.borderWidth = 1
|
||||
memoryV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
|
||||
memoryV.backgroundColor = .white
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@IBAction func btndelete(_ sender: UIButton) {
|
||||
self.cameraImagV.image = UIImage(named: "camera")
|
||||
self.deleteBtn.isHidden = true
|
||||
}
|
||||
|
||||
///是否有广告
|
||||
func fetchRemoteConfig() {
|
||||
let localVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "0.0"
|
||||
remoteConfig.fetch{ (status, error) -> Void in
|
||||
if status == .success {
|
||||
print("Config fetched!")
|
||||
self.remoteConfig.activate { changed, error in
|
||||
if error == nil{
|
||||
let js = self.remoteConfig.configValue(forKey: "isopen").jsonValue as! [String:Any]
|
||||
let valueopen = js["isadopen"] as! Bool
|
||||
let valueversion = js["version"] as! String
|
||||
DispatchQueue.main.async {
|
||||
if valueversion == localVersion{
|
||||
self.isadshow = false
|
||||
}else{
|
||||
if valueopen {
|
||||
self.isadshow = true
|
||||
} else {
|
||||
self.isadshow = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
print("Config not fetched")
|
||||
if let error = error {
|
||||
print("Error: \(error.localizedDescription)")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
func setPostload(){
|
||||
let url = "http://111.9.47.226:38080/top_selection/save_ad_load_log"
|
||||
let parameters:[String : Any] = [
|
||||
"deviceId": StartManager.shared.devicID ?? "",
|
||||
"localIp": StartManager.shared.localIP ?? "",
|
||||
"remoteIp": StartManager.shared.publicIP ?? "",
|
||||
"linkId": "",
|
||||
"packageName": "com.countdown.day.daycount",
|
||||
"gaid": StartManager.shared.idfaid ?? "",
|
||||
"dataId": "",
|
||||
"shelfNumber":"日历添加和返回",
|
||||
"succeed": StartManager.shared.succeed,
|
||||
"loadTime": "",
|
||||
"adPlatform": StartManager.shared.adPlatform ?? "",
|
||||
"countryCode": StartManager.shared.countryCode ?? "",
|
||||
"adId": StartManager.shared.adId ?? "",
|
||||
"platformResponseTime": StartManager.shared.platformResponseTime ?? "",
|
||||
"getIpResponseTime": StartManager.shared.getIpResponseTime ?? "",
|
||||
"ecpm": StartManager.shared.ecpm ?? "",
|
||||
"dsp": StartManager.shared.dsp ?? "",
|
||||
"network": StartManager.shared.network ?? "",
|
||||
"showStatus": 0,
|
||||
"washParam": true,
|
||||
]
|
||||
|
||||
|
||||
let headers: HTTPHeaders = [
|
||||
"Content-Type": "application/json"
|
||||
]
|
||||
|
||||
NetworkManager.shared.postRequest(url: url, parameters: parameters, headers: headers) { result in
|
||||
switch result {
|
||||
case .success(let data):
|
||||
print("Response:--- \(data)")
|
||||
case .failure(let error):
|
||||
print("Error:--- \(error)")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
func setPostSHOW(){
|
||||
let url = "http://111.9.47.226:38080/top_selection/save_ad_show_log"
|
||||
let parameters:[String : Any] = [
|
||||
"deviceId": StartManager.shared.devicID ?? "",
|
||||
"localIp": StartManager.shared.localIP ?? "",
|
||||
"remoteIp": StartManager.shared.publicIP ?? "",
|
||||
"linkId": "",
|
||||
"packageName": "com.countdown.day.daycount",
|
||||
"gaid": StartManager.shared.idfaid ?? "",
|
||||
"dataId": "",
|
||||
"shelfNumber":"日历添加和返回",
|
||||
"succeed": StartManager.shared.succeed,
|
||||
"loadTime": "",
|
||||
"adPlatform": StartManager.shared.adPlatform ?? "",
|
||||
"countryCode": StartManager.shared.countryCode ?? "",
|
||||
"adId": StartManager.shared.adId ?? "",
|
||||
"platformResponseTime": StartManager.shared.platformResponseTime ?? "",
|
||||
"getIpResponseTime": StartManager.shared.getIpResponseTime ?? "",
|
||||
"ecpm": StartManager.shared.ecpm ?? "",
|
||||
"dsp": StartManager.shared.dsp ?? "",
|
||||
"network": StartManager.shared.network ?? "",
|
||||
]
|
||||
|
||||
|
||||
let headers: HTTPHeaders = [
|
||||
"Content-Type": "application/json"
|
||||
]
|
||||
|
||||
NetworkManager.shared.postRequest(url: url, parameters: parameters, headers: headers) { result in
|
||||
switch result {
|
||||
case .success(let data):
|
||||
print("Response:--- \(data)")
|
||||
case .failure(let error):
|
||||
print("Error:--- \(error)")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
extension AV_AddVC:UIImagePickerControllerDelegate, UINavigationControllerDelegate{
|
||||
|
||||
// 当选择图片完成时调用的方法
|
||||
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
|
||||
picker.dismiss(animated: true, completion: nil)
|
||||
|
||||
// 获取选定的图片
|
||||
if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
|
||||
// 存储图片到 UserDefaults
|
||||
// saveImageToUserDefaults(image, forKey: "selectedImage")
|
||||
self.cameraImagV.image = image
|
||||
// 也可以将图片保存到应用的沙盒中,以便稍后使用
|
||||
// saveImageToDocumentsDirectory(image)
|
||||
if self.cameraImagV.image == UIImage(named: "camera"){
|
||||
self.deleteBtn.isHidden = true
|
||||
}else{
|
||||
self.deleteBtn.isHidden = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 当用户取消选择图片时调用的方法
|
||||
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
|
||||
picker.dismiss(animated: true, completion: nil)
|
||||
if self.cameraImagV.image == UIImage(named: "camera"){
|
||||
self.deleteBtn.isHidden = true
|
||||
}else{
|
||||
self.deleteBtn.isHidden = false
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
extension AV_AddVC: MAAdDelegate
|
||||
{
|
||||
func createInterstitialAd()
|
||||
{
|
||||
interstitialAd = MAInterstitialAd(adUnitIdentifier: "8fccdfa964b52e26")
|
||||
interstitialAd.delegate = self
|
||||
|
||||
// Load the first ad
|
||||
interstitialAd.load()
|
||||
}
|
||||
|
||||
// MARK: MAAdDelegate Protocol
|
||||
|
||||
func didLoad(_ ad: MAAd)
|
||||
{
|
||||
// Interstitial ad is ready to be shown. 'interstitialAd.isReady' will now return 'true'
|
||||
|
||||
// Reset retry attempt
|
||||
retryAttempt = 0
|
||||
StartManager.shared.succeed = true
|
||||
// StartManager.shared.loadTime = self.adLoadTime
|
||||
StartManager.shared.adPlatform = "MAX"
|
||||
StartManager.shared.countryCode = ALSdk.shared().configuration.countryCode
|
||||
StartManager.shared.adId = "8fccdfa964b52e26"
|
||||
StartManager.shared.platformResponseTime = ad.requestLatency
|
||||
StartManager.shared.ecpm = Float(ad.revenue)
|
||||
StartManager.shared.dsp = ad.dspName
|
||||
StartManager.shared.network = ad.networkName
|
||||
|
||||
|
||||
setPostload()
|
||||
}
|
||||
|
||||
func didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError)
|
||||
{
|
||||
// Interstitial ad failed to load
|
||||
// We recommend retrying with exponentially higher delays up to a maximum delay (in this case 64 seconds)
|
||||
|
||||
retryAttempt += 1
|
||||
let delaySec = pow(2.0, min(6.0, retryAttempt))
|
||||
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + delaySec) {
|
||||
self.interstitialAd.load()
|
||||
}
|
||||
}
|
||||
|
||||
func didDisplay(_ ad: MAAd)
|
||||
{
|
||||
// Pause your app's background audio
|
||||
}
|
||||
|
||||
func didClick(_ ad: MAAd) {}
|
||||
|
||||
func didHide(_ ad: MAAd)
|
||||
{
|
||||
// Resume your app's background audio
|
||||
// Interstitial ad is hidden. Pre-load the next ad
|
||||
interstitialAd.load()
|
||||
if self.typeedit == 0{
|
||||
self.dismiss(animated: true)
|
||||
}else{
|
||||
self.navigationController?.popViewController(animated: true)
|
||||
}
|
||||
}
|
||||
|
||||
func didFail(toDisplay ad: MAAd, withError error: MAError)
|
||||
{
|
||||
// Interstitial ad failed to display. We recommend loading the next ad
|
||||
interstitialAd.load()
|
||||
}
|
||||
}
|
||||
350
anniversary_Project/Add/C/AV_AddVC.xib
Normal file
@ -0,0 +1,350 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
||||
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="AV_AddVC" customModule="anniversary_Project" customModuleProvider="target">
|
||||
<connections>
|
||||
<outlet property="birthdayImagV" destination="weh-A8-M04" id="OmE-Oc-zNs"/>
|
||||
<outlet property="birthdayLabel" destination="Mo8-JO-h27" id="E97-hR-ard"/>
|
||||
<outlet property="birthdayV" destination="l4W-ml-uDs" id="pOH-Hf-XyE"/>
|
||||
<outlet property="cameraImagV" destination="Vcq-pb-Wxe" id="GZ2-k1-pxt"/>
|
||||
<outlet property="datetextF" destination="RDK-VK-JRm" id="btk-sV-tbp"/>
|
||||
<outlet property="deleteBtn" destination="gZ1-5K-LH6" id="Vmz-tw-McX"/>
|
||||
<outlet property="memoryImagV" destination="ynf-Vi-AZ0" id="ubC-57-JcF"/>
|
||||
<outlet property="memoryLabel" destination="afs-cg-oB5" id="P5f-ly-ecc"/>
|
||||
<outlet property="memoryV" destination="hFX-Vq-By3" id="7Vc-i0-36q"/>
|
||||
<outlet property="schedLabel" destination="ZKM-FI-Xe2" id="u8H-eu-TF5"/>
|
||||
<outlet property="scheduleImagV" destination="BNs-VH-sy2" id="yQ5-Zj-E5z"/>
|
||||
<outlet property="scheduleV" destination="ePh-wk-sbQ" id="Sbk-31-ufC"/>
|
||||
<outlet property="switchSelect" destination="6qX-xQ-sMM" id="GlB-EK-YhY"/>
|
||||
<outlet property="titleLabel" destination="9Oo-dN-fMX" id="bAp-YR-hgp"/>
|
||||
<outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
|
||||
</connections>
|
||||
</placeholder>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="HKB-TJ-qKk">
|
||||
<rect key="frame" x="20" y="48" width="40" height="40"/>
|
||||
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
|
||||
<state key="normal" image="dismiss"/>
|
||||
<connections>
|
||||
<action selector="back:" destination="-1" eventType="touchUpInside" id="9AR-tg-gF0"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="biF-XK-S8K">
|
||||
<rect key="frame" x="354" y="48" width="40" height="40"/>
|
||||
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
|
||||
<state key="normal" image="sure"/>
|
||||
<connections>
|
||||
<action selector="sure:" destination="-1" eventType="touchUpInside" id="7YE-2q-OaU"/>
|
||||
</connections>
|
||||
</button>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Add reminder" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yWq-IB-xrU">
|
||||
<rect key="frame" x="156.5" y="58.5" width="101" height="19.5"/>
|
||||
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
|
||||
<color key="textColor" red="0.1726125181" green="0.17237710949999999" blue="0.1803931892" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" distribution="equalCentering" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="k3D-vM-IQq">
|
||||
<rect key="frame" x="22" y="118" width="370" height="130"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ePh-wk-sbQ">
|
||||
<rect key="frame" x="0.0" y="0.0" width="96" height="130"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="schedule_n" translatesAutoresizingMaskIntoConstraints="NO" id="BNs-VH-sy2">
|
||||
<rect key="frame" x="32" y="38" width="32" height="32"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="32" id="FiU-Vk-4W6"/>
|
||||
<constraint firstAttribute="height" constant="32" id="qGj-2s-mIr"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Schedule" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZKM-FI-Xe2">
|
||||
<rect key="frame" x="18.5" y="82" width="59" height="16"/>
|
||||
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="13"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Fi8-vH-nwC">
|
||||
<rect key="frame" x="0.0" y="0.0" width="96" height="130"/>
|
||||
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
|
||||
<connections>
|
||||
<action selector="scheduleBtn:" destination="-1" eventType="touchUpInside" id="1o4-iO-iNB"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="BNs-VH-sy2" firstAttribute="centerX" secondItem="ePh-wk-sbQ" secondAttribute="centerX" id="5Fg-eh-Jcs"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Fi8-vH-nwC" secondAttribute="bottom" id="AA8-W5-gf4"/>
|
||||
<constraint firstAttribute="width" constant="96" id="AL8-dU-ubt"/>
|
||||
<constraint firstItem="BNs-VH-sy2" firstAttribute="top" secondItem="ePh-wk-sbQ" secondAttribute="top" constant="38" id="EhU-ih-EWY"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Fi8-vH-nwC" secondAttribute="trailing" id="Ioa-mt-I5S"/>
|
||||
<constraint firstAttribute="height" constant="130" id="Q4C-1u-Bbv"/>
|
||||
<constraint firstItem="ZKM-FI-Xe2" firstAttribute="centerX" secondItem="ePh-wk-sbQ" secondAttribute="centerX" id="ekr-kG-pfR"/>
|
||||
<constraint firstItem="ZKM-FI-Xe2" firstAttribute="top" secondItem="BNs-VH-sy2" secondAttribute="bottom" constant="12" id="f7b-S1-yMn"/>
|
||||
<constraint firstItem="Fi8-vH-nwC" firstAttribute="leading" secondItem="ePh-wk-sbQ" secondAttribute="leading" id="kGm-L5-FcL"/>
|
||||
<constraint firstItem="Fi8-vH-nwC" firstAttribute="top" secondItem="ePh-wk-sbQ" secondAttribute="top" id="pcq-5w-9N9"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="l4W-ml-uDs">
|
||||
<rect key="frame" x="137" y="0.0" width="96" height="130"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="birthday_n" translatesAutoresizingMaskIntoConstraints="NO" id="weh-A8-M04">
|
||||
<rect key="frame" x="32" y="38" width="32" height="32"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="32" id="1se-PA-MHn"/>
|
||||
<constraint firstAttribute="height" constant="32" id="bo2-bL-p5H"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Birthday" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Mo8-JO-h27">
|
||||
<rect key="frame" x="21" y="82" width="54" height="16"/>
|
||||
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="13"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="9ma-jd-xFi">
|
||||
<rect key="frame" x="0.0" y="0.0" width="96" height="130"/>
|
||||
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
|
||||
<connections>
|
||||
<action selector="birthdatBtn:" destination="-1" eventType="touchUpInside" id="LVK-3I-08c"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="Mo8-JO-h27" firstAttribute="top" secondItem="weh-A8-M04" secondAttribute="bottom" constant="12" id="1EA-na-q4a"/>
|
||||
<constraint firstItem="Mo8-JO-h27" firstAttribute="centerX" secondItem="l4W-ml-uDs" secondAttribute="centerX" id="1wH-gn-9KX"/>
|
||||
<constraint firstItem="9ma-jd-xFi" firstAttribute="top" secondItem="l4W-ml-uDs" secondAttribute="top" id="21f-7y-dVe"/>
|
||||
<constraint firstAttribute="trailing" secondItem="9ma-jd-xFi" secondAttribute="trailing" id="4bQ-h6-hp8"/>
|
||||
<constraint firstItem="9ma-jd-xFi" firstAttribute="leading" secondItem="l4W-ml-uDs" secondAttribute="leading" id="U6b-kf-pci"/>
|
||||
<constraint firstAttribute="width" constant="96" id="VM8-Wn-RKJ"/>
|
||||
<constraint firstAttribute="height" constant="130" id="Wpk-Sh-8u8"/>
|
||||
<constraint firstItem="weh-A8-M04" firstAttribute="centerX" secondItem="l4W-ml-uDs" secondAttribute="centerX" id="ZFO-Co-bkb"/>
|
||||
<constraint firstAttribute="bottom" secondItem="9ma-jd-xFi" secondAttribute="bottom" id="gOT-DQ-Is4"/>
|
||||
<constraint firstItem="weh-A8-M04" firstAttribute="top" secondItem="l4W-ml-uDs" secondAttribute="top" constant="38" id="rYw-al-K56"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hFX-Vq-By3">
|
||||
<rect key="frame" x="274" y="0.0" width="96" height="130"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="memor_n" translatesAutoresizingMaskIntoConstraints="NO" id="ynf-Vi-AZ0">
|
||||
<rect key="frame" x="32" y="38" width="32" height="32"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="32" id="Xkj-IZ-ZeP"/>
|
||||
<constraint firstAttribute="height" constant="32" id="pEb-2P-x7N"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Memory " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="afs-cg-oB5">
|
||||
<rect key="frame" x="20.5" y="82" width="55" height="16"/>
|
||||
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="13"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Cd1-Hj-wB7">
|
||||
<rect key="frame" x="0.0" y="0.0" width="96" height="130"/>
|
||||
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
|
||||
<connections>
|
||||
<action selector="memoryBtn:" destination="-1" eventType="touchUpInside" id="kKS-Re-9Hu"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="ynf-Vi-AZ0" firstAttribute="top" secondItem="hFX-Vq-By3" secondAttribute="top" constant="38" id="6K6-u3-MaA"/>
|
||||
<constraint firstItem="Cd1-Hj-wB7" firstAttribute="top" secondItem="hFX-Vq-By3" secondAttribute="top" id="Ed2-Pv-GL6"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Cd1-Hj-wB7" secondAttribute="bottom" id="SBB-Gl-hlg"/>
|
||||
<constraint firstItem="afs-cg-oB5" firstAttribute="centerX" secondItem="hFX-Vq-By3" secondAttribute="centerX" id="WH7-WE-AMx"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Cd1-Hj-wB7" secondAttribute="trailing" id="Wkh-wk-8sq"/>
|
||||
<constraint firstAttribute="height" constant="130" id="aT2-6M-ETL"/>
|
||||
<constraint firstItem="afs-cg-oB5" firstAttribute="top" secondItem="ynf-Vi-AZ0" secondAttribute="bottom" constant="12" id="dOb-qU-jru"/>
|
||||
<constraint firstItem="Cd1-Hj-wB7" firstAttribute="leading" secondItem="hFX-Vq-By3" secondAttribute="leading" id="ex5-3P-kGe"/>
|
||||
<constraint firstItem="ynf-Vi-AZ0" firstAttribute="centerX" secondItem="hFX-Vq-By3" secondAttribute="centerX" id="q2K-5B-Jxw"/>
|
||||
<constraint firstAttribute="width" constant="96" id="wPj-u5-z07"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="130" id="Mif-Qc-Dtm"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" alpha="0.5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Tittle" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9G7-Pi-rMq">
|
||||
<rect key="frame" x="30" y="280" width="33.5" height="17"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter the event you wish to commemorate" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="9Oo-dN-fMX">
|
||||
<rect key="frame" x="30" y="307" width="354" height="40"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="40" id="Hkj-MB-9Nq"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<textInputTraits key="textInputTraits"/>
|
||||
</textField>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4rv-VI-D1r">
|
||||
<rect key="frame" x="30" y="347" width="354" height="1"/>
|
||||
<color key="backgroundColor" red="0.91012281179999999" green="0.91294866799999996" blue="0.94902449850000004" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="1" id="syl-Uw-NW2"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<label opaque="NO" userInteractionEnabled="NO" alpha="0.5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Date" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0qZ-wK-EqZ">
|
||||
<rect key="frame" x="30" y="371" width="30.5" height="17"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Select date" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="RDK-VK-JRm">
|
||||
<rect key="frame" x="30" y="398" width="284" height="40"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="40" id="FlW-sA-cmK"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<textInputTraits key="textInputTraits"/>
|
||||
</textField>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ubs-H2-F6n">
|
||||
<rect key="frame" x="30" y="438" width="354" height="1"/>
|
||||
<color key="backgroundColor" red="0.91012281179999999" green="0.91294866799999996" blue="0.94902449850000004" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="1" id="hxG-Vw-egC"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="date" translatesAutoresizingMaskIntoConstraints="NO" id="Ayq-5a-h95">
|
||||
<rect key="frame" x="364" y="408" width="20" height="20"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="20" id="1sX-Sp-YUV"/>
|
||||
<constraint firstAttribute="width" constant="20" id="l3D-1U-SOr"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="w4D-wm-vLV">
|
||||
<rect key="frame" x="30" y="388" width="354" height="50"/>
|
||||
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
|
||||
<connections>
|
||||
<action selector="dateSelect:" destination="-1" eventType="touchUpInside" id="faa-Oi-ELT"/>
|
||||
</connections>
|
||||
</button>
|
||||
<label opaque="NO" userInteractionEnabled="NO" alpha="0.5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Remind" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Tna-7Y-rBm">
|
||||
<rect key="frame" x="30" y="462" width="48.5" height="17"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Whether to remind" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mKS-T1-0FD">
|
||||
<rect key="frame" x="30" y="495" width="139" height="19.5"/>
|
||||
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6qX-xQ-sMM">
|
||||
<rect key="frame" x="335" y="489" width="51" height="31"/>
|
||||
<color key="onTintColor" red="0.36363440749999998" green="0.56800788639999999" blue="0.96867018940000005" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
|
||||
<connections>
|
||||
<action selector="switchSele:" destination="-1" eventType="valueChanged" id="n3n-es-s35"/>
|
||||
</connections>
|
||||
</switch>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="OM1-aC-nD3">
|
||||
<rect key="frame" x="30" y="530" width="354" height="1"/>
|
||||
<color key="backgroundColor" red="0.91012281179999999" green="0.91294866799999996" blue="0.94902449850000004" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="1" id="mgk-iC-KO7"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<label opaque="NO" userInteractionEnabled="NO" alpha="0.5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Photo" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="87m-Fz-W4z">
|
||||
<rect key="frame" x="30" y="554" width="38" height="17"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="camera" translatesAutoresizingMaskIntoConstraints="NO" id="Vcq-pb-Wxe">
|
||||
<rect key="frame" x="30" y="587" width="100" height="100"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="100" id="YPe-wH-UUE"/>
|
||||
<constraint firstAttribute="height" constant="100" id="yzQ-2j-Qbh"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="gZ1-5K-LH6">
|
||||
<rect key="frame" x="110" y="587" width="20" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="22" id="H3b-iM-jpl"/>
|
||||
<constraint firstAttribute="width" constant="20" id="aiZ-t4-76I"/>
|
||||
</constraints>
|
||||
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
|
||||
<state key="normal" image="delete"/>
|
||||
<connections>
|
||||
<action selector="btndelete:" destination="-1" eventType="touchUpInside" id="F6Q-G3-zq7"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
|
||||
<constraints>
|
||||
<constraint firstItem="w4D-wm-vLV" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="30" id="05h-vZ-vo2"/>
|
||||
<constraint firstItem="Ubs-H2-F6n" firstAttribute="top" secondItem="RDK-VK-JRm" secondAttribute="bottom" id="1NP-V2-INP"/>
|
||||
<constraint firstItem="6qX-xQ-sMM" firstAttribute="centerY" secondItem="mKS-T1-0FD" secondAttribute="centerY" id="7kY-Gz-oGg"/>
|
||||
<constraint firstItem="87m-Fz-W4z" firstAttribute="top" secondItem="OM1-aC-nD3" secondAttribute="bottom" constant="23" id="7n1-IL-yjc"/>
|
||||
<constraint firstItem="9G7-Pi-rMq" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="30" id="7t3-1i-idu"/>
|
||||
<constraint firstItem="Ubs-H2-F6n" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="30" id="8T6-hm-67l"/>
|
||||
<constraint firstItem="OM1-aC-nD3" firstAttribute="top" secondItem="6qX-xQ-sMM" secondAttribute="bottom" constant="10" id="Aks-Nu-dry"/>
|
||||
<constraint firstItem="4rv-VI-D1r" firstAttribute="top" secondItem="9Oo-dN-fMX" secondAttribute="bottom" id="BRt-bf-3eb"/>
|
||||
<constraint firstItem="4rv-VI-D1r" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="30" id="Bdz-tp-rFe"/>
|
||||
<constraint firstItem="87m-Fz-W4z" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="30" id="Dbs-ls-T5N"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Ubs-H2-F6n" secondAttribute="trailing" constant="30" id="E6L-NA-h1D"/>
|
||||
<constraint firstItem="gZ1-5K-LH6" firstAttribute="top" secondItem="Vcq-pb-Wxe" secondAttribute="top" id="GUc-x8-yUQ"/>
|
||||
<constraint firstItem="mKS-T1-0FD" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="30" id="HwI-AH-67S"/>
|
||||
<constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="RDK-VK-JRm" secondAttribute="trailing" constant="100" id="IsP-iN-26O"/>
|
||||
<constraint firstAttribute="trailing" secondItem="w4D-wm-vLV" secondAttribute="trailing" constant="30" id="MEN-fa-6HV"/>
|
||||
<constraint firstItem="Ayq-5a-h95" firstAttribute="centerY" secondItem="RDK-VK-JRm" secondAttribute="centerY" id="Mfl-D2-cnb"/>
|
||||
<constraint firstItem="Tna-7Y-rBm" firstAttribute="top" secondItem="Ubs-H2-F6n" secondAttribute="bottom" constant="23" id="O7h-Ra-KRP"/>
|
||||
<constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="k3D-vM-IQq" secondAttribute="trailing" constant="22" id="UXq-be-4jx"/>
|
||||
<constraint firstItem="biF-XK-S8K" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" id="WvG-i5-hVQ"/>
|
||||
<constraint firstItem="Tna-7Y-rBm" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="30" id="XPM-PY-Soo"/>
|
||||
<constraint firstItem="k3D-vM-IQq" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="22" id="Xpa-eb-7FQ"/>
|
||||
<constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="6qX-xQ-sMM" secondAttribute="trailing" constant="30" id="bcg-on-AMx"/>
|
||||
<constraint firstItem="Vcq-pb-Wxe" firstAttribute="top" secondItem="87m-Fz-W4z" secondAttribute="bottom" constant="16" id="ckT-4b-MhH"/>
|
||||
<constraint firstItem="gZ1-5K-LH6" firstAttribute="leading" secondItem="Vcq-pb-Wxe" secondAttribute="trailing" constant="-20" id="dIM-Np-IBl"/>
|
||||
<constraint firstItem="RDK-VK-JRm" firstAttribute="top" secondItem="0qZ-wK-EqZ" secondAttribute="bottom" constant="10" id="f3V-r5-Wjq"/>
|
||||
<constraint firstItem="9G7-Pi-rMq" firstAttribute="top" secondItem="k3D-vM-IQq" secondAttribute="bottom" constant="32" id="f9j-0z-6oF"/>
|
||||
<constraint firstItem="9Oo-dN-fMX" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="30" id="gaR-G6-UB7"/>
|
||||
<constraint firstItem="k3D-vM-IQq" firstAttribute="top" secondItem="yWq-IB-xrU" secondAttribute="bottom" constant="40" id="gsa-Tm-qtn"/>
|
||||
<constraint firstItem="OM1-aC-nD3" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="30" id="hM4-hi-jUx"/>
|
||||
<constraint firstItem="w4D-wm-vLV" firstAttribute="top" secondItem="0qZ-wK-EqZ" secondAttribute="bottom" id="hpr-jK-AJG"/>
|
||||
<constraint firstItem="yWq-IB-xrU" firstAttribute="centerY" secondItem="HKB-TJ-qKk" secondAttribute="centerY" id="hrY-Eb-L4P"/>
|
||||
<constraint firstItem="Ubs-H2-F6n" firstAttribute="top" secondItem="w4D-wm-vLV" secondAttribute="bottom" id="lSG-1t-Z1o"/>
|
||||
<constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="biF-XK-S8K" secondAttribute="trailing" constant="20" id="lcF-G6-i4e"/>
|
||||
<constraint firstAttribute="trailing" secondItem="OM1-aC-nD3" secondAttribute="trailing" constant="30" id="mDl-TU-RmC"/>
|
||||
<constraint firstItem="HKB-TJ-qKk" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="20" id="msr-i2-NUe"/>
|
||||
<constraint firstItem="HKB-TJ-qKk" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" id="oAx-tn-iiN"/>
|
||||
<constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="9Oo-dN-fMX" secondAttribute="trailing" constant="30" id="oGg-xR-wVo"/>
|
||||
<constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="Ayq-5a-h95" secondAttribute="trailing" constant="30" id="p8a-6r-Pv6"/>
|
||||
<constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="4rv-VI-D1r" secondAttribute="trailing" constant="30" id="qTN-xP-cs7"/>
|
||||
<constraint firstItem="RDK-VK-JRm" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="30" id="qhg-kG-9Ka"/>
|
||||
<constraint firstItem="Vcq-pb-Wxe" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="30" id="qkO-c2-xnn"/>
|
||||
<constraint firstItem="mKS-T1-0FD" firstAttribute="top" secondItem="Tna-7Y-rBm" secondAttribute="bottom" constant="16" id="sby-7N-Fql"/>
|
||||
<constraint firstItem="yWq-IB-xrU" firstAttribute="centerX" secondItem="i5M-Pr-FkT" secondAttribute="centerX" id="se5-Ne-Ixr"/>
|
||||
<constraint firstItem="0qZ-wK-EqZ" firstAttribute="top" secondItem="4rv-VI-D1r" secondAttribute="bottom" constant="23" id="u4x-qH-NOn"/>
|
||||
<constraint firstItem="0qZ-wK-EqZ" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="30" id="v9Q-gh-yDC"/>
|
||||
<constraint firstItem="9Oo-dN-fMX" firstAttribute="top" secondItem="9G7-Pi-rMq" secondAttribute="bottom" constant="10" id="vvG-ak-CHI"/>
|
||||
</constraints>
|
||||
<point key="canvasLocation" x="131.8840579710145" y="-11.383928571428571"/>
|
||||
</view>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="birthday_n" width="36" height="36"/>
|
||||
<image name="camera" width="100" height="100"/>
|
||||
<image name="date" width="20" height="20"/>
|
||||
<image name="delete" width="20" height="20"/>
|
||||
<image name="dismiss" width="40" height="40"/>
|
||||
<image name="memor_n" width="32" height="32"/>
|
||||
<image name="schedule_n" width="32" height="32"/>
|
||||
<image name="sure" width="40" height="40"/>
|
||||
</resources>
|
||||
</document>
|
||||
229
anniversary_Project/AppDelegate.swift
Normal file
@ -0,0 +1,229 @@
|
||||
//
|
||||
// AppDelegate.swift
|
||||
// anniversary_Project
|
||||
//
|
||||
// Created by 忆海16 on 2024/4/11.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import IQKeyboardManagerSwift
|
||||
import Photos
|
||||
import SVProgressHUD
|
||||
import AppLovinSDK
|
||||
import FirebaseCore
|
||||
import FirebaseAnalytics
|
||||
import Alamofire
|
||||
|
||||
@main
|
||||
class AppDelegate: UIResponder, UIApplicationDelegate,UNUserNotificationCenterDelegate {
|
||||
|
||||
var window: UIWindow?
|
||||
let hasLaunchedBeforeKey = "hasLaunchedBefore"
|
||||
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
||||
FirebaseApp.configure()
|
||||
IQKeyboardManager.shared.enable = true
|
||||
self.window?.frame = UIScreen.main.bounds
|
||||
UNUserNotificationCenter.current().delegate = self
|
||||
// let vc = AV_RootTabbarVC()
|
||||
// self.window?.rootViewController = AV_NAVVC(rootViewController: vc)
|
||||
|
||||
let userDefaults = UserDefaults.standard
|
||||
let initConfig = ALSdkInitializationConfiguration(sdkKey: "NLQHJDx4rcfd5IqhZf9nad2tIqFSH8SSKP3DXD18sTKUvV6tBfrH9_RPCGb6hvEn3NPXJDmUQCnvnKgHIT7Qn4") { builder in
|
||||
builder.mediationProvider = ALMediationProviderMAX
|
||||
}
|
||||
|
||||
if userDefaults.bool(forKey: hasLaunchedBeforeKey) {
|
||||
// 不是第一次启动
|
||||
let vc = AV_LaunchLimitesVC()
|
||||
self.window?.rootViewController = AV_NAVVC(rootViewController: vc)
|
||||
|
||||
ALSdk.shared().initialize(with: initConfig) { sdkConfig in
|
||||
// Start loading ads
|
||||
vc.createInterstitialAd()
|
||||
|
||||
}
|
||||
self.window?.rootViewController = AV_NAVVC(rootViewController: vc)
|
||||
} else {
|
||||
// 第一次启动
|
||||
let vc = AV_SelectGenderVC()
|
||||
self.window?.rootViewController = AV_NAVVC(rootViewController: vc)
|
||||
userDefaults.set(true, forKey: hasLaunchedBeforeKey)
|
||||
|
||||
setdispatch()
|
||||
stePermissions()
|
||||
let currentDate = Date()
|
||||
// 使用 UserDefaults 存储日期
|
||||
let defaults = UserDefaults.standard
|
||||
defaults.set(currentDate, forKey: "savedDate")
|
||||
|
||||
ALSdk.shared().initialize(with: initConfig) { sdkConfig in
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
self.window?.makeKeyAndVisible()
|
||||
|
||||
// 强制设置浅色模式
|
||||
if #available(iOS 13.0, *) {
|
||||
window?.overrideUserInterfaceStyle = .light
|
||||
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
|
||||
completionHandler([.alert, .sound, .badge])
|
||||
}
|
||||
|
||||
func stePermissions(){
|
||||
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
|
||||
if granted {
|
||||
print("Permission granted")
|
||||
} else if let error = error {
|
||||
print("Permission denied: \(error.localizedDescription)")
|
||||
}
|
||||
}
|
||||
requestPhotoLibraryPermission()
|
||||
setNetwork()
|
||||
// 使用示例
|
||||
let healthManager = HealthManager()
|
||||
|
||||
// 请求授权
|
||||
healthManager.requestAuthorization { (success, error) in
|
||||
if success {
|
||||
print("HealthKit authorization granted")
|
||||
|
||||
} else if let error = error {
|
||||
print("HealthKit authorization failed with error: \(error.localizedDescription)")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func requestPhotoLibraryPermission() {
|
||||
// 检查相册权限状态
|
||||
let status = PHPhotoLibrary.authorizationStatus()
|
||||
|
||||
// 根据权限状态进行处理
|
||||
switch status {
|
||||
case .authorized:
|
||||
// 用户已授权访问相册
|
||||
print("相册权限已授权")
|
||||
case .denied, .restricted:
|
||||
// 用户已拒绝访问相册或权限受限
|
||||
print("相册权限已拒绝或受限,请在设置中开启权限")
|
||||
case .notDetermined:
|
||||
// 用户尚未作出选择,请求相册权限
|
||||
PHPhotoLibrary.requestAuthorization { [weak self] (newStatus) in
|
||||
DispatchQueue.main.async {
|
||||
if newStatus == .authorized {
|
||||
// 用户授权访问相册
|
||||
print("用户已授权访问相册")
|
||||
} else {
|
||||
// 用户未授权访问相册
|
||||
print("用户未授权访问相册")
|
||||
}
|
||||
}
|
||||
}
|
||||
@unknown default:
|
||||
// 处理未知权限状态
|
||||
print("未知的相册权限状态")
|
||||
}
|
||||
}
|
||||
|
||||
func setNetwork(){
|
||||
// 创建一个URL对象
|
||||
if let url = URL(string: "https://www.baidu.com/") {
|
||||
// 创建一个URLSession对象
|
||||
let session = URLSession.shared
|
||||
|
||||
// 创建一个网络请求任务
|
||||
let task = session.dataTask(with: url) { (data, response, error) in
|
||||
if let error = error {
|
||||
print("网络请求出错:\(error)")
|
||||
|
||||
} else if let data = data {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// 开始网络请求任务
|
||||
task.resume()
|
||||
} else {
|
||||
print("URL无效")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func setdispatch(){
|
||||
// 使用信号量控制并发任务
|
||||
let dispatchGroup = DispatchGroup()
|
||||
|
||||
// 请求跟踪授权并处理 IDFA
|
||||
dispatchGroup.enter()
|
||||
DispatchQueue.global(qos: .background).async {
|
||||
requestTrackingAuthorization { idfa in
|
||||
DispatchQueue.main.async {
|
||||
if let idfa = idfa {
|
||||
print("IDFA: \(idfa)")
|
||||
StartManager.shared.idfaid = idfa
|
||||
print("Stored IDFA: \(StartManager.shared.idfaid ?? "N/A")")
|
||||
} else {
|
||||
print("IDFA is not available or tracking authorization denied.")
|
||||
}
|
||||
dispatchGroup.leave()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取本地 IP 地址
|
||||
dispatchGroup.enter()
|
||||
DispatchQueue.global(qos: .background).async {
|
||||
if let localIP = getLocalIPAddress() {
|
||||
DispatchQueue.main.async {
|
||||
print("Local IP Address: \(localIP)")
|
||||
StartManager.shared.localIP = localIP
|
||||
dispatchGroup.leave()
|
||||
}
|
||||
} else {
|
||||
DispatchQueue.main.async {
|
||||
print("Local IP Address not available")
|
||||
dispatchGroup.leave()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取远程 IP 地址
|
||||
dispatchGroup.enter()
|
||||
DispatchQueue.global(qos: .background).async {
|
||||
getPublicIPAddress { publicIP in
|
||||
DispatchQueue.main.async {
|
||||
if let publicIP = publicIP {
|
||||
print("Public IP Address: \(publicIP)")
|
||||
StartManager.shared.publicIP = publicIP
|
||||
print("Stored Public IP Address: \(StartManager.shared.publicIP ?? "N/A")")
|
||||
} else {
|
||||
print("Public IP Address not available")
|
||||
}
|
||||
dispatchGroup.leave()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取设备 ID
|
||||
dispatchGroup.enter()
|
||||
DispatchQueue.global(qos: .background).async {
|
||||
let deviceID = UIDevice.current.identifierForVendor?.uuidString
|
||||
DispatchQueue.main.async {
|
||||
StartManager.shared.devicID = deviceID
|
||||
print("Device ID: \(StartManager.shared.devicID ?? "N/A")")
|
||||
dispatchGroup.leave()
|
||||
}
|
||||
}
|
||||
|
||||
// 所有任务完成后的操作
|
||||
dispatchGroup.notify(queue: .main) {
|
||||
print("All tasks are completed.")
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,119 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "icon-20@2x.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"scale" : "2x",
|
||||
"size" : "20x20"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-20@3x.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"scale" : "3x",
|
||||
"size" : "20x20"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-29@2x.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"scale" : "2x",
|
||||
"size" : "29x29"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-29@3x.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"scale" : "3x",
|
||||
"size" : "29x29"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-38@2x.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"scale" : "2x",
|
||||
"size" : "38x38"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-38@3x.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"scale" : "3x",
|
||||
"size" : "38x38"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-40@2x.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"scale" : "2x",
|
||||
"size" : "40x40"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-40@3x.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"scale" : "3x",
|
||||
"size" : "40x40"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-60@2x.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"scale" : "2x",
|
||||
"size" : "60x60"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-60@3x.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"scale" : "3x",
|
||||
"size" : "60x60"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-64@2x.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"scale" : "2x",
|
||||
"size" : "64x64"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-64@3x.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"scale" : "3x",
|
||||
"size" : "64x64"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-68@2x.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"scale" : "2x",
|
||||
"size" : "68x68"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-76@2x.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"scale" : "2x",
|
||||
"size" : "76x76"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-83.5@2x.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"scale" : "2x",
|
||||
"size" : "83.5x83.5"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-1024.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"size" : "1024x1024"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 442 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 5.4 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 8.3 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 8.4 KiB |
|
After Width: | Height: | Size: 8.4 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 9.7 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 16 KiB |
6
anniversary_Project/Assets.xcassets/Contents.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
6
anniversary_Project/Assets.xcassets/add/Contents.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
23
anniversary_Project/Assets.xcassets/add/birthday_n.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "分组_7.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "分组_7@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "分组_7@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
anniversary_Project/Assets.xcassets/add/birthday_n.imageset/分组_7.png
vendored
Normal file
|
After Width: | Height: | Size: 409 B |
BIN
anniversary_Project/Assets.xcassets/add/birthday_n.imageset/分组_7@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 526 B |
BIN
anniversary_Project/Assets.xcassets/add/birthday_n.imageset/分组_7@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
23
anniversary_Project/Assets.xcassets/add/birthday_s.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "分组_7.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "分组_7@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "分组_7@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
anniversary_Project/Assets.xcassets/add/birthday_s.imageset/分组_7.png
vendored
Normal file
|
After Width: | Height: | Size: 454 B |
BIN
anniversary_Project/Assets.xcassets/add/birthday_s.imageset/分组_7@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 570 B |
BIN
anniversary_Project/Assets.xcassets/add/birthday_s.imageset/分组_7@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
23
anniversary_Project/Assets.xcassets/add/camera.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "分组_10.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "分组_10@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "分组_10@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
anniversary_Project/Assets.xcassets/add/camera.imageset/分组_10.png
vendored
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
anniversary_Project/Assets.xcassets/add/camera.imageset/分组_10@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
anniversary_Project/Assets.xcassets/add/camera.imageset/分组_10@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 9.7 KiB |
23
anniversary_Project/Assets.xcassets/add/date.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Iconly_Light_Calendar.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "Iconly_Light_Calendar@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "Iconly_Light_Calendar@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
anniversary_Project/Assets.xcassets/add/date.imageset/Iconly_Light_Calendar.png
vendored
Normal file
|
After Width: | Height: | Size: 605 B |
BIN
anniversary_Project/Assets.xcassets/add/date.imageset/Iconly_Light_Calendar@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
anniversary_Project/Assets.xcassets/add/date.imageset/Iconly_Light_Calendar@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
23
anniversary_Project/Assets.xcassets/add/delete.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "分组_2.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "分组_2@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "分组_2@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
anniversary_Project/Assets.xcassets/add/delete.imageset/分组_2.png
vendored
Normal file
|
After Width: | Height: | Size: 310 B |
BIN
anniversary_Project/Assets.xcassets/add/delete.imageset/分组_2@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 799 B |
BIN
anniversary_Project/Assets.xcassets/add/delete.imageset/分组_2@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
23
anniversary_Project/Assets.xcassets/add/dismiss.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "分组_3.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "分组_3@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "分组_3@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
anniversary_Project/Assets.xcassets/add/dismiss.imageset/分组_3.png
vendored
Normal file
|
After Width: | Height: | Size: 577 B |
BIN
anniversary_Project/Assets.xcassets/add/dismiss.imageset/分组_3@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
anniversary_Project/Assets.xcassets/add/dismiss.imageset/分组_3@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
23
anniversary_Project/Assets.xcassets/add/memor_S.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "分组_9.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "分组_9@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "分组_9@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
anniversary_Project/Assets.xcassets/add/memor_S.imageset/分组_9.png
vendored
Normal file
|
After Width: | Height: | Size: 525 B |
BIN
anniversary_Project/Assets.xcassets/add/memor_S.imageset/分组_9@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
anniversary_Project/Assets.xcassets/add/memor_S.imageset/分组_9@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
23
anniversary_Project/Assets.xcassets/add/memor_n.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "分组_9.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "分组_9@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "分组_9@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
anniversary_Project/Assets.xcassets/add/memor_n.imageset/分组_9.png
vendored
Normal file
|
After Width: | Height: | Size: 498 B |
BIN
anniversary_Project/Assets.xcassets/add/memor_n.imageset/分组_9@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
anniversary_Project/Assets.xcassets/add/memor_n.imageset/分组_9@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
23
anniversary_Project/Assets.xcassets/add/schedule_n.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "分组_8.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "分组_8@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "分组_8@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
anniversary_Project/Assets.xcassets/add/schedule_n.imageset/分组_8.png
vendored
Normal file
|
After Width: | Height: | Size: 291 B |
BIN
anniversary_Project/Assets.xcassets/add/schedule_n.imageset/分组_8@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 665 B |
BIN
anniversary_Project/Assets.xcassets/add/schedule_n.imageset/分组_8@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
23
anniversary_Project/Assets.xcassets/add/schedule_s.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "分组_8.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "分组_8@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "分组_8@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
anniversary_Project/Assets.xcassets/add/schedule_s.imageset/分组_8.png
vendored
Normal file
|
After Width: | Height: | Size: 312 B |
BIN
anniversary_Project/Assets.xcassets/add/schedule_s.imageset/分组_8@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 736 B |
BIN
anniversary_Project/Assets.xcassets/add/schedule_s.imageset/分组_8@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
23
anniversary_Project/Assets.xcassets/add/sure.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "分组_5.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "分组_5@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "分组_5@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
anniversary_Project/Assets.xcassets/add/sure.imageset/分组_5.png
vendored
Normal file
|
After Width: | Height: | Size: 606 B |
BIN
anniversary_Project/Assets.xcassets/add/sure.imageset/分组_5@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
anniversary_Project/Assets.xcassets/add/sure.imageset/分组_5@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
23
anniversary_Project/Assets.xcassets/addvcwater/1-1.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Frame.png",
|
||||
"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
|
||||
}
|
||||
}
|
||||
BIN
anniversary_Project/Assets.xcassets/addvcwater/1-1.imageset/Frame.png
vendored
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
anniversary_Project/Assets.xcassets/addvcwater/1-1.imageset/Frame@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
anniversary_Project/Assets.xcassets/addvcwater/1-1.imageset/Frame@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 16 KiB |
23
anniversary_Project/Assets.xcassets/addvcwater/1.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Frame.png",
|
||||
"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
|
||||
}
|
||||
}
|
||||
BIN
anniversary_Project/Assets.xcassets/addvcwater/1.imageset/Frame.png
vendored
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
anniversary_Project/Assets.xcassets/addvcwater/1.imageset/Frame@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
anniversary_Project/Assets.xcassets/addvcwater/1.imageset/Frame@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
23
anniversary_Project/Assets.xcassets/addvcwater/2-2.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Frame.png",
|
||||
"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
|
||||
}
|
||||
}
|
||||
BIN
anniversary_Project/Assets.xcassets/addvcwater/2-2.imageset/Frame.png
vendored
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
anniversary_Project/Assets.xcassets/addvcwater/2-2.imageset/Frame@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
anniversary_Project/Assets.xcassets/addvcwater/2-2.imageset/Frame@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
23
anniversary_Project/Assets.xcassets/addvcwater/2.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Frame.png",
|
||||
"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
|
||||
}
|
||||
}
|
||||
BIN
anniversary_Project/Assets.xcassets/addvcwater/2.imageset/Frame.png
vendored
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
anniversary_Project/Assets.xcassets/addvcwater/2.imageset/Frame@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
anniversary_Project/Assets.xcassets/addvcwater/2.imageset/Frame@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
23
anniversary_Project/Assets.xcassets/addvcwater/3-3.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Frame.png",
|
||||
"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
|
||||
}
|
||||
}
|
||||
BIN
anniversary_Project/Assets.xcassets/addvcwater/3-3.imageset/Frame.png
vendored
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
anniversary_Project/Assets.xcassets/addvcwater/3-3.imageset/Frame@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
anniversary_Project/Assets.xcassets/addvcwater/3-3.imageset/Frame@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 16 KiB |
23
anniversary_Project/Assets.xcassets/addvcwater/3.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Frame.png",
|
||||
"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
|
||||
}
|
||||
}
|
||||
BIN
anniversary_Project/Assets.xcassets/addvcwater/3.imageset/Frame.png
vendored
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
anniversary_Project/Assets.xcassets/addvcwater/3.imageset/Frame@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
anniversary_Project/Assets.xcassets/addvcwater/3.imageset/Frame@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
23
anniversary_Project/Assets.xcassets/addvcwater/4-4.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Frame.png",
|
||||
"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
|
||||
}
|
||||
}
|
||||
BIN
anniversary_Project/Assets.xcassets/addvcwater/4-4.imageset/Frame.png
vendored
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
anniversary_Project/Assets.xcassets/addvcwater/4-4.imageset/Frame@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
anniversary_Project/Assets.xcassets/addvcwater/4-4.imageset/Frame@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 18 KiB |
23
anniversary_Project/Assets.xcassets/addvcwater/4.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Frame.png",
|
||||
"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
|
||||
}
|
||||
}
|
||||
BIN
anniversary_Project/Assets.xcassets/addvcwater/4.imageset/Frame.png
vendored
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
anniversary_Project/Assets.xcassets/addvcwater/4.imageset/Frame@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 3.7 KiB |