Skip to content

Commit ce2aca8

Browse files
author
Владислав Прусаков
committed
Here we go
1 parent 95ea47b commit ce2aca8

File tree

18 files changed

+1137
-16
lines changed

18 files changed

+1137
-16
lines changed

Example/Example.xcodeproj/project.pbxproj

Lines changed: 385 additions & 0 deletions
Large diffs are not rendered by default.

Example/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>IDEDidComputeMac32BitWarning</key>
6+
<true/>
7+
</dict>
8+
</plist>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"colors" : [
3+
{
4+
"idiom" : "universal"
5+
}
6+
],
7+
"info" : {
8+
"author" : "xcode",
9+
"version" : 1
10+
}
11+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
{
2+
"images" : [
3+
{
4+
"idiom" : "universal",
5+
"platform" : "ios",
6+
"size" : "1024x1024"
7+
},
8+
{
9+
"idiom" : "mac",
10+
"scale" : "1x",
11+
"size" : "16x16"
12+
},
13+
{
14+
"idiom" : "mac",
15+
"scale" : "2x",
16+
"size" : "16x16"
17+
},
18+
{
19+
"idiom" : "mac",
20+
"scale" : "1x",
21+
"size" : "32x32"
22+
},
23+
{
24+
"idiom" : "mac",
25+
"scale" : "2x",
26+
"size" : "32x32"
27+
},
28+
{
29+
"idiom" : "mac",
30+
"scale" : "1x",
31+
"size" : "128x128"
32+
},
33+
{
34+
"idiom" : "mac",
35+
"scale" : "2x",
36+
"size" : "128x128"
37+
},
38+
{
39+
"idiom" : "mac",
40+
"scale" : "1x",
41+
"size" : "256x256"
42+
},
43+
{
44+
"idiom" : "mac",
45+
"scale" : "2x",
46+
"size" : "256x256"
47+
},
48+
{
49+
"idiom" : "mac",
50+
"scale" : "1x",
51+
"size" : "512x512"
52+
},
53+
{
54+
"idiom" : "mac",
55+
"scale" : "2x",
56+
"size" : "512x512"
57+
}
58+
],
59+
"info" : {
60+
"author" : "xcode",
61+
"version" : 1
62+
}
63+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"info" : {
3+
"author" : "xcode",
4+
"version" : 1
5+
}
6+
}

Example/Example/Example.entitlements

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>com.apple.security.app-sandbox</key>
6+
<true/>
7+
<key>com.apple.security.files.user-selected.read-only</key>
8+
<true/>
9+
</dict>
10+
</plist>

Example/Example/ExampleApp.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//
2+
// ExampleView.swift
3+
//
4+
//
5+
// Created by v.prusakov on 10/27/22.
6+
//
7+
8+
import SwiftUI
9+
10+
@main
11+
struct ExampleApp: App {
12+
var body: some Scene {
13+
WindowGroup {
14+
ExampleView()
15+
}
16+
}
17+
}

Example/Example/ExampleView.swift

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
//
2+
// ExampleView.swift
3+
//
4+
//
5+
// Created by v.prusakov on 10/27/22.
6+
//
7+
8+
import SwiftUI
9+
import EasySkeleton
10+
11+
struct ExampleView: View {
12+
13+
@State private var isSkeletonActive = false
14+
15+
var body: some View {
16+
ZStack {
17+
ScrollView {
18+
VStack(alignment: .leading, spacing: 8) {
19+
HeaderView()
20+
21+
VStack(alignment: .leading, spacing: 8) {
22+
Text("Big announcement!!")
23+
.font(.title)
24+
.foregroundColor(.white)
25+
26+
Text("Pay now, get latter!")
27+
.font(.body)
28+
.foregroundColor(.white.opacity(0.8))
29+
}
30+
.frame(maxWidth: .infinity)
31+
.padding(.all, 16)
32+
.background(
33+
RoundedRectangle(cornerRadius: 16)
34+
.fill(Color.accentColor)
35+
)
36+
.padding(.bottom, 16)
37+
.skeletonable()
38+
39+
ForEach(0..<10, id: \.self) { index in
40+
self.cell(at: index)
41+
}
42+
.skeletonForEach(itemsCount: 5) { index in
43+
self.cell(at: index)
44+
}
45+
46+
Spacer()
47+
}
48+
}
49+
.padding(.bottom, 32)
50+
.skeletonCornerRadius(16, style: .continuous)
51+
.setSkeleton(
52+
self.$isSkeletonActive,
53+
animationType: .solid(Color.black),
54+
animation: Animation.default,
55+
transition: AnyTransition.opacity
56+
)
57+
58+
self.skeletonControlButton
59+
}
60+
.padding(.all)
61+
.frame(minWidth: 348, minHeight: 400)
62+
}
63+
64+
@ViewBuilder
65+
private var skeletonControlButton: some View {
66+
VStack {
67+
68+
Spacer()
69+
70+
HStack {
71+
72+
Spacer()
73+
74+
Button {
75+
withAnimation {
76+
self.isSkeletonActive.toggle()
77+
}
78+
} label: {
79+
Text("Skeleton Active: \(isSkeletonActive ? "Yes" : "No")")
80+
}
81+
82+
Spacer()
83+
}
84+
.frame(maxWidth: .infinity, idealHeight: 56)
85+
.background(Color.white)
86+
}
87+
}
88+
89+
private func cell(at index: Int) -> some View {
90+
VStack(alignment: .leading, spacing: 4) {
91+
Text("Element at index \(index)")
92+
.font(.body)
93+
.skeletonable()
94+
95+
Text("Some text")
96+
.font(.caption)
97+
.skeletonable()
98+
}
99+
.unskeletonable()
100+
}
101+
}
102+
103+
struct HeaderView: View {
104+
105+
@Environment(\.skeleton) private var skeleton
106+
107+
var body: some View {
108+
VStack(alignment: .leading) {
109+
HStack {
110+
Text("Hello there!")
111+
.font(.largeTitle)
112+
113+
Spacer()
114+
115+
Button(action: {
116+
117+
}, label: {
118+
Text("ES")
119+
.font(.system(size: 17))
120+
.frame(width: 48, height: 48)
121+
.overlay(
122+
RoundedRectangle(cornerRadius: 18, style: .continuous)
123+
.stroke(Color.skeleton)
124+
)
125+
})
126+
.buttonStyle(.plain)
127+
.skeletonable()
128+
.disabled(skeleton.isSkeletonActive)
129+
}
130+
131+
Text("Easy Skeleton")
132+
.skeletonable()
133+
.skeletonLinesCount(2)
134+
}
135+
136+
}
137+
}
138+
139+
struct ExampleView_Previews: PreviewProvider {
140+
static var previews: some View {
141+
ExampleView()
142+
}
143+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"info" : {
3+
"author" : "xcode",
4+
"version" : 1
5+
}
6+
}

Package.swift

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,30 @@
1-
// swift-tools-version: 5.7
1+
// swift-tools-version: 5.6
22
// The swift-tools-version declares the minimum version of Swift required to build this package.
33

44
import PackageDescription
55

66
let package = Package(
77
name: "EasySkeleton",
8+
platforms: [
9+
.iOS(.v14),
10+
.tvOS(.v14),
11+
.macOS(.v11)
12+
],
813
products: [
9-
// Products define the executables and libraries a package produces, and make them visible to other packages.
1014
.library(
1115
name: "EasySkeleton",
12-
targets: ["EasySkeleton"]),
13-
],
14-
dependencies: [
15-
// Dependencies declare other packages that this package depends on.
16-
// .package(url: /* package url */, from: "1.0.0"),
16+
targets: ["EasySkeleton"]
17+
)
1718
],
1819
targets: [
19-
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
20-
// Targets can depend on other targets in this package, and on products in packages this package depends on.
2120
.target(
2221
name: "EasySkeleton",
23-
dependencies: []),
22+
dependencies: []
23+
),
24+
2425
.testTarget(
2526
name: "EasySkeletonTests",
26-
dependencies: ["EasySkeleton"]),
27+
dependencies: ["EasySkeleton"]
28+
),
2729
]
2830
)

0 commit comments

Comments
 (0)