从后台恢复时恢复动画;更新资源图片
|
@ -76,21 +76,18 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
|||
}
|
||||
|
||||
extension ProHUD.Scene {
|
||||
static var confirm: ProHUD.Scene {
|
||||
var scene = ProHUD.Scene(identifier: "confirm")
|
||||
scene.image = UIImage(named: "ProHUDMessage")
|
||||
return scene
|
||||
}
|
||||
|
||||
static var delete: ProHUD.Scene {
|
||||
var scene = ProHUD.Scene(identifier: "delete")
|
||||
scene.image = UIImage(named: "ProHUDTrash")
|
||||
scene.image = UIImage(named: "prohud.trash")
|
||||
scene.title = "确认删除"
|
||||
scene.message = "此操作不可撤销"
|
||||
return scene
|
||||
}
|
||||
|
||||
static var buy: ProHUD.Scene {
|
||||
var scene = ProHUD.Scene(identifier: "buy")
|
||||
scene.image = UIImage(named: "ProHUDBuy")
|
||||
scene.image = UIImage(named: "alert.buy")
|
||||
scene.title = "确认付款"
|
||||
scene.message = "一旦购买拒不退款"
|
||||
return scene
|
||||
|
|
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 26 KiB |
|
@ -1,22 +0,0 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "ProHUDMessage@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "ProHUDMessage@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 3.2 KiB |
|
@ -1,22 +0,0 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "ProHUDTrash@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "ProHUDTrash@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
@ -5,12 +5,12 @@
|
|||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "fail@2x.png",
|
||||
"filename" : "prohud.candy@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "fail@3x.png",
|
||||
"filename" : "prohud.candy@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
BIN
Example-Old/Example/Assets.xcassets/prohud.candy.imageset/prohud.candy@2x.png
vendored
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
Example-Old/Example/Assets.xcassets/prohud.candy.imageset/prohud.candy@3x.png
vendored
Normal file
After Width: | Height: | Size: 25 KiB |
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.checkmark@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.checkmark@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
Example-Old/Example/Assets.xcassets/prohud.checkmark.imageset/prohud.checkmark@2x.png
vendored
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
Example-Old/Example/Assets.xcassets/prohud.checkmark.imageset/prohud.checkmark@3x.png
vendored
Normal file
After Width: | Height: | Size: 7.0 KiB |
22
Example-Old/Example/Assets.xcassets/prohud.exclamationmark.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.exclamationmark@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.exclamationmark@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
Example-Old/Example/Assets.xcassets/prohud.exclamationmark.imageset/prohud.exclamationmark@2x.png
vendored
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
Example-Old/Example/Assets.xcassets/prohud.exclamationmark.imageset/prohud.exclamationmark@3x.png
vendored
Normal file
After Width: | Height: | Size: 5.9 KiB |
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.message@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.message@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
Example-Old/Example/Assets.xcassets/prohud.message.imageset/prohud.message@2x.png
vendored
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
Example-Old/Example/Assets.xcassets/prohud.message.imageset/prohud.message@3x.png
vendored
Normal file
After Width: | Height: | Size: 5.8 KiB |
|
@ -5,12 +5,12 @@
|
|||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "矩形@2x.png",
|
||||
"filename" : "prohud.note@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "矩形@3x.png",
|
||||
"filename" : "prohud.note@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
BIN
Example-Old/Example/Assets.xcassets/prohud.note.imageset/prohud.note@2x.png
vendored
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
Example-Old/Example/Assets.xcassets/prohud.note.imageset/prohud.note@3x.png
vendored
Normal file
After Width: | Height: | Size: 6.6 KiB |
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.privacy@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.privacy@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
Example-Old/Example/Assets.xcassets/prohud.privacy.imageset/prohud.privacy@2x.png
vendored
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
Example-Old/Example/Assets.xcassets/prohud.privacy.imageset/prohud.privacy@3x.png
vendored
Normal file
After Width: | Height: | Size: 7.3 KiB |
22
Example-Old/Example/Assets.xcassets/prohud.questionmark.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.questionmark@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.questionmark@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
Example-Old/Example/Assets.xcassets/prohud.questionmark.imageset/prohud.questionmark@2x.png
vendored
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
Example-Old/Example/Assets.xcassets/prohud.questionmark.imageset/prohud.questionmark@3x.png
vendored
Normal file
After Width: | Height: | Size: 6.9 KiB |
|
@ -5,12 +5,12 @@
|
|||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "success@2x.png",
|
||||
"filename" : "prohud.trash@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "success@3x.png",
|
||||
"filename" : "prohud.trash@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
BIN
Example-Old/Example/Assets.xcassets/prohud.trash.imageset/prohud.trash@2x.png
vendored
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
Example-Old/Example/Assets.xcassets/prohud.trash.imageset/prohud.trash@3x.png
vendored
Normal file
After Width: | Height: | Size: 6.5 KiB |
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.windmill@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.windmill@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
Example-Old/Example/Assets.xcassets/prohud.windmill.imageset/prohud.windmill@2x.png
vendored
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
Example-Old/Example/Assets.xcassets/prohud.windmill.imageset/prohud.windmill@3x.png
vendored
Normal file
After Width: | Height: | Size: 7.4 KiB |
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.xmark@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.xmark@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
Example-Old/Example/Assets.xcassets/prohud.xmark.imageset/prohud.xmark@2x.png
vendored
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
Example-Old/Example/Assets.xcassets/prohud.xmark.imageset/prohud.xmark@3x.png
vendored
Normal file
After Width: | Height: | Size: 6.1 KiB |
|
@ -1,9 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14835.7" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="ttk-4w-IeX">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16097" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="ttk-4w-IeX">
|
||||
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14790.5"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
|
@ -11,10 +11,17 @@
|
|||
<!--ProHUD-->
|
||||
<scene sceneID="tne-QT-ifu">
|
||||
<objects>
|
||||
<viewController id="BYZ-38-t0r" customClass="ViewController" customModule="Example" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<viewController id="BYZ-38-t0r" customClass="ViewController" customModule="ProHUD_老项目" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
|
||||
<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" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="RLL-Jl-KUu">
|
||||
<rect key="frame" x="168" y="377" width="78" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<state key="normal" title="Button" image="icloud.and.arrow.down" catalog="system"/>
|
||||
</button>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
|
||||
</view>
|
||||
|
@ -43,4 +50,7 @@
|
|||
<point key="canvasLocation" x="140.57971014492756" y="133.92857142857142"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="icloud.and.arrow.down" catalog="system" width="128" height="112"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
|
|
@ -23,7 +23,7 @@ class TestAlertVC: BaseListVC {
|
|||
"场景:同步成功(写法2)",
|
||||
"场景:同步失败和重试",
|
||||
"极端场景:短时间内调用了多次同一个弹窗",
|
||||
"极端场景:多个弹窗重叠",
|
||||
"极端场景:多个不同的弹窗重叠",
|
||||
"测试较长的标题和内容",
|
||||
"测试特别长的标题和内容"]
|
||||
}
|
||||
|
@ -45,10 +45,8 @@ class TestAlertVC: BaseListVC {
|
|||
t?.pop()
|
||||
f()
|
||||
}
|
||||
self?.simulateSync()
|
||||
}
|
||||
}
|
||||
simulateSync()
|
||||
}
|
||||
f()
|
||||
} else if row == 1 {
|
||||
|
|
|
@ -29,7 +29,7 @@ class TestGuardVC: BaseListVC {
|
|||
Guard.push() { (vc) in
|
||||
vc.update { (vm) in
|
||||
vm.add(action: .destructive, title: "删除") { [weak vc] in
|
||||
Alert.push(scene: .delete, title: "确认删除", message: "此操作不可撤销") { (vc) in
|
||||
Alert.push(scene: .delete) { (vc) in
|
||||
vc.update { (vm) in
|
||||
vm.add(action: .destructive, title: "删除") { [weak vc] in
|
||||
vc?.pop()
|
||||
|
|
|
@ -29,6 +29,7 @@ class TestToastVC: BaseListVC {
|
|||
"根据id查找并修改实例",
|
||||
"测试较长的标题和内容",
|
||||
"测试特别长的标题和内容",
|
||||
"测试只有title",
|
||||
"测试只有message"]
|
||||
}
|
||||
|
||||
|
@ -62,7 +63,12 @@ class TestToastVC: BaseListVC {
|
|||
} else if row == 4 {
|
||||
Toast.push(scene: .default, title: "传入指定图标测试", message: "这是消息内容") { (vc) in
|
||||
vc.update { (vm) in
|
||||
vm.icon = UIImage(named: "icon_download")
|
||||
if #available(iOS 13.0, *) {
|
||||
vc.imageView.tintColor = .brown
|
||||
vm.icon = UIImage(systemName: "icloud.and.arrow.down")
|
||||
} else {
|
||||
vm.icon = UIImage(named: "icloud.and.arrow.down")
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if row == 5 {
|
||||
|
@ -73,7 +79,7 @@ class TestToastVC: BaseListVC {
|
|||
}
|
||||
}
|
||||
} else if row == 6 {
|
||||
Toast.push(scene: .default, title: "好友邀请", message: "你收到一条好友邀请,点击查看详情。", duration: 10) { (vc) in
|
||||
Toast.push(scene: .message, title: "好友邀请", message: "你收到一条好友邀请,点击查看详情。", duration: 10) { (vc) in
|
||||
vc.identifier = "xxx"
|
||||
vc.didTapped { [weak vc] in
|
||||
vc?.pop()
|
||||
|
@ -117,7 +123,6 @@ class TestToastVC: BaseListVC {
|
|||
} else if row == 9 {
|
||||
Toast.push() { (a) in
|
||||
a.update { (vm) in
|
||||
vm.scene = .warning
|
||||
vm.title = "正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过"
|
||||
vm.message = "正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过"
|
||||
|
||||
|
@ -126,7 +131,6 @@ class TestToastVC: BaseListVC {
|
|||
} else if row == 10 {
|
||||
Toast.push() { (a) in
|
||||
a.update { (vm) in
|
||||
vm.scene = .warning
|
||||
vm.title = "正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过"
|
||||
vm.message = "正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过"
|
||||
|
||||
|
@ -136,15 +140,23 @@ class TestToastVC: BaseListVC {
|
|||
Toast.push() { (a) in
|
||||
a.update { (vm) in
|
||||
vm.scene = .warning
|
||||
vm.message = "正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过"
|
||||
vm.title = "正在同步看到了你撒地"
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if row == 12 {
|
||||
Toast.push() { (a) in
|
||||
a.update { (vm) in
|
||||
vm.scene = .warning
|
||||
vm.message = "正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过"
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func simulateSync() {
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 10) {
|
||||
Toast.find("loading", last: { (t) in
|
||||
t.update { (vm) in
|
||||
vm.scene = .success
|
||||
|
|
|
@ -10,6 +10,10 @@ import UIKit
|
|||
import SnapKit
|
||||
import Inspire
|
||||
|
||||
public extension UIWindow.Level {
|
||||
static let proAlert = UIWindow.Level.alert - 1
|
||||
}
|
||||
|
||||
public extension ProHUD.Configuration {
|
||||
struct Alert {
|
||||
// MARK: 卡片样式
|
||||
|
@ -112,23 +116,20 @@ fileprivate var privUpdateImage: (ProHUD.Alert) -> Void = {
|
|||
return { (vc) in
|
||||
let config = cfg.alert
|
||||
let img = vc.vm.icon ?? vc.vm.scene.image
|
||||
if let imgv = vc.imageView {
|
||||
imgv.image = img
|
||||
} else {
|
||||
let icon = UIImageView(image: img)
|
||||
vc.contentStack.addArrangedSubview(icon)
|
||||
icon.contentMode = .scaleAspectFit
|
||||
icon.snp.makeConstraints { (mk) in
|
||||
mk.top.greaterThanOrEqualTo(vc.contentView).offset(config.padding*2.25)
|
||||
mk.bottom.lessThanOrEqualTo(vc.contentView).offset(-config.padding*2.25)
|
||||
mk.leading.greaterThanOrEqualTo(vc.contentView).offset(config.padding*4)
|
||||
mk.trailing.lessThanOrEqualTo(vc.contentView).offset(-config.padding*4)
|
||||
mk.width.equalTo(config.iconSize.width)
|
||||
mk.height.equalTo(config.iconSize.height)
|
||||
}
|
||||
vc.imageView = icon
|
||||
vc.imageView.image = img
|
||||
vc.contentStack.addArrangedSubview(vc.imageView)
|
||||
vc.imageView.contentMode = .scaleAspectFit
|
||||
vc.imageView.snp.makeConstraints { (mk) in
|
||||
mk.top.greaterThanOrEqualTo(vc.contentView).offset(config.padding*2.25)
|
||||
mk.bottom.lessThanOrEqualTo(vc.contentView).offset(-config.padding*2.25)
|
||||
mk.leading.greaterThanOrEqualTo(vc.contentView).offset(config.padding*4)
|
||||
mk.trailing.lessThanOrEqualTo(vc.contentView).offset(-config.padding*4)
|
||||
mk.width.equalTo(config.iconSize.width)
|
||||
mk.height.equalTo(config.iconSize.height)
|
||||
}
|
||||
vc.imageView?.layer.removeAllAnimations()
|
||||
vc.imageView.layer.removeAllAnimations()
|
||||
vc.animateLayer = nil
|
||||
vc.animation = nil
|
||||
}
|
||||
}()
|
||||
|
||||
|
@ -298,10 +299,10 @@ fileprivate var privReloadData: (ProHUD.Alert) -> Void = {
|
|||
// 动画
|
||||
if isFirstLayout {
|
||||
vc.view.layoutIfNeeded()
|
||||
vc.imageView?.transform = .init(scaleX: 0.75, y: 0.75)
|
||||
vc.imageView.transform = .init(scaleX: 0.75, y: 0.75)
|
||||
UIView.animateForAlert {
|
||||
vc.view.layoutIfNeeded()
|
||||
vc.imageView?.transform = .identity
|
||||
vc.imageView.transform = .identity
|
||||
}
|
||||
} else {
|
||||
UIView.animateForAlert {
|
||||
|
|
|
@ -36,7 +36,7 @@ public extension ProHUD {
|
|||
}()
|
||||
|
||||
/// 图片
|
||||
public var imageView: UIImageView?
|
||||
public var imageView = UIImageView()
|
||||
|
||||
/// 标题
|
||||
public var titleLabel: UILabel?
|
||||
|
@ -151,16 +151,11 @@ public extension Alert {
|
|||
vm.forceQuitCallback = callback
|
||||
}
|
||||
|
||||
|
||||
/// 图片旋转效果
|
||||
/// - Parameter flag: 是否开启
|
||||
func rotate(_ flag: Bool = true, direction: ProHUD.RotateDirection = .clockwise, speed: CFTimeInterval = 1) {
|
||||
DispatchQueue.main.async {
|
||||
self.imageView?.rotate(flag: flag, direction: direction, speed: speed)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension Alert: RotateAnimation {
|
||||
|
||||
}
|
||||
|
||||
// MARK: - 实例管理器
|
||||
public extension Alert {
|
||||
|
@ -320,7 +315,7 @@ fileprivate extension Alert {
|
|||
alertWindow = w
|
||||
w.backgroundColor = UIColor.init(red: 0, green: 0, blue: 0, alpha: 0)
|
||||
// 比原生alert层级低一点
|
||||
w.windowLevel = UIWindow.Level.alert - 1
|
||||
w.windowLevel = .proAlert
|
||||
return w
|
||||
}
|
||||
|
||||
|
@ -337,7 +332,7 @@ fileprivate extension Alert {
|
|||
} else if alerts.count == 1 {
|
||||
alerts.removeAll()
|
||||
} else {
|
||||
debug("漏洞:已经没有alert了")
|
||||
debug("‼️代码漏洞:已经没有alert了")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ public extension Alert {
|
|||
/// 图标
|
||||
public var icon: UIImage? {
|
||||
didSet {
|
||||
vc?.imageView?.image = icon
|
||||
vc?.imageView.image = icon
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -120,9 +120,9 @@ public extension Guard {
|
|||
return f(vc)
|
||||
} else {
|
||||
// 尝试获取RootVC
|
||||
let ws = UIApplication.shared.windows.reversed().filter { (w) -> Bool in
|
||||
let ws = UIApplication.shared.windows.filter { (w) -> Bool in
|
||||
// 去除掉诸如 UITextEffectsWindow 这样的类,去掉隐藏的Window
|
||||
if "\(type(of:w))" == "UIWindow" && w.isHidden == false {
|
||||
if "\(type(of:w))" == "UIWindow" && w.isHidden == false && w.windowLevel == .normal {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
|
|
|
@ -18,6 +18,10 @@ public class HUDController: UIViewController {
|
|||
internal var willDisappearCallback: (() -> Void)?
|
||||
internal var didDisappearCallback: (() -> Void)?
|
||||
|
||||
/// 执行动画的图层
|
||||
public var animateLayer: CALayer?
|
||||
internal var animation: CAAnimation?
|
||||
|
||||
/// 按钮事件
|
||||
internal var buttonEvents = [UIButton:() -> Void]()
|
||||
|
||||
|
@ -84,3 +88,50 @@ internal extension HUDController {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
extension HUDController {
|
||||
@objc func pauseAnimation() {
|
||||
if let layer = animateLayer {
|
||||
animation = layer.animation(forKey: .rotateKey)
|
||||
layer.timeOffset = layer.convertTime(CACurrentMediaTime(), from: nil)
|
||||
layer.speed = 0
|
||||
}
|
||||
}
|
||||
@objc func resumeAnimation() {
|
||||
if let layer = animateLayer, let ani = animation, layer.speed == 0 {
|
||||
let pauseTime = layer.timeOffset
|
||||
layer.timeOffset = 0
|
||||
let beginTime = layer.convertTime(CACurrentMediaTime(), from: nil) - pauseTime
|
||||
layer.beginTime = beginTime
|
||||
layer.speed = 1
|
||||
layer.add(ani, forKey: .rotateKey)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public protocol RotateAnimation: HUDController {
|
||||
var imageView: UIImageView { get }
|
||||
var animateLayer: CALayer? { get set }
|
||||
}
|
||||
|
||||
public extension RotateAnimation {
|
||||
|
||||
func rotate(_ layer: CALayer? = nil, direction: ProHUD.RotateDirection = .clockwise, speed: CFTimeInterval = 1) {
|
||||
DispatchQueue.main.async {
|
||||
let l = layer ?? self.imageView.layer
|
||||
self.animateLayer = l
|
||||
l.startRotate(direction: direction, speed: speed)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(self.pauseAnimation), name: UIApplication.didEnterBackgroundNotification, object: nil)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(self.resumeAnimation), name: UIApplication.willEnterForegroundNotification, object: nil)
|
||||
}
|
||||
}
|
||||
func rotate(_ layer: CALayer? = nil, _ flag: Bool) {
|
||||
DispatchQueue.main.async {
|
||||
self.animateLayer = nil
|
||||
(layer ?? self.imageView.layer)?.endRotate()
|
||||
NotificationCenter.default.removeObserver(self, name: UIApplication.didEnterBackgroundNotification, object: nil)
|
||||
NotificationCenter.default.removeObserver(self, name: UIApplication.willEnterForegroundNotification, object: nil)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -31,6 +31,11 @@ public extension ProHUD {
|
|||
case clockwise = 1
|
||||
case counterclockwise = -1
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
internal extension String {
|
||||
static let rotateKey = "rotationAnimation"
|
||||
}
|
||||
|
||||
internal extension Alert {
|
||||
|
@ -150,21 +155,21 @@ internal extension UIView {
|
|||
animateForGuard(animations: animations, completion: nil)
|
||||
}
|
||||
|
||||
func rotate(flag: Bool, direction: ProHUD.RotateDirection, speed: CFTimeInterval) {
|
||||
if flag == true {
|
||||
if layer.animation(forKey: "rotationAnimation") == nil {
|
||||
let ani = CABasicAnimation(keyPath: "transform.rotation.z")
|
||||
ani.toValue = direction.rawValue * Double.pi * 2.0
|
||||
if speed > 0 {
|
||||
ani.duration = 2 / speed
|
||||
}
|
||||
ani.repeatDuration = .infinity
|
||||
layer.add(ani, forKey: "rotationAnimation")
|
||||
}
|
||||
|
||||
extension CALayer {
|
||||
func startRotate(direction: ProHUD.RotateDirection, speed: CFTimeInterval) {
|
||||
if animation(forKey: .rotateKey) == nil {
|
||||
let ani = CABasicAnimation(keyPath: "transform.rotation.z")
|
||||
ani.toValue = direction.rawValue * Double.pi * 2.0
|
||||
if speed > 0 {
|
||||
ani.duration = 2 / speed
|
||||
}
|
||||
} else {
|
||||
layer.removeAnimation(forKey: "rotationAnimation")
|
||||
ani.repeatDuration = .infinity
|
||||
add(ani, forKey: .rotateKey)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func endRotate() {
|
||||
removeAnimation(forKey: .rotateKey)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,15 +33,19 @@ public class ProHUD {
|
|||
|
||||
}
|
||||
|
||||
// 默认场景
|
||||
// 默认场景,可直接在项目工程中覆写场景参数
|
||||
public extension ProHUD.Scene {
|
||||
init(identifier: String) {
|
||||
self.init()
|
||||
id = identifier
|
||||
}
|
||||
|
||||
static var `default`: ProHUD.Scene {
|
||||
var scene = ProHUD.Scene.init(identifier: "default")
|
||||
scene.image = ProHUD.image(named: "prohud.note")
|
||||
return scene
|
||||
}
|
||||
static var message: ProHUD.Scene {
|
||||
var scene = ProHUD.Scene.init(identifier: "message")
|
||||
scene.image = ProHUD.image(named: "prohud.message")
|
||||
return scene
|
||||
}
|
||||
|
@ -49,27 +53,48 @@ public extension ProHUD.Scene {
|
|||
var scene = ProHUD.Scene.init(identifier: "loading")
|
||||
scene.alertDuration = 0
|
||||
scene.toastDuration = 0
|
||||
scene.image = ProHUD.image(named: "prohud.loading")
|
||||
scene.image = ProHUD.image(named: "prohud.candy")
|
||||
return scene
|
||||
}
|
||||
static var success: ProHUD.Scene {
|
||||
var scene = ProHUD.Scene.init(identifier: "success")
|
||||
scene.alertDuration = 2
|
||||
scene.image = ProHUD.image(named: "prohud.success")
|
||||
scene.image = ProHUD.image(named: "prohud.checkmark")
|
||||
return scene
|
||||
}
|
||||
static var warning: ProHUD.Scene {
|
||||
var scene = ProHUD.Scene.init(identifier: "warning")
|
||||
scene.alertDuration = 2
|
||||
scene.toastDuration = 5
|
||||
scene.image = ProHUD.image(named: "prohud.warning")
|
||||
scene.image = ProHUD.image(named: "prohud.exclamationmark")
|
||||
return scene
|
||||
}
|
||||
static var error: ProHUD.Scene {
|
||||
var scene = ProHUD.Scene.init(identifier: "error")
|
||||
scene.alertDuration = 2
|
||||
scene.toastDuration = 5
|
||||
scene.image = ProHUD.image(named: "prohud.error")
|
||||
scene.image = ProHUD.image(named: "prohud.xmark")
|
||||
return scene
|
||||
}
|
||||
static var confirm: ProHUD.Scene {
|
||||
var scene = ProHUD.Scene.init(identifier: "confirm")
|
||||
scene.alertDuration = 2
|
||||
scene.toastDuration = 5
|
||||
scene.image = ProHUD.image(named: "prohud.questionmark")
|
||||
return scene
|
||||
}
|
||||
static var privacy: ProHUD.Scene {
|
||||
var scene = ProHUD.Scene.init(identifier: "privacy")
|
||||
scene.alertDuration = 2
|
||||
scene.toastDuration = 5
|
||||
scene.image = ProHUD.image(named: "prohud.privacy")
|
||||
return scene
|
||||
}
|
||||
static var delete: ProHUD.Scene {
|
||||
var scene = ProHUD.Scene.init(identifier: "delete")
|
||||
scene.alertDuration = 2
|
||||
scene.toastDuration = 5
|
||||
scene.image = ProHUD.image(named: "prohud.trash")
|
||||
return scene
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.candy@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.candy@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 25 KiB |
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.checkmark@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.checkmark@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 4.7 KiB |
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.exclamationmark@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.exclamationmark@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
Source/ProHUD.xcassets/prohud.exclamationmark.imageset/prohud.exclamationmark@2x.png
vendored
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
Source/ProHUD.xcassets/prohud.exclamationmark.imageset/prohud.exclamationmark@3x.png
vendored
Normal file
After Width: | Height: | Size: 5.9 KiB |
|
@ -1,54 +0,0 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "loading@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"filename" : "loading_dark@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "loading@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"filename" : "loading_dark@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 5.8 KiB |
|
@ -5,18 +5,18 @@
|
|||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.message@2x.png",
|
||||
"idiom" : "universal",
|
||||
"filename" : "ProHUDMessage@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.message@3x.png",
|
||||
"idiom" : "universal",
|
||||
"filename" : "ProHUDMessage@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 5.8 KiB |
|
@ -5,12 +5,12 @@
|
|||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "warning@2x.png",
|
||||
"filename" : "prohud.note@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "warning@3x.png",
|
||||
"filename" : "prohud.note@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 6.6 KiB |
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.privacy@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.privacy@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 6.9 KiB |
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.questionmark@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.questionmark@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
Source/ProHUD.xcassets/prohud.questionmark.imageset/prohud.questionmark@2x.png
vendored
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
Source/ProHUD.xcassets/prohud.questionmark.imageset/prohud.questionmark@3x.png
vendored
Normal file
After Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 5.9 KiB |
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.trash@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.trash@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 4.6 KiB |
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.windmill@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.windmill@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 4.8 KiB |
After Width: | Height: | Size: 7.4 KiB |
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.xmark@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "prohud.xmark@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 6.1 KiB |