рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдирдкреБрдВрд╕рдХрддрд╛ред рднрд╛рдЧ 1

рд╕рд▓рд╛рдо, рдЦрд╝рдмрд░реЛрдВ рдХреЛ! рдЙрдиреНрдирдд рдкрд╛рдареНрдпрдХреНрд░рдо "IOS рдбреЗрд╡рд▓рдкрд░" рдХреЗ рд▓реЙрдиреНрдЪ рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ , рд╣рдордиреЗ рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЕрдиреБрд╡рд╛рдж рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред




рдЧреИрд░-рд░реВрдкрд╛рддреНрдордХ рдбрд┐рдЬрд╛рдЗрди рд╢рд╛рдпрдж рд╣рд╛рд▓ рдХреЗ рдорд╣реАрдиреЛрдВ рдХреА рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдкреНрд░рд╡реГрддреНрддрд┐ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдЪ рдореЗрдВ, Apple рдиреЗ WWDC18 рдореЗрдВ рдЕрдкрдиреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗ рдХрд┐ рдЖрдк рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреИрд░-рд░реВрдкрд╛рддреНрдордХ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ - рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд - рд╣рдо рдЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдХреИрд╕реЗ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЗрд╕рдХреА рдкрд╣реБрдВрдЪ рдмрдврд╝ рд╕рдХреЗред
рдорд╣рддреНрд╡рдкреВрд░реНрдг : рдирд┐рдпреЛрдореЙрд░реНрдлрд┐рдЬреНрдо - рдЬрд┐рд╕реЗ рдХрднреА-рдХрднреА рдиреНрдпреВрд░реЛрдореЛрд░реНрдлрд┐рдЬреНрдо рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ - рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рдЧрдВрднреАрд░ рдкрд░рд┐рдгрд╛рдо рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдмрд╛рдХреА рдХреЛ рдЫреЛрдбрд╝ рджреЗрдиреЗ рдХреЗ рдкреНрд░рд▓реЛрднрди рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдореИрдВ рдЖрдкрд╕реЗ рд▓реЗрдЦ рдХреЛ рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рдФрд░ рджреЛрдиреЛрдВ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХрд╛ рдЖрдЧреНрд░рд╣ рдХрд░рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдЖрдк рдкреВрд░реА рддрд╕реНрд╡реАрд░ рджреЗрдЦ рд╕рдХреЗрдВ ред


рдирд┐рдпреЛрдореЙрд░реНрдлрд┐рдЬреНрдо рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдХреЛрдб рдкрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВ, рдореИрдВ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рдЗрд╕ рджрд┐рд╢рд╛ рдХреЗ рджреЛ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдЪрд▓рддреЗ рд╣реБрдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛрдВрдЧреЗ:

  1. рд╕реНрдХреНрд░реАрди рдкрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпреЛрдореЙрд░реНрдлрд┐рдЬреНрдо рдЪрдХрд╛рдЪреМрдВрдз рдФрд░ рдЫрд╛рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
  2. рдХрдВрдЯреНрд░рд╛рд╕реНрдЯ рдШрдЯрддрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдлреЗрдж рдпрд╛ рдХрд╛рд▓реЗ рд░рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдФрд░ рдЫрд╛рдпрд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо "рдПрдХреНрд╕рдЯреНрд░реВрдбреЗрдб рдкреНрд▓рд╛рд╕реНрдЯрд┐рдХ" рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИ - рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреА рдЖрдБрдЦреЛрдВ рд╕реЗ рдЯрдХрд░рд╛рдП рдмрд┐рдирд╛ рддрд╛рдЬрд╝рд╛ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рджрд┐рдЦрддрд╛ рд╣реИред рдореИрдВ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рджреЛрд╣рд░рд╛ рдирд╣реАрдВ рд╕рдХрддрд╛ рдХрд┐ рдЖрдХрд╛рд░ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╖рдорддрд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ рдФрд░ рдЫрд╛рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЧрдВрднреАрд░рддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕ рдкрд░ рдмрд╛рдж рдореЗрдВ рд▓реМрдЯреЗрдВрдЧреЗред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдореЗрдВ neomorphism рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрдиреЗ рдореЗрдВ рд▓рдЧрд╛ рд╕рдордп рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ - рднрд▓реЗ рд╣реА рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдпрд╣ рдЖрдкрдХреЗ рдХреМрд╢рд▓ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛рдЯрд╛ рдЬреИрд╕рд╛ рд╣реИред

рдареАрдХ рд╣реИ, рдкрд░реНрдпрд╛рдкреНрдд рдирд┐рд╖реНрдХреНрд░рд┐рдп рдмрд╛рдд - рдЪрд▓реЛ рдХреЛрдб рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред

рдПрдХ рдЧреИрд░-рдЖрдХрд╛рд░ рдХрд╛ рдирдХреНрд╢рд╛ рдмрдирд╛рдирд╛


рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рдПрдХ рдЧреИрд░-рдЖрдХрд╛рд░ рдХрд╛ рдирдХреНрд╢рд╛ рдмрдирд╛рдирд╛ рд╣реИ: рдПрдХ рдЧреЛрд▓ рдЖрдпрддрд╛рдХрд╛рд░ рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдпрд╣ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╣рдо рдЗрди рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ SwiftUI рдХреЗ рдЕрдиреНрдп рднрд╛рдЧреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдЗрдП рд╕рд┐рдВрдЧрд▓ рд╡реНрдпреВ рдРрдк рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ рдЖрдИрдУрдПрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП SwiftUI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ Neumorphism рдХрд╛ рдирд╛рдо рджреЗрдВред

рдпреБрдХреНрддрд┐: рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ Xcode рдореЗрдВ SwiftUI рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рд╣реИ, рддреЛ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рддреБрд░рдВрдд рд╕рдХреНрд░рд┐рдп рдХрд░ рджреЗрдВ - рдЖрдкрдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рд╣рдо рдПрдХ рдорд▓рд╛рдИрджрд╛рд░ рд░рдВрдЧ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд░рдВрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рд╢реБрджреНрдз рдЧреНрд░реЗ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реВрдХреНрд╖реНрдо рдЫрд╛рдпрд╛ рд╣реИ рдЬреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдереЛрдбрд╝реА рдЧрд░реНрдореА рдпрд╛ рд╢реАрддрд▓рддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЗрд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рдХреЛрдб рдореЗрдВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд╣рд░

рдЗрд╕реЗ рдЬреЛрдбрд╝реЗрдВ :ColorContentView

extension Color {
    static let offWhite = Color(red: 225 / 255, green: 225 / 255, blue: 235 / 255)
}

рд╣рд╛рдБ, рдпрд╣ рд▓рдЧрднрдЧ рд╕рдлрд╝реЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдлреЗрдж рджрд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред

рдЕрдм рд╣рдо ContentViewрдЗрд╕реЗ рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рд╢рд░реАрд░ рдХреЛ рднрд░ рд╕рдХрддреЗ рд╣реИрдВ ZStack, рдЬреЛ рдкреВрд░реЗ рд╕реНрдХреНрд░реАрди рдХреЛ рдШреЗрд░рддрд╛ рд╣реИ, рдкреВрд░реЗ рд╕реНрдерд╛рди рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдирдП рдЕрд░реНрдз-рд╢реНрд╡реЗрдд рд░рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

struct ContentView: View {
    var body: some View {
        ZStack {
            Color.offWhite
        }
        .edgesIgnoringSafeArea(.all)
    }
}

рдЕрдкрдиреЗ рдирдХреНрд╢реЗ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рд╕реБрдВрджрд░ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП 300x300 рдХреЗ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдореЗрдВ рдПрдХ рдЧреЛрд▓ рдЖрдпрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ ZStackрд░рдВрдЧ рдХреЗ рдиреАрдЪреЗ рдЬреЛрдбрд╝реЗрдВ :

RoundedRectangle(cornerRadius: 25)
    .frame(width: 300, height: 300)

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдХрд╛рд▓рд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдиреНрдпреВрдореЙрд░реНрдлрд┐рдЬрд╝реНрдо рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХреЛ рддреЗрдЬреА рд╕реЗ рдХрдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдЙрд╕реА рд░рдВрдЧ рд╕реЗ рдмрджрд▓ рджреЗрдВрдЧреЗ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдХрд╛рд░ рдХреЛ рдЕрджреГрд╢реНрдп рдмрдирд╛рддреЗ рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдмрджрд▓реЗрдВ:

RoundedRectangle(cornerRadius: 25)
    .fill(Color.offWhite)
    .frame(width: 300, height: 300)

рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ: рд╣рдо рдЫрд╛рдпрд╛, рдПрдХ рдЕрдВрдзреЗрд░реЗ рдФрд░ рдПрдХ рдкреНрд░рдХрд╛рд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╕реНрдХреНрд░реАрди рдХреЗ рдКрдкрд░реА рдмрд╛рдПрдВ рдХреЛрдиреЗ рд╕реЗ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓реА рдЬрд╛рддреА рд╣реИред

рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рд╣рдореЗрдВ рдХрдИ рдмрд╛рд░ рд╕рдВрд╢реЛрдзрдХ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдиреНрдпреВрдореЙрд░реНрдлрд┐рдЬрд╝реНрдо рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдкрдиреА рдЧреЛрд▓рд╛рдХрд╛рд░ рдЖрдпрдд рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рд╕рдВрд╢реЛрдзрдХ рдЬреЛрдбрд╝реЗрдВ:

.shadow(color: Color.black.opacity(0.2), radius: 10, x: 10, y: 10)
.shadow(color: Color.white.opacity(0.7), radius: 10, x: -5, y: -5)

рд╡реЗ рдирд┐рдЪрд▓реЗ рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рдЕрдВрдзреЗрд░реЗ рдЫрд╛рдпрд╛ рдХреА рдСрдлрд╕реЗрдЯ рдФрд░ рдКрдкрд░реА рдмрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рдЫрд╛рдпрд╛ рдХреА рдСрдлрд╕реЗрдЯ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рдХрд╛рд╢ рдЫрд╛рдпрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдПрдХ рдЕрд░реНрдз-рд╢реНрд╡реЗрдд рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдЕрдм рдпрд╣ рдорд╛рдирдЪрд┐рддреНрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред

рд╣рдордиреЗ рдХреЛрдб рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд▓рд┐рдЦреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЧреИрд░-рдорд╛рд░реНрдлрд╝рд┐рдХ рдирдХреНрд╢рд╛ рд╣реИ - рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реЛрдВрдЧреЗ рдХрд┐ SwiftUI рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддрд╛ рд╣реИ!



рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЧреИрд░-рдЖрдХрд╛рд░ рдХрд╛ рдмрдЯрди рдмрдирд╛рдирд╛


UI рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдореЗрдВ рд╕реЗ, neomorphism рдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдХрдо рдЬреЛрдЦрд┐рдо рд░рдЦрддрд╛ рд╣реИ - рдпрджрд┐ рдЖрдкрдХреЗ рдХрд╛рд░реНрдб рдХреЗ рдЕрдВрджрд░ UI рд╕реНрдкрд╖реНрдЯ рд╣реИ, рддреЛ рдХрд╛рд░реНрдб рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдпрд╣ рдкрд╣реБрдВрдЪ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдмрдЯрди рдПрдХ рдФрд░ рдорд╛рдорд▓рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рд╡рд┐рдкрд░реАрдд рдХреЛ рдХрдо рдХрд░рдирд╛ рдЕрдЪреНрдЫреЗ рд╕реЗ рдЕрдзрд┐рдХ рдиреБрдХрд╕рд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЪрд▓реЛ рдЕрдкрдиреА рдЦреБрдж рдХреА рдмрдЯрди рд╢реИрд▓реА рдмрдирд╛рдХрд░ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╣ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдмрдЯрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рдмрдЯрди рдореЗрдВ рдХрдИ рд╕рдВрд╢реЛрдзрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ - рд╣рдо рдмрд╕ рд╢реИрд▓реА рдХреЛ рдПрдХ рдмрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдо рдПрдХ рдмрдЯрди рд╢реИрд▓реА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦрд╛рд▓реА рд╣реЛрдЧреА: рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рд╣рдореЗрдВ рдмрдЯрди рдХреЗ рд▓рд┐рдП рд▓реЗрдмрд▓ рджреЗрдЧрд╛, рдЬреЛ рдкрд╛рда, рдЫрд╡рд┐ рдпрд╛ рдХреБрдЫ рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рдмрд┐рдирд╛ рдмрджрд▓рд╛рд╡ рдХреЗ рд╡рд╛рдкрд╕ рднреЗрдЬ рджреЗрдВрдЧреЗред

рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдХрд╣реАрдВ рдмрд╛рд╣рд░ рдЬреЛрдбрд╝реЗрдВ ContentView:

struct SimpleButtonStyle: ButtonStyle {
    func makeBody(configuration: Self.Configuration) -> some View {
        configuration.label
    }
}

рдпрд╣ configuration.labelрд╡рд╣ рд╣реИ рдЬреЛ рдмрдЯрди рдХреА рд╕рд╛рдордЧреНрд░реА рд░рдЦрддрд╛ рд╣реИ, рдФрд░ рдЬрд▓реНрдж рд╣реА рд╣рдо рдХреБрдЫ рдФрд░ рдЬреЛрдбрд╝реЗрдВрдЧреЗред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдмрдЯрди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдЬреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХреЗрдВ рдХрд┐ рдбрд┐рдЬрд╛рдЗрди рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ:

Button(action: {
    print("Button tapped")
}) {
    Image(systemName: "heart.fill")
        .foregroundColor(.gray)
}
.buttonStyle(SimpleButtonStyle())

рдЖрдкрдХреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдо рдмрдЯрди рд╢реИрд▓реА рдореЗрдВ рд╣рдорд╛рд░реЗ рдЧреИрд░-рд░реВрдкрд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдмрд╛рд░ рд╣рдо рдПрдХ рдЧреЛрд▓ рдЖрдпрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рдзрд╛рд░рдг рдЖрдЗрдХрди рдХреЗ рд▓рд┐рдП рд╕рд░реНрдХрд▓ рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдХреБрдЫ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдмрдЯрди рдХреНрд▓рд┐рдХ рдХреНрд╖реЗрддреНрд░ рдмрдбрд╝рд╛ рдФрд░ рд╕реБрдВрджрд░ рд╣реЛред рдХреБрдЫ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдЬреЛрдбрд╝рдХрд░ рдФрд░ рдлрд┐рд░ рдмрдЯрди рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реЗ рдЧреИрд░-рд░реВрдкрд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рдХреЛ рд░рдЦрдХрд░
рдЕрдкрдиреА рд╡рд┐рдзрд┐ рдмрджрд▓реЗрдВ makeBody():

configuration.label
    .padding(30)
    .background(
        Circle()
            .fill(Color.offWhite)
            .shadow(color: Color.black.opacity(0.2), radius: 10, x: 10, y: 10)
            .shadow(color: Color.white.opacity(0.7), radius: 10, x: -5, y: -5)
    )



рдпрд╣ рд╣рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рднрд╛рд╡ рдХреЗ рдХрд╛рдлреА рдХрд░реАрдм рд▓рд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрднреА рднреА рд╕рд╣реА рдирд╣реАрдВ рд╣реИ - рджрдмрд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдмрдЯрди рдиреЗрддреНрд░рд╣реАрди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рд┐рд░реНрдл рдЕрдЬреАрдм рджрд┐рдЦрддрд╛ рд╣реИред

рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ configuration.isPressedрдЕрдкрдиреА рдХрд╕реНрдЯрдо рдмрдЯрди рд╢реИрд▓реА рдХреЗ рдЕрдВрджрд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ , рдЬреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдмрдЯрди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рджрдмрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╣рдо рдмрдЯрди рдХреЛ рджрдмрд╛рдП рдЬрд╛рдиреЗ рдХреЗ рдХреБрдЫ рджреГрд╢реНрдп рд╕рдВрдХреЗрдд рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╢реИрд▓реА рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ: рд╣рдо GroupрдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд▓рд┐рдП рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ , рдлрд┐рд░ configuration.isPressedрдмрдЯрди рджрдмрд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдпрд╛ рддреЛ рдПрдХ рдлреНрд▓реИрдЯ рд╕рд░реНрдХрд▓ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдФрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдВ, рдпрд╛ рд╣рдорд╛рд░реЗ рд╡рд░реНрддрдорд╛рди рдХрд╛рд▓реЗ рдШреЗрд░реЗ рдХреЛ рдЕрдиреНрдпрдерд╛:

configuration.label
    .padding(30)
    .background(
        Group {
            if configuration.isPressed {
                Circle()
                    .fill(Color.offWhite)
            } else {
                Circle()
                    .fill(Color.offWhite)
                    .shadow(color: Color.black.opacity(0.2), radius: 10, x: 10, y: 10)
                    .shadow(color: Color.white.opacity(0.7), radius: 10, x: -5, y: -5)
            }
        }
    )

рдЪреВрдВрдХрд┐ рд░рд╛рдЬреНрдп рдореЗрдВ isPressedрдЕрд░реНрдз-рд╕рдлреЗрдж рд░рдВрдЧ рдХреЗ рд╕рд╛рде рдЪрдХреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдпрд╣ рдмрдЯрди рджрдмрд╛рдП рдЬрд╛рдиреЗ рдкрд░ рд╣рдорд╛рд░реЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рдЕрджреГрд╢реНрдп рдмрдирд╛ рджреЗрддрд╛ рд╣реИред

рдЪреЗрддрд╛рд╡рдиреА: рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдиреЗ рдЯреИрдк рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рдЧрдгрдирд╛ рдХреА рд╣реИ, рдЙрд╕рдХреЗ рдХрд╛рд░рдг рд╣рдордиреЗ рдЕрдирд╛рдпрд╛рд╕ рд╣реА рд╣рдорд╛рд░реЗ рдмрдЯрди рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИ - рдЕрдм рдЖрдкрдХреЛ рд╕реНрд╡рдпрдВ рдЫрд╡рд┐ рдкрд░ рдЯреИрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рди рдХрд┐ рдЗрд╕рдХреЗ рдЖрд╕-рдкрд╛рд╕ рдХреЗ рдЕрд╕рдорд╛рди рдбрд┐рдЬрд╝рд╛рдЗрди рдкрд░ред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , SwiftUI рдХреЛ рд╕рднреА рдЙрдкрд▓рдмреНрдз рдирд▓ рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреЗ .contentShape(Circle())рддреБрд░рдВрдд рдмрд╛рдж рдПрдХ рд╕рдВрд╢реЛрдзрдХ рдЬреЛрдбрд╝реЗрдВ .padding(30)ред

рдЕрдм рд╣рдо рдЫрд╛рдпрд╛ рдХреЛ рдкреНрд░рд╡рд╛рд╣рд┐рдд рдХрд░рдХреЗ рдХреГрддреНрд░рд┐рдо рд╕рдВрдШрд╛рдд рдХрд╛ рдкреНрд░рднрд╛рд╡ рдкреИрджрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - shadowрдЖрдзрд╛рд░ рдкреНрд░рднрд╛рд╡ рд╕реЗ рджреЛ рд╕рдВрд╢реЛрдзрдХ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдХрд░ , рд╕рдлреЗрдж рдФрд░ рдХрд╛рд▓реЗ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕ рдФрд░ рд╡рд╛рдИ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

if configuration.isPressed {
    Circle()
        .fill(Color.offWhite)
        .shadow(color: Color.black.opacity(0.2), radius: 10, x: -5, y: -5)
        .shadow(color: Color.white.opacity(0.7), radius: 10, x: 10, y: 10)
} else {
    Circle()
        .fill(Color.offWhite)
        .shadow(color: Color.black.opacity(0.2), radius: 10, x: 10, y: 10)
        .shadow(color: Color.white.opacity(0.7), radius: 10, x: -5, y: -5)
}

рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдПрдВред



рдПрдХ рдмрдЯрди рдХреНрд▓рд┐рдХ рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдЫрд╛рдпрд╛ рдмрдирд╛рдПрдБ


рд╣рдорд╛рд░рд╛ рд╡рд░реНрддрдорд╛рди рдХреЛрдб, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЛрдЧ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдкреНрд░рднрд╛рд╡ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ - рдХреБрдЫ рдЗрд╕реЗ рдЕрд╡рддрд▓ рдмрдЯрди рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЕрдиреНрдп рд▓реЛрдЧ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдмрдЯрди рдЕрднреА рднреА рджрдмрд╛рдпрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ, рдмрд╕ рдкреНрд░рдХрд╛рд╢ рдПрдХ рдЕрд▓рдЧ рдХреЛрдг рд╕реЗ рдЖрддрд╛ рд╣реИред

рд╕реБрдзрд╛рд░ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдЫрд╛рдпрд╛ рдмрдирд╛рдирд╛ рд╣реИ рдЬреЛ рдмрдЯрди рдХреЛ рдЕрдВрджрд░ рдХреА рдУрд░ рджрдмрд╛рдиреЗ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдЧрд╛ред рдпрд╣ рдорд╛рдирдХ рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдХрд┐рдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдХрд╛рдлреА рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рдЖрдВрддрд░рд┐рдХ рдЫрд╛рдпрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд░реИрдЦрд┐рдХ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╡реЗ рдХреЗрд╡рд▓ рдХрдИ рдЖрдВрддрд░рд┐рдХ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛрдВрдЧреЗ рдЬреЛ рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдо рддреБрд░рдВрдд LinearGradientрдорд╛рдирдХ рдврд╛рд▓реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╣рд╛рдпрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬреЛрдбрд╝реЗрдВрдЧреЗ :

extension LinearGradient {
    init(_ colors: Color...) {
        self.init(gradient: Gradient(colors: colors), startPoint: .topLeading, endPoint: .bottomTrailing)
    }
}

рдЗрд╕рдХреЗ рд╕рд╛рде, рд╣рдо рдмрд╕ рд╡рд┐рдХрд░реНрдг рджрд┐рд╢рд╛ рдореЗрдВ рдЕрдкрдиреЗ рд░реИрдЦрд┐рдХ рдврд╛рд▓ рдХреЛ рд╡рд╛рдкрд╕ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдВрдЧреЛрдВ рдХреА рдПрдХ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдм рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рд╣рдорд╛рд░реЗ рджрдмрд╛рдП рдЧрдП рд╕рд░реНрдХрд▓ рдореЗрдВ рджреЛ рдлрд╝реНрд▓рд┐рдк рдХрд┐рдП рдЧрдП рдЫрд╛рдпрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдПрдХ рдзреБрдВрдзрд▓рд╛ (рд╕реНрдЯреНрд░реЛрдХ) рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╕рд░реНрдХрд▓ рдУрд╡рд░рд▓реЗ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдорд╛рд╕реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдврд╛рд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╕рд░реНрдХрд▓ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдпрд╣ рдереЛрдбрд╝рд╛ рдкреЗрдЪреАрджрд╛ рдорд╛рдорд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

  • рд╣рдорд╛рд░рд╛ рдЖрдзрд╛рд░ рдЪрдХреНрд░ рдПрдХ рдиреАрдо-рд╢реНрд╡реЗрдд рд░рдВрдЧ рд╕реЗ рднрд░рд╛ рдПрдХ рдиреЛрдореЛрд░реНрдлрд┐рдХ рдкреНрд░рднрд╛рд╡ рд╡рд╛рд▓рд╛ рд╣рдорд╛рд░рд╛ рд╡рд░реНрддрдорд╛рди рдЪрдХреНрд░ рд╣реИред
  • рд╣рдо рдЗрд╕рдХреЗ рдКрдкрд░ рдПрдХ рд╕рд░реНрдХрд▓ рд░рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдПрдХ рдЧреНрд░реЗ рдлреНрд░реЗрдо рджреНрд╡рд╛рд░рд╛ рдлрдВрд╕рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдирд░рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рдзреБрдВрдзрд▓рд╛ рд╣реЛрддрд╛ рд╣реИред
  • рдлрд┐рд░ рд╣рдо рд╢реАрд░реНрд╖ рдкрд░ рд╕реБрдкрд░рд┐рдВрдкрд▓ рдЗрд╕ рд╕рд░реНрдХрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╕рд░реНрдХрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдореБрдЦреМрдЯрд╛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рдмрд╛рд░ рдПрдХ рд░реИрдЦрд┐рдХ рдврд╛рд▓ рд╕реЗ рднрд░рд╛ рд╣реИред

рдЬрдм рдЖрдк рдПрдХ рджреГрд╢реНрдп рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдорд╛рд╕реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ SwiftUI рдорд╛рд╕реНрдХ рдХреЗ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдзрд╛рд░ рджреГрд╢реНрдп рдореЗрдВ рдХреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рд╣рдо рдПрдХ рдзреБрдВрдзрд▓реЗ рдЧреНрд░реЗ рд╕реНрдЯреНрд░реЛрдХ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдХрд╛рд▓реЗ рд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рддрдХ рдПрдХ рд░реИрдЦрд┐рдХ рдврд╛рд▓ рдХреЗ рд╕рд╛рде рдореБрдЦреМрдЯрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдзреБрдВрдзрд▓реА рд╕реНрдЯреНрд░реЛрдХ рдПрдХ рддрд░рдл рдЕрджреГрд╢реНрдп рд╣реЛрдЧреА рдФрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рджреВрд╕рд░реЗ рдкрд░ рдмрдврд╝реЗрдЧреА - рд╣рдореЗрдВ рдПрдХ рдЪрд┐рдХрдиреА рдЖрдВрддрд░рд┐рдХ рдврд╛рд▓ рдорд┐рд▓реЗрдЧреАред рдкреНрд░рднрд╛рд╡ рдХреЛ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдЫрд╛рдпрд╛рдВрдХрд┐рдд рд╣рд▓рдХреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдереЛрдбрд╝рд╛ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЕрдВрдзреЗрд░реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдореЛрдЯреА рд░реЗрдЦрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╣рд▓реНрдХреА рдЫрд╛рдпрд╛ рдЦреАрдВрдЪрдирд╛ рдкреНрд░рднрд╛рд╡ рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рджреЛ рдЫрд╛рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ neomorphism рдореЗрдВ рдЧрд╣рд░рд╛рдИ рдХреА рднрд╛рд╡рдирд╛ рдкреИрджрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдПрдХ рдкреНрд░рдХрд╛рд╢ рдФрд░ рдПрдХ рдЕрдВрдзреЗрд░рд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рдВрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдВрддрд░рд┐рдХ рдЫрд╛рдпрд╛ рдХреЗ рдЗрд╕ рдкреНрд░рднрд╛рд╡ рдХреЛ рджреЛ рдмрд╛рд░ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред

рд╕рд░реНрдХрд▓ configuration.isPressрдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрджрд▓реЗрдВ :

Circle()
    .fill(Color.offWhite)
    .overlay(
        Circle()
            .stroke(Color.gray, lineWidth: 4)
            .blur(radius: 4)
            .offset(x: 2, y: 2)
            .mask(Circle().fill(LinearGradient(Color.black, Color.clear)))
    )
    .overlay(
        Circle()
            .stroke(Color.white, lineWidth: 8)
            .blur(radius: 4)
            .offset(x: -2, y: -2)
            .mask(Circle().fill(LinearGradient(Color.clear, Color.black)))
    )

рдпрджрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдПрдХ рдмрдЯрди рджрдмрд╛рдиреЗ рдХрд╛ рдкреНрд░рднрд╛рд╡ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдФрд░ рдмреЗрд╣рддрд░ рджрд┐рдЦрддрд╛ рд╣реИред



рдЗрд╕ рдкрд░, рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ред рдЖрдиреЗ рд╡рд╛рд▓реЗ рджрд┐рдиреЛрдВ рдореЗрдВ рд╣рдо рдирд┐рд░рдВрддрд░рддрд╛ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЕрдм рд╣рдо рдЖрдкрдХреЛ рдЖрдЧрд╛рдореА рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ ред

All Articles