рдЕрдВрддрд┐рдо рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪрд╛рд░реНрдЯреНрд╕ (рдорд╛рд░реНрдЪ 2019) рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ: рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ



рдореИрдВ рдЗрд╕ рдЕрд╡рд▓реЛрдХрди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ Xcode 11 рдФрд░ MacOS рдХреИрдЯрд╛рд▓рд┐рдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк Live Previews рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЖрдк рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ Mojave ред рдЖрд╡реЗрджрди рдХреЛрдб Github рдкрд░ рд╣реИред

рдЗрд╕ рд╕рд╛рд▓ WWDC 2019 рдореЗрдВ , Apple рдиреЗ SwiftUI рдХреА рдШреЛрд╖рдгрд╛ рдХреА, рдЬреЛ рд╕рднреА Apple рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (UI) рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдирдпрд╛ рдШреЛрд╖рдгрд╛рддреНрдордХ рддрд░реАрдХрд╛ рд╣реИред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп UIKit рд╕реЗ рд▓рдЧрднрдЧ рдкреВрд░реНрдг рдкреНрд░рд╕реНрдерд╛рди UIKit , рдФрд░ рдореИрдВ - рдХрдИ рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рддрд░рд╣ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдирдП рдЙрдкрдХрд░рдг рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рдпрд╣ рд▓реЗрдЦ SwiftUI рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдХреЛрдб UIKit рдХреЗ рднреАрддрд░ рдЕрддреБрд▓рдиреАрдп рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ рдФрд░ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдПрдХ рдкрдардиреАрдп рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ UIKit рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдХрд╛рд░реНрдп Android , iOS рдФрд░ JS рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЬреЛ 10 рдорд╛рд░реНрдЪ рд╕реЗ 24 рдорд╛рд░реНрдЪ 2019 рддрдХ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдореЗрдВ, JSON рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдордп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрд╕рд╛рдзрди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рддреАрд╡реНрд░рддрд╛ рдХреЛ рд░реЗрдЦрд╛рдВрдХрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ iOS рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдкрдХреЛ рд╕рд╛рдЬрд┐рд╢ рд░рдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдмрд╛рд╣рд░реА рд╡рд┐рд╢реЗрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдЦрд░реЛрдВрдЪ рд╕реЗ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдЬрдорд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Swift рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдФрд░ WWDC 2019 рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, SwifUI рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ - Apple рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдПрдХ рдирдпрд╛ framework , рдЬреЛ Swift рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ ( UI ) рдХрд╛ рдШреЛрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдк рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ subviews рдХрд┐ рдЖрдкрдХреЗ View рдореЗрдВ рдХреМрди рд╕реЗ subviews рджрд┐рдЦрд╛рдП рдЧрдП subviews , рдХреМрди рд╕рд╛ рдбреЗрдЯрд╛ рдЗрди subviews рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЙрдирдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рд╕рдВрд╢реЛрдзрдХ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рд╕реНрдерд╛рди рдкрд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╣реА рдЖрдХрд╛рд░ рдФрд░ рд╢реИрд▓реА рдХреЗ рд▓рд┐рдПред SwiftUI рдХрд╛ рдПрдХ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрддреНрд╡ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ UI рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред

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

рдХрд╛рд░реНрдп


Telegram рджреНрд╡рд╛рд░рд╛ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдП рдЧрдП рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрдХреНрд░реАрди рдкрд░ 5 "рд╕реЗрдЯ рдСрдлрд╝ рдЪрд╛рд░реНрдЯреНрд╕" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдЪрд╛рд╣рд┐рдПред рдПрдХ "рдЪрд╛рд░реНрдЯ рдХреЗ рд╕реЗрдЯ" рдХреЗ рд▓рд┐рдП, UI рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:



рдКрдкрд░реА рднрд╛рдЧ рдореЗрдВ рдирд┐рд╢рд╛рди рдФрд░ рдХреНрд╖реИрддрд┐рдЬ рдЧреНрд░рд┐рдб рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рдИ рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреИрдорд╛рдирд╛ "рдЪрд╛рд░реНрдЯ рдЬрд╝реЛрди" рд╣реЛрддрд╛ рд╣реИред рдиреАрдЪреЗ рдХрд┐ рдПрдХреНрд╕ рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рддрд╛рд░реАрдЦреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЗ рд╕рд╛рде рдПрдХ рд░реЗрдВрдЧрдиреЗ рд╡рд╛рд▓реА рд░реЗрдЦрд╛ рд╣реИред

рдЗрд╕рд╕реЗ рднреА рдХрдо рддрдерд╛рдХрдерд┐рдд "рдорд┐рдиреА рдореИрдк" ( Xcode 11 ) рд╣реИ, рдЕрд░реНрдерд╛рдд, рдПрдХ рдкрд╛рд░рджрд░реНрд╢реА "рд╡рд┐рдВрдбреЛ" рдЬреЛ рд╣рдорд╛рд░реЗ "рдЪрд╛рд░реНрдЯ" рдХреА рд╕рдордп рдЕрд╡рдзрд┐ рдХреЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдКрдкрд░реА "рдЪрд╛рд░реНрдЯ рдЬрд╝реЛрди" рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ "рдорд┐рдиреА рдореИрдк" рдХреЛ рди рдХреЗрд╡рд▓ X рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреА рдЪреМрдбрд╝рд╛рдИ рдХреЛ рднреА рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ "рдЪрд╛рд░реНрдЯреНрд╕ рдХреНрд╖реЗрддреНрд░" рдореЗрдВ рд╕рдордп рдХреЗ рдкреИрдорд╛рдиреЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред

"рдЪрд╛рд░реНрдЯ" рдХреЗ рд░рдВрдЧ рдореЗрдВ рдЪрд┐рддреНрд░рд┐рдд checkboxs рдХреА рдорджрдж рд╕реЗ рдФрд░ рдЙрдирдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП, рдЖрдк "рдЪрд╛рд░реНрдЯ рдЬрд╝реЛрди" рдореЗрдВ рдЗрд╕ рд░рдВрдЧ рдХреЗ рдЕрдиреБрд░реВрдк "рдЧреНрд░рд╛рдлрд┐рдХреНрд╕" рдХреЛ рджрд┐рдЦрд╛рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдРрд╕реЗ рдХрдИ "рд░реЗрдЦрд╛рдВрдХрди рдХреЗ рд╕реЗрдЯ" рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ 5 рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдФрд░ рд╡реЗ рд╕рднреА рдПрдХ рд╕реНрдХреНрд░реАрди рдкрд░ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

SwiftUI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП UI SwiftUI Dark рдФрд░ Light рдореЛрдб рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдмрдЯрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА SwiftUI рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, SwiftUI "рд╕реНрдХреНрд░реЙрд▓ рдСрдлрд╝ рд╕реЗрдЯреНрд╕" (рдпрд╛рдиреА, рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рд╕реНрдХреНрд░реАрди рдХреЗ рд╕реЗрдЯ) рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдмрд╕ рдПрдХ рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдЯреЗрдмрд▓ рдХреЗ рдиреАрдЪреЗ, рдФрд░ рд╣рдо рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред

рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рдЖрдЗрдП рдПрдХ " SwiftUI рд╕реЗрдЯ" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП SwiftUI ChartView рдПрдХ ChartView :



SwiftUI рдЖрдкрдХреЛ рдЫреЛрдЯреЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдПрдХ рдЬрдЯрд┐рд▓ UI рдмрдирд╛рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрди рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдПрдХ рдкрд╣реЗрд▓реА рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рд╣рдо рдРрд╕рд╛ рдХрд░реЗрдВрдЧреЗред рд╣рдорд╛рд░рд╛ ChartView рдЗрди рдЫреЛрдЯреЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ ChartView :

  • GraphsForChart - рдпреЗ рд╕реНрд╡рдпрдВ рдЧреНрд░рд╛рдл рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ "рд░реЗрдЦрд╛рдВрдХрди рдХреЗ рд╕реЗрдЯ" рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред "рдЪрд╛рд░реНрдЯ" рдХреЛ "рдорд┐рдиреА рдореИрдк" RangeView рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╕рдордп рд╕реАрдорд╛ рдХреЗ рд▓рд┐рдП рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  • YTickerView рдКрдВрдЪрд╛рдИ рдФрд░ рдЗрд╕реА рдХреНрд╖реИрддрд┐рдЬ рдЧреНрд░рд┐рдб рдХреЗ рд╕рд╛рде Y рдЕрдХреНрд╖ рд╣реИред
  • IndicatorView рдПрдХ рдХреНрд╖реИрддрд┐рдЬ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╕рдВрдХреЗрддрдХ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ X рдЕрдХреНрд╖ рдкрд░ рд╕рдордп рдЕрдХреНрд╖ рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрдХреЗрддрдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП "рдЪрд╛рд░реНрдЯ" рдФрд░ рд╕рдордп рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
  • TickerView - "рд░реЗрдВрдЧрдиреЗ рд╡рд╛рд▓реА рд░реЗрдЦрд╛" рддрд╛рд░реАрдЦ рдХреЗ рд░реВрдк рдореЗрдВ X рдЕрдХреНрд╖ рдкрд░ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рджрд┐рдЦрд╛рддреА рд╣реИ,
  • RangeView - рдПрдХ рдЕрд╕реНрдерд╛рдпреА "рд╡рд┐рдВрдбреЛ", рдЗрд╢рд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреВрд▓рди, "рдЪрд╛рд░реНрдЯ" рдХреЗ рд▓рд┐рдП рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
  • CheckMarksView - "рдЪрд╛рд░реНрдЯ" рдХреЗ рд░рдВрдЧреЛрдВ рдореЗрдВ "рдмрдЯрди" рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ ChartView рдкрд░ " ChartView " рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

ChartView рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддреАрди рддрд░реАрдХреЛрдВ рд╕реЗ ChartView рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

1. DragGesture рдЗрд╢рд╛рд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ "рдорд┐рдиреА рдореИрдк" рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдВ - рдпрд╣ рдЕрд╕реНрдерд╛рдпреА "рд╡рд┐рдВрдбреЛ" рдХреЛ рджрд╛рдПрдВ рдФрд░ рдмрд╛рдПрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдШрдЯрд╛ / рдмрдврд╝рд╛ рд╕рдХрддрд╛ рд╣реИ:



2. рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдкрд░ "рдЪрд╛рд░реНрдЯ" рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рджрд┐рдЦрд╛рддреЗ рд╣реБрдП, рд╕реВрдЪрдХ рдХреЛ рдХреНрд╖реИрддрд┐рдЬ рджрд┐рд╢рд╛ рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдВ:



3. "рдЪрд╛рд░реНрдЯреНрд╕" рд░рдВрдЧреЛрдВ рдореЗрдВ рд░рдВрдЧреАрди рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рдЪрд╛рд░реНрдЯ "рдЫрд┐рдкрд╛рдПрдБ / рджрд┐рдЦрд╛рдПрдВ" рдФрд░ рдЪрд╛рд░реНрдЯ ChartView рдХреЗ рдиреАрдЪреЗ рд╕реНрдерд┐рдд рд╣реИ:



рд╣рдо рд╡рд┐рднрд┐рдиреНрди "рдЪрд╛рд░реНрдЯ рд╕реЗрдЯреНрд╕" (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ 5) рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, List рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдХреЛ рдПрдХ рд╕рд╛рде рдПрдХ рд╕реНрдХреНрд░реАрди рдкрд░ рд░рдЦрдХрд░ (рдЬреИрд╕реЗ рддрд╛рд▓рд┐рдХрд╛ рд╕реНрдХреНрд░реЙрд▓ рдЕрдк рдФрд░ рдбрд╛рдЙрди):



рдпрд╛ ScrollView HStack рдФрд░ 3D рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде HStack рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдЯреИрдХ рдХрд╛ HStack рдХрд░рдирд╛:



... рдпрд╛ "рдХрд╛рд░реНрдб" рдХреЗ ZStack рд░реВрдк рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рдЖрд░реЛрдкрд┐рдд, рдЬрд┐рд╕рдХрд╛ рдХреНрд░рдо рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: "рдЪрд╛рд░реНрдЯ рд╕реЗрдЯ" рдХреЗ рд╕рд╛рде рд╢реАрд░реНрд╖ "рдХрд╛рд░реНрдб" рдХреЛ рдЕрдЧрд▓реЗ рдХрд╛рд░реНрдб рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рджреВрд░ рддрдХ рдЦреАрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдиреАрдЪреЗ рдЦреАрдВрдЪрдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ " " ZStack рдореЗрдВ рдЕрдВрддрд┐рдо рд╕реНрдерд╛рди рдкрд░ ZStack , рдФрд░ рдпрд╣ рдЕрдЧрд▓рд╛" рдХрд╛рд░реНрдб "" рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИ ":



рдЗрди рдЬрдЯрд┐рд▓ UI - рдПрдХ "рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдЯреЗрдмрд▓", рдПрдХ 3D рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде рдПрдХ рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдЯреИрдХ, "рдХрд╛рд░реНрдб" ZStack , рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рдЖрд░реЛрдкрд┐рдд - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рд╕рднреА рд╕рд╛рдзрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ: рд╕рдордп рдХреЗ рд╕рд╛рде рдЪрд▓рддреЗ рд╣реИрдВ рдФрд░ mini - map , рд╕рдВрдХреЗрддрдХ рдФрд░ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рдмрдЯрди рдХреЗ "рдкреИрдорд╛рдиреЗ" рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред "рдЧреНрд░рд╛рдлрд┐рдХреНрд╕"ред

рдЖрдЧреЗ рд╣рдо SwiftUI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ UI рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ - рд╕рд░рд▓ рддрддреНрд╡реЛрдВ рд╕реЗ рдЙрдирдХреА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд░рдЪрдирд╛рдУрдВ рддрдХред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рд╣рдо рдЙрд╕ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИред

рддреЛ, рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрдИ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

  • JSON рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ "рдЖрдВрддрд░рд┐рдХ" рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВ
  • рдПрдХ "рдЪрд╛рд░реНрдЯ рдХреЗ рд╕реЗрдЯ" рдХреЗ рд▓рд┐рдП UI рдмрдирд╛рдПрдВ
  • рд╡рд┐рднрд┐рдиреНрди "рдЪрд╛рд░реНрдЯ рд╕реЗрдЯ" рдорд┐рд▓рд╛рдПрдВ

рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ


рд╣рдорд╛рд░реЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ, рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдиреЗ JSON рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рдХрдИ "рдЪрд╛рд░реНрдЯ рдХреЗ рд╕реЗрдЯ" рдереЗред chart рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЗ " chart рд╕реЗрдЯ" рдореЗрдВ chart рдХрдИ "рдЪрд╛рд░реНрдЯ" (рдпрд╛ "рд▓рд╛рдЗрдиреНрд╕") chart.columns ред chart.columns ред рдкреНрд░рддреНрдпреЗрдХ "рдЧреНрд░рд╛рдл" ("рд▓рд╛рдЗрдиреНрд╕") рдореЗрдВ 0 - "x" , "y0" , "y1" , "y2" , "y3" , рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдПрдХреНрд╕ рдЕрдХреНрд╖ ("x") рдкрд░ рд╕рдордп рдорд╛рди рд╣реЛрддрд╛ рд╣реИред , рдпрд╛ Y рдЕрдХреНрд╖ рдкрд░ "рдЧреНрд░рд╛рдлрд┐рдХреНрд╕" ("рд▓рд╛рдЗрдиреНрд╕") ( "y0" , "y1" , "y2" , "y3" ) рдХреЗ рдорд╛рди:



"рдЪрд╛рд░реНрдЯ рд╕реЗрдЯ" рдореЗрдВ рд╕рднреА "рд▓рд╛рдЗрдиреНрд╕" рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред "рдХреЙрд▓рдо" x рдХреЗ рдорд╛рди рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ UNIX рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рд╣реИрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, chart рдкреНрд░рддреНрдпреЗрдХ рдЕрд▓рдЧ-рдЕрд▓рдЧ " chart рд╕реЗрдЯ" рдХреЛ 6 рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдЕрдВрдХреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "#AAAAAA") рдФрд░ chart.names рдХреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ chart рд░рдВрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ chart.names ред

JSON рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЙрддреНрдХреГрд╖реНрдЯ рдХреНрд╡рд┐рдХ рдЯрд╛рдЗрдк рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЗрд╕ рд╕рд╛рдЗрдЯ рдкрд░, рдЖрдк JSON рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрд╛рда рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ ( Swift ), рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдирд╛рдо ( Chart ) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЗрд╕ JSON рдбреЗрдЯрд╛ рдХреЗ "рдкрд╛рд░реНрд╕рд┐рдВрдЧ" рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдмрдирддрд╛ рд╣реИред

рд╕реНрдХреНрд░реАрди рдХреЗ рдордзреНрдп рднрд╛рдЧ рдореЗрдВ рдПрдХ рдХреЛрдб рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдлрд╛рдЗрд▓ рдореЗрдВ Chart.swift рдирд╛рдо рд╕реЗ Chart.swift ред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рд╣рдо JSON рдлреЙрд░реНрдореЗрдЯ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рд░рдЦреЗрдВрдЧреЗред JSON рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ SwiftUI Generic рдбреЗрдореЛ рд╕реЗ рдЙрдзрд╛рд░ рд▓рд┐рдП рдЧрдП рдореЙрдбрд▓ рдкрд░, рдореБрдЭреЗ columns: [ChartElement] рдХреА рдПрдХ рд╕рд░рдгреА рдорд┐рд▓реА columns: [ChartElement] , рдЬреЛ Telegram рдкреНрд░рд╛рд░реВрдк рдореЗрдВ " columns: [ChartElement] рд╕реЗрдЯ" рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред

ChartElement рдбреЗрдЯрд╛ ChartElement , рд╡рд┐рд╖рдо рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рдЪрд╛рд░реНрдЯ рдХреЗ рд╕рд╛рде рдЧрд╣рди рдЗрдВрдЯрд░реЗрдХреНрдЯрд┐рд╡ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЛ UNIX рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдорд┐рд▓реАрд╕реЗрдХрдВрдб (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 1542412800000, 1542499200000, 1542585600000, 1542672000000 ) рдФрд░ 6 рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рд░рдВрдЧреЛрдВ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдВрдХ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "#AAAAAA" )ред

рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рдЕрдВрджрд░ рд╣рдо рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ "рдЖрдВрддрд░рд┐рдХ" рдФрд░ рдХрд╛рдлреА рд╕рд░рд▓ рдкреНрд░рд╛рд░реВрдк [LinesSet] ред [LinesSet] рд╕рд░рдгреА LinesSet " LinesSet рд╕реЗрдЯреНрд╕" рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ "Feb 12, 2019" ( X рдЕрдХреНрд╖) рдФрд░ рдХрдИ "рдЪрд╛рд░реНрдЯреНрд╕" lines ( Y рдЕрдХреНрд╖) рдХреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ xTime рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:



рдкреНрд░рддреНрдпреЗрдХ рд▓рд╛рдЗрди рдЪрд╛рд░реНрдЯ (рд▓рд╛рдЗрди) рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

  • рдкреВрд░реНрдгрд╛рдВрдХ points: [Int] рдХреА рдПрдХ рд╕рд░рдгреА points: [Int] ,
  • рдирд╛рдорд┐рдд "рдЧреНрд░рд╛рдлрд┐рдХреНрд╕" title: String ,
  • "рдЧреНрд░рд╛рдлрд┐рдХреНрд╕" type: String? ред
  • color : UIColor Swift рдореЗрдВ color : UIColor - UIColor рдкреНрд░рд╛рд░реВрдк,
  • рдЕрдВрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ countY: Int ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рд╕реА рднреА "рдЧреНрд░рд╛рдл" рдХреЛ рдЫрд┐рдкрд╛рдпрд╛ рдпрд╛ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ isHidden: Bool ред рд╕рдордп рд╕реАрдорд╛ upperBound рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ upperBound lowerBound рдФрд░ upperBound 0 рд╕реЗ 1 рддрдХ рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рди рдХреЗрд╡рд▓ "рдорд┐рдиреА рдореИрдк" рдЯрд╛рдЗрдо рд╡рд┐рдВрдбреЛ ( upperBound - lowerBound ) рдХрд╛ рдЖрдХрд╛рд░ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╕рдордп рдЕрдХреНрд╖ X рдкрд░ рдЗрд╕рдХрд╛ рд╕реНрдерд╛рди рднреА lowerBound :



JSON рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ [ChartElement] рдФрд░ "рдЖрдВрддрд░рд┐рдХ" LinesSet рдФрд░ Line LinesSet рдХреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдБ рдЪрд╛рд░реНрдЯ.рд▓рд┐рдлреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИрдВред JSON рдбреЗрдЯрд╛ рд▓реЛрдб JSON рдФрд░ рдЗрд╕реЗ рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб Data.swift рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдБ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ chartsData рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ "рдЪрд╛рд░реНрдЯ рд╕реЗрдЯ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖред



рдпрд╣ рд╣рдорд╛рд░рд╛ рдбреЗрдЯрд╛ , рд▓реЗрдХрд┐рди SwiftUI рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреЛ chartsData рд╕рд░рдгреА (рдЕрд╕реНрдерд╛рдпреА "рд╡рд┐рдВрдбреЛ" рдХреЛ рдмрджрд▓рдирд╛, "рдЪрд╛рд░реНрдЯреНрд╕" рдХреЛ рдЫрд┐рдкрд╛рдирд╛ / рджрд┐рдЦрд╛рдирд╛) рд╣рдорд╛рд░реЗ Views рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдХрд░рддрд╛ рд╣реИред

рд╣рдо @EnvironmentObject ред рдпрд╣ рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬрд╣рд╛рдБ рднреА рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреЗрдЯрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ Views рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред рдпрд╣ рдХреБрдЫ Singleton рдпрд╛ рдЧреНрд▓реЛрдмрд▓ рдбреЗрдЯрд╛ рдЬреИрд╕рд╛ рд╣реИред

@EnvironmentObject рдХреЛ рд╣рдореЗрдВ рдХреБрдЫ final class UserData рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ UserData.swift рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, chartsData рдбреЗрдЯрд╛ chartsData рдХрд░рддрд╛ рд╣реИ рдФрд░ ObservableObject рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:



@Published "рд░реИрдкрд░" рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдЖрдкрдХреЛ "рд╕рдорд╛рдЪрд╛рд░" рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧреА рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдбреЗрдЯрд╛ рд╡рд░реНрдЧ рдХреЗ charts рдХреЗ рдпреЗ рдЧреБрдг рдмрджрд▓ рдЧрдП рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдХрд┐ SwiftUI рдореЗрдВ рдХрд┐рд╕реА рднреА Views "рдЗрд╕ рд╕рдорд╛рдЪрд╛рд░ рдХреЛ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд┐рдпрд╛ рдЧрдпрд╛" рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирдП рдбреЗрдЯрд╛ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХреЗрдЧрд╛ред

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ charts рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдХрд┐рд╕реА рднреА " isHidden " рдХреЗ рд▓рд┐рдП isHidden рдорд╛рди рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ (рд╡реЗ рдЖрдкрдХреЛ рдЗрди "рдЪрд╛рд░реНрдЯ" рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдпрд╛ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЗ "рдЪрд╛рд░реНрдЯ рдХреЗ рд╕реЗрдЯ" рдХреЗ рд▓рд┐рдП рдирд┐рдЪрд▓реЗ рдирд┐рдЪрд▓реЗ рдФрд░ рдКрдкрд░реА рдКрдкрд░реА upperBound рд╕рдордп рд╕реАрдорд╛ рднреА upperBound рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдо рдЕрдкрдиреЗ рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ UI @EnvironmentObject рд╡рд░реНрдЧ рдХреА charts рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ @EnvironmentObject рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ UI рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдбреЗрдЯрд╛ UserData () рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдмрд╛рдж рдореЗрдВ рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХрд╣реАрдВ рднреА рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХреЗрдВред рд╣рдо scene (_ : , willConnectTo: , options: ) рдЕрдВрджрд░ SceneDelegate.swift рдлрд╛рдЗрд▓ рдореЗрдВ рдпрд╣ рдХрд░реЗрдВрдЧреЗ scene (_ : , willConnectTo: , options: ) рд╡рд┐рдзрд┐ред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рд╣рдорд╛рд░рд╛ ContentView рдмрдирд╛рдпрд╛ рдФрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рд╣рдо @EnvironmentObject ContentView рдХрд┐рд╕реА рднреА @EnvironmentObject рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ SwiftUI рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп View рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдХрд░рд╛ рд╕рдХреЗ View



рдЕрдм, рдХрд┐рд╕реА рднреА View UserData рд╡рд░реНрдЧ рдХреЗ @Published рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ @EnvironmentObject рдЖрд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд░ рдЪрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, RangeView рдореЗрдВ рд╕рдордп рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╕рдордп RangeView рд╣рдо UserData TYPE рдХреЗ рд╕рд╛рде var userData рдЪрд░ рдмрдирд╛рддреЗ рд╣реИрдВ:



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

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ ( UI ) рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

рдПрдХ "рдЧреНрд░рд╛рдл рдХреЗ рд╕реЗрдЯ" рдХреЗ рд▓рд┐рдП рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ (рдпреВрдЖрдИ)


SwiftUI рдХрдИ рдЫреЛрдЯреЗ Views рд╕реЗ SwiftUI рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдордЧреНрд░ рддрдХрдиреАрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдЗрд╕ рддрдХрдиреАрдХ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЫреЛрдЯреЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддрд╛ рд╣реИ: "рдЪрд╛рд░реНрдЯ ChartView рдЪрд╛рд░реНрдЯ", " GraphsForChart рдЪрд╛рд░реНрдЯ", Y YTickerView - YTickerView , "рдЪрд╛рд░реНрдЯреНрд╕" IndicatorView TickerView , " TickerView " TickerView рдХрд╛ X - X рдПрдХреНрд╕рд┐рд╕ рдкрд░ рдЯрд╛рдЗрдо TickerView рд╕рд╛рде рдпреВрдЬрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдЗрдВрдбрд┐рдХреЗрдЯрд░ рд╡реИрд▓реНрдпреВ, TickerView рдирд┐рдпрдВрддреНрд░рд┐рдд "рдЯрд╛рдЗрдо рд╡рд┐рдВрдбреЛ" RangeView , "рдЪрд╛рд░реНрдЯреНрд╕" CheckMarksView рдХреЛ рдЫреБрдкрд╛рдиреЗ / рджрд┐рдЦрд╛рдиреЗ рдХреЗ рдирд┐рд╢рд╛рдиред рд╣рдо рди рдХреЗрд╡рд▓ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдЗрди рд╕рднреА Views рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЯреЗрд╕реНрдЯ рдбреЗрдЯрд╛ рдкрд░ Previews (рдкреНрд░рд╛рд░рдВрднрд┐рдХ "рд▓рд╛рдЗрд╡" рд╡рд┐рдЪрд╛рд░реЛрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреБрд░рдВрдд Xcode 11 рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛрдВрдЧреЗ рдХрд┐ рдХреЛрдб рдЙрдиреНрд╣реЗрдВ рдЕрдиреНрдп рдореВрд▓ Views рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдирд╛ рд╕рд░рд▓ рд╣реИред

GraphView - "рдЧреНрд░рд╛рдлрд╝" ("рд▓рд╛рдЗрди")


рдкрд╣рд▓рд╛ View , рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдЧреНрд░рд╛рдлрд╝" рд╣реА (рдпрд╛ "рд▓рд╛рдЗрди") рд╣реИред рд╣рдо рдЗрд╕реЗ GraphView рдХрд╣реЗрдВрдЧреЗ:



рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, GraphView рдмрдирд╛рдирд╛, рдореЗрдиреВ File тЖТ New тЖТ File рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Xcode 11 рдореЗрдВ рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ:



рддрдм рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ - рдпрд╣ SwiftUI рдлрд╝рд╛рдЗрд▓ рд╣реИ:



... рд╣рдорд╛рд░реЗ View рдХреЛ "рдЧреНрд░рд╛рдл View " рдирд╛рдо рджреЗрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕реНрдерд╛рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ:



"Create" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рд╕реНрдХреНрд░реАрди рдХреЗ рдордзреНрдп рдореЗрдВ Text ( "Hello World!") рд╕рд╛рде рдПрдХ рдорд╛рдирдХ View рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ Text ( "Hello World!") :



рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп "рдЧреНрд░рд╛рдл" рдХреЗ рд╕рд╛рде Text ("Hello World!") рдХреЛ рдмрджрд▓рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ "рдЧреНрд░рд╛рдл" рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдХреНрдпрд╛ рд╣реИ:

  • рд╣рдорд╛рд░реЗ рдкрд╛рд╕ line.points "рдЧреНрд░рд╛рдлрд╝рд┐рдХреНрд╕" line: Line рдХреЗ рдорд╛рди рд╣реИрдВ line: Line ,
  • рд╕рдордп рд╕реАрдорд╛ rangeTime , рдЬреЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рдУрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ рдПрдХреНрд╕-рдПрдХреНрд╕рд┐рд╕ рдкрд░ рд╕рдордп рд╕реНрдЯреИрдореНрдк рдПрдХреНрд╕ рдЯрд╛рдЗрдо рдХреА Range ,
  • рдорд╛рдиреЛрдВ рдХреА rangeY: Range Y rangeY: Range рд▓рд┐рдП rangeY: Range "рдЧреНрд░рд╛рдлрд╝рд┐рдХреНрд╕",
  • "рдЧреНрд░рд╛рдлрд┐рдХреНрд╕" рд╕реНрдЯреНрд░реЛрдХ рд▓рд╛рдЗрди рд▓рд╛рдЗрди рдХреА lineWidth ред

рдЗрди рдЧреБрдгреЛрдВ рдХреЛ GraphView рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:



рдпрджрд┐ рд╣рдо рдЕрдкрдиреЗ "рдЧреНрд░рд╛рдлрд┐рдХреНрд╕" Previews (рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди) рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдХреЗрд╡рд▓ MacOS Catalyna рд▓рд┐рдП рд╕рдВрднрд╡ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд rangeTime рдФрд░ "рдЧреНрд░рд╛рдлрд┐рдХреНрд╕" рдХреЗ line рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ MacOS Catalyna рдЖрд░рдВрдн рдХрд░рдирд╛ рд╣реЛрдЧрд╛:



рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА chartsData рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ chart.json рд╕реЗ рдорд┐рд▓рд╛ рд╣реИред JSON рдлрд╝рд╛рдЗрд▓, рдФрд░ рд╣рдордиреЗ рдЗрд╕реЗ chart.json рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдкрд╣рд▓рд╛ " chartsData[0] рд╕реЗрдЯ" chartsData[0] рдФрд░ рдЗрд╕ chartsData[0].lines[0] рдореЗрдВ рдкрд╣рд▓рд╛ "рдЪрд╛рд░реНрдЯ" chartsData[0].lines[0] , рдЬрд┐рд╕реЗ рд╣рдо line рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ chartsData[0].lines[0] рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗред

рд╣рдо рд╕рдордп рдЕрдВрддрд░рд╛рд▓ rangeTime рд░реВрдк рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреА рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ 0..<(chartsData[0].xTime.count - 1) ред
rangeY рдФрд░ lineWidth рдХреЛ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рд╣реИрдВ: rangeY nil , рдФрд░ lineWidth 1 ред

рд╣рдордиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ rangeY Optional рд╕рдВрдкрддреНрддрд┐ TYPE рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ rangeY рдмрд╛рд╣рд░реА рдФрд░ rangeY = nil рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо maxY рд╕реЗ рд╕реАрдзреЗ "рдЧреНрд░рд╛рдлрд┐рдХреНрд╕" рдХреЗ рдиреНрдпреВрдирддрдо рдиреНрдпреВрдирддрдо рдФрд░ рдЕрдзрд┐рдХрддрдо рдЕрдзрд┐рдХрддрдо рдорд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдбреЗрдЯрд╛:



рдпрд╣ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рд╕реНрдХреНрд░реАрди рдкрд░ рдкрд╛рда рдХреЗ рд╕рд╛рде рдПрдХ рдорд╛рдирдХ View Text ("Hello World!") рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рдореЗрдВ:



рдХреНрдпреЛрдВрдХрд┐ body рд╣рдореЗрдВ рдкрд╛рда Text ("Hello World!") Path рд╕рд╛рде рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рд╣рдорд╛рд░реЗ "рдЧреНрд░рд╛рдлрд╝: рдкреЙрдЗрдВрдЯреНрд╕: line.points " рдХреЛ addLines(_:) рдХрдорд╛рдВрдб (рд▓рдЧрднрдЧ Core Graphics рддрд░рд╣) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ addLines(_:)




рд╣рдо stroke (...) рд╣рдорд╛рд░реЗ Path рд░реЗрдЦрд╛ рдХреЗ Path lineWidth рдЬрд┐рд╕рдХреА рдореЛрдЯрд╛рдИ lineWidth , рдФрд░ рд╕реНрдЯреНрд░реЛрдХ рд▓рд╛рдЗрди рдХрд╛ рд░рдВрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░рдВрдЧ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛ (рдЕрд░реНрдерд╛рдд, рдХрд╛рд▓рд╛):



рд╣рдо рдЕрдкрдиреЗ рд╡рд┐рд╢реЗрд╖ "рд▓рд╛рдЗрди" line.color "рд░рдВрдЧ" рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд░рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реЛрдХ рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдХрд╛рд▓реЗ рд░рдВрдЧ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:



рд╣рдорд╛рд░реЗ "рдЧреНрд░рд╛рдлрд╝" рдХреЛ рдХрд┐рд╕реА рднреА рдЖрдХрд╛рд░ рдХреЗ рдЖрдпрддреЛрдВ рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо GeometryReader рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред Apple рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ Apple GeometryReader рдПрдХ "рдХрдВрдЯреЗрдирд░" View рдЬреЛ рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ size рдФрд░ рд╕рдордиреНрд╡рд┐рдд рд╕реНрдерд╛рди рдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, GeometryReader рдПрдХ рдФрд░ View ! рдХреНрдпреЛрдВрдХрд┐ SwiftUI рдореЗрдВ рд▓рдЧрднрдЧ рд╣рд░ рдЬрдЧрд╣ View ! GeometryReader рдЖрдкрдХреЛ рдЕрдиреНрдп Views рд╡рд┐рдкрд░реАрдд Views рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо View рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рддреЗ рд╕рдордп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдо рдХрд┐рд╕реА рднреА рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП GraphView рдЕрдиреБрдХреВрд▓рдиреАрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП GeometryReader рдФрд░ Path рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЕрдЧрд░ рд╣рдо рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦреЗрдВ, рддреЛ рд╣рдо GeometryReader geometry рдирд╛рдордХ GeometryReader рдЪрд░ рдХреЗ рд▓рд┐рдП рдмрдВрдж рджреЗрдЦреЗрдВрдЧреЗред



рдЗрд╕ рдЪрд░ рдореЗрдВ GeometryProxy рдЯреНрд░реЗрдкреА рд╣реИ, рдЬреЛ рдХрдИ "рдЖрд╢реНрдЪрд░реНрдп" рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ:

 public var size: CGSize { get } public var safeAreaInsets: EdgeInsets { get } public func frame(in coordinateSpace: CoordinateSpace) -> CGRect public subscript<T>(anchor: Anchor<T>) -> T where T : Equatable { get } 

GeometryProxy рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рджреЛ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдЪрд░ var safeAreaInsets var size рдФрд░ var safeAreaInsets , рдПрдХ рдлрд╝рдВрдХреНрд╢рди frame( in:) рдФрд░ рдПрдХ subscript getter var safeAreaInsets ред рд╣рдореЗрдВ рдХреЗрд╡рд▓ "рдЧреНрд░рд╛рдлрд╝рд┐рдХреНрд╕" рдбреНрд░рд╛рдЗрдВрдЧ рдХреНрд╖реЗрддреНрд░ рдХреА geometry.size.height . size . geometry.size.width рдФрд░ geometry.size.width рдХреА рдКрдБрдЪрд╛рдИ рдХрд╛ size рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП size рдЪрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЕрдкрдиреЗ "рдЧреНрд░рд╛рдл" рдХреЛ animation (.linear(duration: 0.6)) рд╕рдВрд╢реЛрдзрдХ animation (.linear(duration: 0.6)) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЪреЗрддрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВред



GraphView_Previews рд╣рдореЗрдВ рдХрд┐рд╕реА рднреА "рд╕реЗрдЯ" рд╕реЗ рдХрд┐рд╕реА рднреА "рдЪрд╛рд░реНрдЯ" рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдиреАрдЪреЗ "рдЪрд╛рд░реНрдЯ рд╕реЗрдЯ" рд╕реЗ "рдЪрд╛рд░реНрдЯ" рдХреЛ рд╕реВрдЪрдХрд╛рдВрдХ 4: chartsData[4] рдФрд░ рдЗрдВрдбреЗрдХреНрд╕ 0 "рдЧреНрд░рд╛рдлрд┐рдХреНрд╕" рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕реЗрдЯ рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: chartsData[4].lines[0] :



рд╣рдо frame (height: 400) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ "рдЧреНрд░рд╛рдлрд┐рдХреНрд╕" рдХреА height 400 рддрдХ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЪреМрдбрд╝рд╛рдИ рд╕реНрдХреНрд░реАрди рдХреА рдЪреМрдбрд╝рд╛рдИ рдХреЗ рд╕рдорд╛рди рд░рд╣рддреА рд╣реИред рдпрджрд┐ рд╣рдордиреЗ frame (height: 400) рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛, рддреЛ "рдЧреНрд░рд╛рдл" рдкреВрд░реА рд╕реНрдХреНрд░реАрди рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрдЧрд╛редрд╣рдордиреЗ рдорд╛рдиреЛрдВ рдХреА рдПрдХ рд╕реАрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХреА rangeYрдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХрд╛ GraphViewрдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ nil, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ "рдЪрд╛рд░реНрдЯ" рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдЕрдкрдирд╛ рдиреНрдпреВрдирддрдо рдФрд░ рдЕрдзрд┐рдХрддрдо рдорд╛рди рд▓реЗрддрд╛ рд╣реИ rangeTime:



рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдордиреЗ рдЕрдкрдиреЗ PathрдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд╢реЛрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ animation (.linear(duration: 0.6)), рдХреЛрдИ рдПрдиреАрдореЗрд╢рди рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм rangeYрдореВрд▓реНрдп рд╕реАрдорд╛ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ " рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ред " рдПрдХ "рдЪрд╛рд░реНрдЯ" рдПрдХ рд╕реАрдорд╛ рдХреЗ рдПрдХ рдореВрд▓реНрдп rangeYрд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдПрдиреАрдореЗрд╢рди рдХреЗ рдмрд╕ "рдХреВрдж" рд╣реЛрдЧрд╛ ред

рдХрд╛рд░рдг рд╕рд░рд▓ рд╣реИ: рд╣рдордиреЗ рд╕рд┐рдЦрд╛рдпрд╛ рд╣реИ SwiftUIрдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢реНрд░реЗрдгреА рдХреЗ рд▓рд┐рдП "рдЧреНрд░рд╛рдлрд╝" рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП rangeY, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдпрд╣ рдирд╣реАрдВ рд╕рд┐рдЦрд╛рдпрд╛ SwiftUIрдХрд┐ "рдЧреНрд░рд╛рдл" рдХреЛ рдХрдИ рдмрд╛рд░ rangeYрд╢реБрд░реВ рдФрд░ рдЕрдВрдд рдХреЗ рдмреАрдЪ рдХреА рд╕реАрдорд╛ рдХреЗ рдордзреНрдпрд╡рд░реНрддреА рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдПSwiftUIрдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдорд┐рд▓рддрд╛ рд╣реИ Animatableред

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрджрд┐ рдЖрдкрдХрд╛ View"рдЖрдВрдХрдбрд╝рд╛" рд╣реИ, рдЕрд░реНрдерд╛рдд View, рдпрд╣ рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ Shape, рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд╣рд▓реЗ рд╣реА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ Animatableред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╕рдВрдЧрдгрд┐рдд рд╕рдВрдкрддреНрддрд┐ animatableDataрд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдПрдиреАрдореЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ EmptyAnimatableData, рдЕрд░реНрдерд╛рдд рдХреЛрдИ рдПрдиреАрдореЗрд╢рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдПрдиреАрдореЗрд╢рди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ "рдЧреНрд░рд╛рдлрд╝" рдХреЛ рдЪрд╛рд▓реВ GraphViewрдХрд░рдирд╛ рд╣реЛрдЧрд╛ Shapeред рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ func path (in rect:CGRect) -> PathрдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рдХреА рдорджрдж рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╣рдо animatableDataрдХрд┐рд╕ рдбреЗрдЯрд╛ рдХреЛ рдЪреЗрддрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:



рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрдиреАрдореЗрд╢рди рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рд╡рд┐рд╖рдп рдПрдХ рдЙрдиреНрдирдд рд╡рд┐рд╖рдп рд╣реИSwiftUIрдФрд░ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд▓реЗрдЦ "рдЙрдиреНрдирдд рд╕реНрд╡рд┐рдлреНрдЯреБрдИ рдПрдирд┐рдореЗрд╢рди - рднрд╛рдЧ 1: рдкрде" рдореЗрдВ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред рд╣рдо рдПрдиреАрдореЗрд╢рди рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рд░рд▓ "рдЧреНрд░рд╛рдлрд┐рдХреНрд╕

" GraphрдореЗрдВ рдкрд░рд┐рдгрд╛рдореА "рдЖрдХреГрддрд┐" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ GraphViewNew:



рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ GeometryReaderрдЕрдкрдиреЗ рдирдП "рдЧреНрд░рд╛рдлрд┐рдХреНрд╕" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА GraphViewNew, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж Shapeрд╣рдорд╛рд░рд╛ "рдЖрдВрдХрдбрд╝рд╛" Graphрдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдХрд┐рд╕реА рднреА рдЖрдХрд╛рд░ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ Viewред

рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, Previewsрд╣рдореЗрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрд╕реА рддрд░рд╣ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рд╛ рдЬреИрд╕реЗ GraphView:



рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдпреЛрдЬрдиреЛрдВ рдореЗрдВ, рд╣рдо GraphViewNewрдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реА "рдЧреНрд░рд╛рдлрд┐рдХреНрд╕" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ ред

GraphsForChart - "рд░реЗрдЦрд╛рдВрдХрди" ("рд▓рд╛рдЗрдиреНрд╕") рдХрд╛ рд╕реЗрдЯ


рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдп рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рд╕реАрдорд╛ рдореЗрдВ View"рдЪрд╛рд░реНрдЯ рдХреЗ рд╕реЗрдЯ" рд╕реЗ рд╕рднреА "рдЪрд╛рд░реНрдЯ" ("рд▓рд╛рдЗрдиреНрд╕") рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИ , рдФрд░ "рд▓рд╛рдЗрдиреНрд╕" рдХреА рдЪреМрдбрд╝рд╛рдИ рдмрд░рд╛рдмрд░ рд╣реИ : рдЬреИрд╕рд╛ рдХрд┐ рдФрд░ , рд╣рдо рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред "рдЪрд╛рд░реНрдЯ рд╕реЗрдЯ":chartrangeTimeYlineWidth



GraphViewGraphViewNewGraphsForChartGraphsForChart.swift

  • "рдЪрд╛рд░реНрдЯреНрд╕ рдХрд╛ рд╕реЗрдЯ" chart: LineSet(рдореВрд▓реНрдпреЛрдВ рдкрд░ Y),
  • "рдЪрд╛рд░реНрдЯ" рдХреЗ рд╕рдордп рдЯрд┐рдХрдЯреЛрдВ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреА рд╕реАрдорд╛ rangeTime: Range( X)
  • рдЧреНрд░рд╛рдл рд▓рд╛рдЗрди рд╕реНрдЯреНрд░реЛрдХ рдореЛрдЯрд╛рдИ lineWidth

rangeY: Range"рдЪрд╛рд░реНрдЯ рд╕реЗрдЯ" ( Y) рдХреЗ рдорд╛рдиреЛрдВ рдХреА рд╕реАрдорд╛ рдХреЛ isHidden = falseрдЗрд╕ "рд╕реЗрдЯ" рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЧрдП рд╡реНрдпрдХреНрддрд┐ рдХреА рд╕реАрдорд╛рдУрдВ рдХреА рд╕рдВрдШ рдХреЗ рд░реВрдк рдореЗрдВ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдЗрд╕ "рд╕реЗрдЯ" рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:



рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ rangeOfRanges: рд╣рдо рдирд┐рд░реНрдорд╛рдг рдореЗрдВ



рдЫрд┐рдкреЗ рд╣реБрдП "рдЪрд╛рд░реНрдЯреНрд╕" ( isHidden = false) рдХреЛ рдирд╣реАрдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ ред рдкреНрд░рддреНрдпреЗрдХ "рдЧреНрд░рд╛рдлрд╝" рдХреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рдФрд░ рд╕реНрдХреНрд░реАрди рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ "рдЪрд╛рд▓" рд╕рдВрд╢реЛрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП : рдЗрд╕ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, "рдЧреНрд░рд╛рдлрд┐рдХреНрд╕" рдХреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдЫрд┐рдкрд╛рдиреЗ рдФрд░ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдиреАрдореЗрд╢рди рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░реАрди рдкрд░ рдЬрдЧрд╣ рд▓реЗрдЧреА рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджреЗрдЧреА рдХрд┐ рдкреИрдорд╛рдиреЗ рдХреНрдпреЛрдВ рдмрджрд▓ рдЧрдП рд╣реИрдВ ред рдЙрдкрдпреЛрдЧ рдХрд╛ рдЕрд░реНрде рд╣реИ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ZStackForEachtransition(.move(edge: .top))



ChartView Y

drawingGroup()MetalрдЧреНрд░рд╛рдлрд┐рдХ рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдПред рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдФрд░ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдкрд░, рдЖрдк рдХреЗ рд╕рд╛рде рдбреНрд░рд╛рдЗрдВрдЧ рдХреА рдЧрддрд┐ рдореЗрдВ рдЕрдВрддрд░ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ MetalрдФрд░ Metal, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдХрд┐рд╕реА рднреА рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рднрд╛рд░реА рд░реЗрдЦрд╛рдВрдХрди рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ iPhone, рддреЛ рдЖрдк рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░реЗрдВрдЧреЗред рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдкрд░рд┐рдЪрдп рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП drawingGroup(), рдЖрдк рд▓реЗрдЦ "рдЙрдиреНрдирдд рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдПрдирд┐рдореЗрд╢рди - рднрд╛рдЧ 1: рдкрде" рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд╡реАрдбрд┐рдпреЛ рд╕рддреНрд░ 237 рдбрдмреНрд▓реНрдпреВрдбрдмреНрд▓реНрдпреВрдбреАрд╕реА 2019 ( рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдХрд╕реНрдЯрдо рджреГрд╢реНрдп ) рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХреЗ рд╕рд╛рде GraphViewNewрдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ GraphsForChart, Previewsрд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рднреА "рд╕реЗрдЯ рдСрдлрд╝ рдЪрд╛рд░реНрдЯреНрд╕" рдХреЛ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕реЗрдЯ рдХрд░реЗрдВ 0:



IndicatorView - рдХреНрд╖реИрддрд┐рдЬ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╕рдВрдХреЗрддрдХ "рдЧреНрд░рд╛рдлрд┐рдХреНрд╕"ред


рдпрд╣ рд╕рдВрдХреЗрддрдХ рдЖрдкрдХреЛ "рдЪрд╛рд░реНрдЯ" рдХреЗ рд╕рдЯреАрдХ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╕рдордп рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рд╕рдордп рдкрд░ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ X:



рд╕реВрдЪрдХ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ "рдЪрд╛рд░реНрдЯ рдХреЗ рд╕реЗрдЯ" рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ chartрдФрд░ рдЗрд╕рдореЗрдВ X"рдЪрд╛рд░реНрдЯ" рдорд╛рди рдХреЗ рд╕реНрдерд╛рди рдкрд░ "рд╕рд░реНрдХрд▓" рдХреЗ рд░реВрдк рдореЗрдВ MARK рдХреЗ рд╕рд╛рде рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдПрдХ рдЪрд▓рддреА рд╣реИ ред рдЗрд╕ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд░реЗрдЦрд╛ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ "POSTER" рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ "рдЪрд╛рд░реНрдЯ" рдФрд░ рд╕рдордп рдХреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред



рд╕реВрдЪрдХ рдПрдХ рдЗрд╢рд╛рд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЧреНрд▓рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ DragGesture:



рд╣рдо рддрдерд╛рдХрдерд┐рдд "рд╡реГрджреНрдзрд┐рд╢реАрд▓" рдЗрд╢рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рд╕реЗ рдирд┐рд░рдВрддрд░ рджреВрд░реА рдХреЗ рдмрдЬрд╛рдп value.translation.width, рд╣рдо onChangedрд▓рдЧрд╛рддрд╛рд░ рдЙрд╕ рд╕реНрдерд╛рди рд╕реЗ рджреВрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ рдЬрд╣рд╛рдВ рд╣рдо рдкрд┐рдЫрд▓реА рдмрд╛рд░ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рдереЗ :value.translation.width - self.prevTranslationред рдпрд╣ рд╣рдореЗрдВ рд╕рдВрдХреЗрддрдХ рдХреЗ рдПрдХ рд╕реБрдЧрдо рдЖрдВрджреЛрд▓рди рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рдХрд┐рд╕реА рджрд┐рдП рдЧрдП "рдЪрд╛рд░реНрдЯ рдХреЗ рд╕реЗрдЯ" рдХреА рдорджрдж рд╕реЗ

рд╕рдВрдХреЗрддрдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , рд╣рдо "рдЪрд╛рд░реНрдЯреНрд╕" рдХреЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдирд┐рд░реНрдорд╛рдг рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ : рд╣рдо рдХрд┐рд╕реА рднреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рдордиреНрд╡рд┐рдд, рд╕рдВрдХреЗрддрдХ рдФрд░ "рдЪрд╛рд░реНрдЯ" рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордп рд╕реАрдорд╛ ред рдпрд╣ рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдХрд┐ "рдЪрд╛рд░реНрдЯ" рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ "рдордВрдбрд▓рд┐рдпрд╛рдВ" рд╕рд╣реА рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╣реИрдВредIndicatorViewPreviewschartViewGraphsForChart



rangeTimeIndicatorViewGraphsForChart

TickerView- XрдЕрдВрдХреЛрдВ рдХреЗ рд╕рд╛рдеред


рдЕрдм рддрдХ, рд╣рдорд╛рд░реЗ "рдЪрд╛рд░реНрдЯ" рдХреЛ рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЙрдирдХреЗ X Yрдкрд╛рд╕ рдЙрдкрдпреБрдХреНрдд рддрд░рд╛рдЬреВ рдФрд░ рдирд┐рд╢рд╛рди рдирд╣реАрдВ рд╣реИрдВред рдЪрд▓реЛ рдЙрд╕ рдкрд░ XрдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЗ рд╕рд╛рде рдЖрдХрд░реНрд╖рд┐рдд TickerMarkViewрдХрд░рддреЗ рд╣реИрдВред рд╕рд╛рдореА рдирд┐рд╢рд╛рди TickerMarkViewрдмрд╣реБрдд рд╕рд░рд▓ рд╣реИрдВ ViewрдКрд░реНрдзреНрд╡рд╛рдзрд░ рдвреЗрд░ VStackрдЬрд┐рд╕рдореЗрдВ рд╣реИрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреА PathрдФрд░ Text:



рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд "рд╕реЗрдЯ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕" рдХреЗ рд▓рд┐рдП рд╕рдордп рдзреБрд░реА рдкрд░ рдирд┐рд╢рд╛рди рдХреЗ рд╕реЗрдЯ chart : LineSetрдХрд╛ рдЧрдарди TickerViewрдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЪрдпрдирд┐рдд рд╕рдордп рд╕реАрдорд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ rangeTimeрдФрд░ рдЕрдВрдХ рдХреА рдЕрдиреБрдорд╛рдирд┐рдд рдорд╛рддреНрд░рд╛ estimatedMarksNumberрд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рджреГрд╢реНрдп рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:



рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рд▓рд┐рдП "рд░рдирд┐рдВрдЧ" рдЯрд╛рдЗрдорд╕реНрдЯреИрдВрдк рд╣рдо рдПрдХ ScrollViewрдХреНрд╖реИрддрд┐рдЬ рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВHStack, рдЬреЛ рд╕рдордп рд╕реАрдорд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд░реВрдк рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ rangeTimeред

рдЬреИрд╕рд╛ рдХрд┐ TickerViewрд╣рдо рдПрдХ рдХрджрдо рдХреЗ рд░реВрдк рдореЗрдВ stepрд╣реИ, рдЬреЛ рджрд┐рдЦрд╛рдИ рд╕рдордп рд╕реНрдЯрд╛рдореНрдк TimeMarkViewрдПрдХ рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдордп рд╕реАрдорд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ rangeTimeрдФрд░ рд╕реНрдХреНрд░реАрди рдХреА рдЪреМрдбрд╝рд╛рдИ widthRange...



... рдФрд░ рдлрд┐рд░ рд╕рдордп рд╕реНрдЯрд╛рдореНрдк рдХрджрдо рдЧ рдЪрдпрди stepрд╕рд░рдгреА рдХреЗ chart.xTimeрд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ indexesред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ X- рдПрдХ рдХреНрд╖реИрддрд┐рдЬ рд░реЗрдЦрд╛ - рд╣рдо рдбрд╛рд▓реЗрдВрдЧреЗ overlay...



рдПрдХ рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдЯреИрдХ рдкрд░ HStack, рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЗ рд╕рд╛рде TimeMarkView, рдЬрд┐рд╕реЗ рд╣рдо рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ offset:



рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо X- colorXAxisрдФрд░ рдЦреБрдж рдХреЗ рд░рдВрдЧ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - colorXMark:



YTickerView- Yрдирд┐рд╢рд╛рди рдФрд░ рдПрдХ рдЧреНрд░рд┐рдб рдХреЗ рд╕рд╛рдеред


рдпрд╣ рдПрдХ рдбрд┐рдЬрд┐рдЯрд▓ рдирд┐рд╢рд╛рди рдХреЗ рд╕рд╛рде ViewрдЦреАрдВрдЪрддрд╛ рд╣реИ ред рдЕрдВрдХ рд╕реНрд╡рдпрдВ рдПрдХ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХреНрд╖реИрддрд┐рдЬ рд░реЗрдЦрд╛) рдФрд░ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде: рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд "рдЪрд╛рд░реНрдЯ рдХреЗ рд╕реЗрдЯ" рдХреЗ рд▓рд┐рдП рдирд┐рд╢рд╛рди рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрдирддрд╛ рд╣реИ ред рдорд╛рдиреЛрдВ рдХреА рд╢реНрд░реЗрдгреА рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ "рдЪрд╛рд░реНрдЯреНрд╕ рдХреЗ рдЗрд╕ рд╕реЗрдЯ" рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА "рдЪрд╛рд░реНрдЯ" рдХреЗ рдорд╛рдиреЛрдВ рдХреА рд╢реНрд░реЗрдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ ред Y- рдЕрдХреНрд╖ рдкрд░ рдирд┐рд╢рд╛рди рдХреА рдЕрдиреБрдорд╛рдирд┐рдд рд╕рдВрдЦреНрдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИ : рдореЗрдВ рд╣рдо рдореВрд▓реНрдпреЛрдВ рдХреА "рдЧреНрд░рд╛рдлрд┐рдХреНрд╕" рдмрджрд▓рддреЗ рд╕реАрдорд╛ рдкрд░ рдирдЬрд░ рд░рдЦрдиреЗ рдХреЗ ред рджрд░рдЕрд╕рд▓ Y- рдЕрдХреНрд╖ - рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд░реЗрдЦрд╛ - рд╣рдо рдЕрдкрдиреЗ рдирд┐рд╢рд╛рди рдкрд░ рд▓рдЧрд╛рддреЗ рд╣реИрдВ ... YYMarkViewYMarkViewViewVStackPathText



YchartYTickerViewrangeYrangeOfRangesestimatedMarksNumber



YTickerViewrangeYoverlay



рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рд╡рд╛рдИ-рдЕрдХреНрд╖ рдХреЗ рд░рдВрдЧреЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ colorYAxis, рдФрд░ - рдЕрдВрдХ colorYMark:



RangeView - "рдорд┐рдиреА-рдореИрдк" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдордп рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ред


рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╕рдмрд╕реЗ рдЧрддрд┐рд╢реАрд▓ рд╣рд┐рд╕реНрд╕рд╛ "рдЪрд╛рд░реНрдЯ рдХрд╛ рд╕реЗрдЯ" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рд╕реАрдорд╛ ( lowerBound, upperBound) рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ:



RangeView- рдпрд╣ mini - mapрджреВрд╕рд░реЛрдВ рдореЗрдВ "рдЪрд╛рд░реНрдЯ рдХреЗ рд╕реЗрдЯ" рдХреЗ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рдЪрд╛рд░ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдордп рдЕрдиреБрднрд╛рдЧ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рд╣реИ Viewsред

рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ View, рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ RangeViewрд╣реИрдВ:



  • "рдЪрд╛рд░реНрдЯ рд╕реЗрдЯ" рд╕реНрд╡рдпрдВ chart: LineSet(рдорд╛рди Y),
  • рдКрдВрдЪрд╛рдИ height "mini-map" RangeView,
  • рдЪреМрдбрд╝рд╛рдИ widthRange "mini-map" RangeView,
  • рдЗрдВрдбреЗрдВрдЯ indent "mini-map" RangeViewред

рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд Views, рд╣рдореЗрдВ рдПрдХ рдЗрд╢рд╛рд░реЗ рдХреЗ рд╕рд╛рде DragGestureрд╕рдордп рд╕реАрдорд╛ ( lowerBound, upperBound) рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рддреБрд░рдВрдд рдЗрд╕рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдордп рд╕реАрдорд╛ ( lowerBound, upperBound) рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рдПрдХ рдЪрд░ рдЪрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ @EnvironmentObject var userData: UserData: рдЪрд░ рдореЗрдВ



рдХреЛрдИ рднреА рдкрд░рд┐рд╡рд░реНрддрди var userDataрд╣реЛрдЧрд╛ ViewsрдЙрд╕ рдкрд░ рдЖрд╢реНрд░рд┐рдд рд╕рднреА рдХреЛ рд▓рд╛рд▓ рдХрд░ рджреЗрдирд╛ред

рдореБрдЦреНрдп рдЪрд░рд┐рддреНрд░ RangeViewрдПрдХ рдкрд╛рд░рджрд░реНрд╢реА "рд╡рд┐рдВрдбреЛ" рд╣реИ, рдЬрд┐рд╕рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдЖрдХрд╛рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЗрд╢рд╛рд░реЗ рдХреЗ рд╕рд╛рде рд╡рд┐рдирд┐рдпрдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ DragGesture:

1. рдпрджрд┐ рд╣рдо рдПрдХ рдкрд╛рд░рджрд░реНрд╢реА "рд╡рд┐рдВрдбреЛ" рдХреЗ рдЕрдВрджрд░ рдЗрд╢рд╛рд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ Xрдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде "рд╡рд┐рдВрдбреЛ" рдХрд╛ рд╕реНрдерд┐рддрд┐ рдФрд░ рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ:



2. рдпрджрд┐ рд╣рдо рдмрд╛рдПрдВ рдЕрдВрдзреЗрд░реЗ рднрд╛рдЧ рдореЗрдВ рдПрдХ рдЗрд╢рд╛рд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЗрд╡рд▓ "рд╡рд┐рдВрдбреЛ" рдХреЗ рдмрд╛рдПрдБ рдмреЙрд░реНрдбрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ lowerBound, рдЬрд┐рд╕рд╕реЗ рд╣рдо рдкрд╛рд░рджрд░реНрд╢реА "рд╡рд┐рдВрдбреЛ" рдХреА рдЪреМрдбрд╝рд╛рдИ рдХреЛ рдШрдЯрд╛ рдпрд╛ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ:



3. рдпрджрд┐ рд╣рдо рд╕рд╣реА рдЕрдВрдзреЗрд░реЗ рд╡рд╛рд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдПрдХ рдЗрд╢рд╛рд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЗрд╡рд▓ "рд╡рд┐рдВрдбреЛ" рдХреЗ рд░рд╛рдЗрдЯ рдмреЙрд░реНрдбрд░реНрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ upperBoundред рд╡реГрджреНрдзрд┐ рдХреА рдЗрдЬрд╛рдЬрдд рджреА рдпрд╛ рдкрд╛рд░рджрд░реНрд╢реА "рд╡рд┐рдВрдбреЛ" рдХреА рдЪреМрдбрд╝рд╛рдИ рдХрдо рд╣реЛ:



RangeView3 рдореБрдЦреНрдп рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: рджреЛ рдЖрдпрддреЛрдВ Rectangle ()рдФрд░ рдЫрд╡рд┐рдпреЛрдВ ImageрдЬрд┐рд╕рдХрд╛ рд╕реАрдорд╛рдУрдВ рдЧреБрдг рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ lowerBoundрдФрд░ upperBoundрд╕реЗ @EnvironmentObject var userData: UserDataрдФрд░ рдЗрд╢рд╛рд░реЛрдВ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ DragGesture:



рд╣рдо "рдорд┐рд▓рд╛рддреА рд╣реИрдВ" рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ ( overlay) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдЪрд┐рдд рд╣реИ рд╣рдореЗрдВ GraphsForChartViewрджрд┐рдП рдЧрдП "рдЪрд╛рд░реНрдЯреНрд╕" рд╕реЗ "рдЪрд╛рд░реНрдЯреНрд╕" chart:



рдпрд╣ рд╣рдореЗрдВ рдореЙрдирд┐рдЯрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдХрд┐ рдХрд┐рддрдирд╛ "рдЪрд╛рд░реНрдЯ" "рд╡рд┐рдВрдбреЛ" рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИред

рдкрд╛рд░рджрд░реНрд╢реА "рд╡рд┐рдВрдбреЛ" рдореЗрдВ рдХреЛрдИ рдкрд░рд┐рд╡рд░реНрддрди (рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рд╕реАрдорд╛рдУрдВ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди) рдЧреБрдг рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ lowerBoundрдФрд░ upperBoundрдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ UserData рдореЗрдВ onChangedрд╕рдВрдХреЗрдд рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг DragGestureрджреЛ рдмрдХреНрд╕реЗ рдореЗрдВ Rectangle ()рдФрд░ рдЪрд┐рддреНрд░ Image...



рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреНрдп redrawing рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдХрд░реЗрдВрдЧреЗ Views(рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, "рдЪрд╛рд░реНрдЯ", рдЕрдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХреНрд╕-рдЕрдХреНрд╖, рдЕрдВрдХреЛрдВ рдФрд░ рд╕рдВрдХреЗрддрдХ рдХреЗ рд╕рд╛рде рд╡рд╛рдИ-рдЕрдХреНрд╖ рдЧ hartView):



рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ ViewрдПрдХ рдЪрд░ рд╣реИ @EnvironmentObject userData: UserData, рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХреЗ рд▓рд┐рдП Previews, рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ .environmentObject (UserData()):



CheckMarksView - "рдЫреБрдкрд╛" рдФрд░ "рд░реЗрдЦрд╛рдВрдХрди" рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИред


CheckMarksViewрдпрд╣ "рд░реЗрдЦрд╛рдВрдХрди рдХреЗ рд╕реЗрдЯ" рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐ "рдЧреНрд░рд╛рдлрд┐рдХреНрд╕" рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП HStackрдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдЯреИрдХ рд╣реИ : рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЗрд╕реЗ рдпрд╛ рддреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рдмреБрд▓рд╛рдпрд╛ рдпрд╛ рдПрдХ рдЕрдиреБрдХрд░рдг рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдмрдЯрди рдХреЛ рдирдХрд▓ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдХреНрдпреЛрдВрдХрд┐ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдЙрдЪреНрдЪрддрд░ рд╕реНрдерд┐рдд рдЗрди рдмрдЯрди рдореЗрдВ рд╕реЗ рдХрдИ рдХреЛ рд░рдЦрдиреЗ рдкрд░ , рд╡реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдордирд╛" рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдмрдЧ рд╣реИ рдЬреЛ Xcode 11 рд╕реЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмреАрдЯрд╛ 1 рд╕реЗ рдЕрдЯрдХрд╛ рд╣реБрдЖ рд╣реИ ред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рд╕рд┐рдореНрдпреБрд▓реЗрдЯреЗрдб рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ ред рдирдХрд▓реА рдмрдЯрди рдФрд░ рдЕрд╕рд▓реА рдмрдЯрди рджреЛрдиреЛрдВcheckBoxesisHiddenchart



CheckBoxButtonCheckButtonSimulatedButton



ButtonListSimulatedButton

SimulatedButtonCheckButtonViewрдЙрдирдХреА "рдЙрдкрд╕реНрдерд┐рддрд┐" рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ - CheckBoxViewред рдЗрд╕рдореЗрдВ HStackрдпреБрдХреНрдд TexрдФрд░ Image:



рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ CheckBoxViewрдПрдХ @BindingрдЪрд░ рд╣реИ var line: Lineред isHiddenрдЗрд╕ рдЪрд░ рдХреА рд╕рдВрдкрддреНрддрд┐ "рдЙрдкрд╕реНрдерд┐рддрд┐" рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИ CheckBoView:




рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ CheckBoViewрд╕рдордп SimulatedButtonрдФрд░ рдЕрдВрджрд░, CheckButtonрдЖрдкрдХреЛ рдкреНрд░рд╛рд░рдВрдн $рдХреЗ lineрджреМрд░рд╛рди рд╕рдВрдХреЗрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП : рдЪрд░




рд╕рдВрдкрддреНрддрд┐ isHiddenрдореЗрдВ lineрд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ SimulatedButtonрдЬрд╛рддрд╛ рд╣реИ onTapGesture...



... рдФрд░ CheckButton- рд╕рд╛рдорд╛рдиреНрдп actionрдмрдЯрди рдХреЗ рд╕рд╛рде Button:



рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрд░рдВрднреАрдХрд░рдг рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП SimulatedButtonрдФрд░ CheckButtonрднреА рд╣реИ@BindingрдПрдХ рдЪрд░ var line: Lineред рдЗрд╕рд▓рд┐рдП, рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП $рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CheckMarksViewрд╕реНрд╡рд┐рдЪрди рдЪрд░ userData.charts[self.chartIndex].lines[self.lineIndex(line: line)].isHidden, рдЬреЛ рдПрдХ рдЪрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ @EnvironmentObject var userData:



рд╣рдо рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЕрдкреНрд░рдпреБрдХреНрдд рд░рдЦрд╛ рд╣реИ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣реИ CheckButtonрдЗрд╕ рдорд╛рдорд▓реЗ рдкрд░, рдпрджрд┐ рдЖрдк рдЕрдЪрд╛рдирдХ AppleрдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ CheckButtonрдореЗрдВ CheckMarksViewрдмрдЬрд╛рдп SimulatedButtonрдФрд░ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рд╕реЗрдЯ, "рд░реЗрдЦрд╛рдВрдХрди рдХрд╛ рдПрдХ рд╕реЗрдЯ 'рдХреА рд░рдЪрдирд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ ChartViewрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ ListрдореЗрдВ ListChartsViewред

рдЪреВрдБрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ ViewрдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рд╣реИ @EnvironmentObject var userData: UserData, рдкреНрд░реАрд╡реНрдпреВ рдХреЗ рд▓рд┐рдП Previews, рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдЖрд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП .environmentObject(UserData()):



рд╡рд┐рднрд┐рдиреНрди рдХрд╛ рд╕рдВрдпреЛрдЬрди Viewsред


SwiftUI- рдпрд╣ рдореБрдЦреНрдп рд░реВрдк Viewsрд╕реЗ рдмрдбрд╝реЗ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЫреЛрдЯреЗ рд▓реЛрдЧреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рд╣реИ, рдФрд░ рдмрдбрд╝реЗ рд▓реЛрдЧреЛрдВ ViewsрдХреЛ рдмрд╣реБрдд рдмрдбрд╝реЗ рд▓реЛрдЧреЛрдВ рдореЗрдВ, рдЖрджрд┐, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдЦреЗрд▓ рдореЗрдВ Legoред рдЗрд╕ SwiftUIрддрд░рд╣ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рдХрдИ рд╕рд╛рдзрди рд╣реИрдВ Views:

  • рдПрдХ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдвреЗрд░ VStack,
  • рдХреНрд╖реИрддрд┐рдЬ рдвреЗрд░ HStack,
  • рдвреЗрд░ рдХреЗ "рдЧрд╣рд░рд╛рдИ" ZStack,
  • рд╕рдореВрд╣ Group,
  • ScrollView ред
  • рд╕реВрдЪреА List,
  • рдлрд╛рд░реНрдо Form,
  • рдмреБрдХрдорд╛рд░реНрдХ рдХрдВрдЯреЗрдирд░ TabView
  • рдЖрджрд┐

рд╣рдо рдЕрдкрдиреЗ рд╕рдВрдпреЛрдЬрди рдХреЛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ GraphsViewForChart, рдЬреЛ "рдлреЗрд╕рд▓реЗрд╕" "рдЪрд╛рд░реНрдЯ рд╕реЗрдЯ" GraphsForChartAXIS Y рджреЗрддрд╛ рд╣реИ рдФрд░ "рдбреАрдк" рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕-рдПрдХреНрд╕рд┐рд╕ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╕рдВрдХреЗрддрдХ ZStack:



рд╣рдордиреЗ рдПрдХ рдореЙрдбрд┐рдлрд╛рдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PreviewsрдЕрдкрдиреЗ рдирдП GraphsViewForChartрдХрдВрдЯреЗрдирд░ NavigationViewрдореЗрдВ рдПрдХ рдХрдВрдЯреЗрдирд░ рдЬреЛрдбрд╝рд╛ред ред рд╣рдо рдПрдХреНрд╕рд┐рд╕ рд╡рд╛рдИ рдФрд░ рдПрдХ рд╕рдВрдХреЗрддрдХ, рдПрдХреНрд╕рд┐рд╕ рдПрдХреНрд╕ рдХреЗ рд╕рд╛рде "рд░рдирд┐рдВрдЧ рд▓рд╛рдЗрди", рд╕рд╛рде рд╣реА рдирд┐рдпрдВрддреНрд░рдг: "рдорд┐рдиреА-рдореИрдк" рдФрд░ "рдЧреНрд░рд╛рдлрд╝" рдбрд┐рд╕реНрдкреНрд▓реЗ рд╕реНрд╡рд┐рдЪ рдХреА рд╕рдордп рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рдКрдкрд░ рджрд┐рдП рдЧрдП "рдЪрд╛рд░реНрдЯ рд╕реЗрдЯ" рд╕реЗ рд╕рдВрдпреЛрдЬрди рдФрд░ рд╕рдВрд▓рдЧреНрди рдХрд░рддреЗ рд╣реИрдВ ред рдирддреАрдЬрддрди, рд╣рдо рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рдПрдХ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ , рдЬреЛ "рдЪрд╛рд░реНрдЯ рдХрд╛ рд╕реЗрдЯ" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд╕рдордп рдкрд░ рдЗрд╕рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:Dark.collorScheme(.dark)

RangeViewCheckMarksView

ChartView



рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдпреЛрдЬрди рдХрд░рддреЗ рд╣реИрдВ VStack:



рдЕрдм рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рд╛рдкреНрдд рдЪрд╛рд░реНрдЯ рд╡реНрдпреВ рдХреЗ рд╕реЗрдЯ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП 3 рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

  1. "рд╕реНрдХреНрд░реЙрд▓ рдЯреЗрдмрд▓" List,
  2. HStack3 рдбреА рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде рдХреНрд╖реИрддрд┐рдЬ рдвреЗрд░ ,
  3. ZStack "рдХрд╛рд░реНрдб"

рдПрдХ "рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдЯреЗрдмрд▓"ListChartsView рдПрдХ рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдпреЛрдЬрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ List:



рдПрдХ 3 рдбреА рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде рдПрдХScrollView рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдЯреИрдХ рдПрдХ рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдЯреИрдХ HStackрдФрд░ рдлреЙрд░реНрдо рдореЗрдВ рдПрдХ рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ForEach:



рдЗрд╕ рджреГрд╢реНрдп рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рд╕рднреА рд╕рд╛рдзрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ: рд╕рдордпрд░реЗрдЦрд╛ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдФрд░ "рд╕реНрдХреЗрд▓" mini- map, рд╕рдВрдХреЗрддрдХ рдФрд░ рдЫрд┐рдкрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмрдЯрди рдмрджрд▓рдирд╛ "рдЧреНрд░рд╛рдлрд┐рдХреНрд╕"ред

ZStack "рдХрд╛рд░реНрдб" рдХреА рдЕрдзрд┐рдХрддрд╛ред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо CardView"рдореИрдк" рдХреЗ рд▓рд┐рдП рдмрдирд╛рддреЗ рд╣реИрдВ - рдпрд╣ рдПрдХреНрд╕рд┐рд╕ рдПрдХреНрд╕ рдФрд░ рд╡рд╛рдИ рдХреЗ рд╕рд╛рде рдЪрд╛рд░реНрдЯ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдмрд┐рдирд╛: "рдорд┐рдиреА - рдореИрдк" рдХреЗ рдмрд┐рдирд╛ рдФрд░ рдЪрд╛рд░реНрдЯ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ / рдЫреБрдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЯрди рдХреЗ рдмрд┐рдирд╛ред CardViewрдмрд╣реБрдд рд╕рдорд╛рди рд╣реИ ChartView, рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рд╣рдо рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдКрдкрд░ "рдХрд╛рд░реНрдб" рдУрд╡рд░рд▓реЗ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЕрдкрд╛рд░рджрд░реНрд╢реА рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдЕрдВрдд рддрдХ, рд╣рдо ZStack"рдкреГрд╖реНрдарднреВрдорд┐" рдореЗрдВ рд░рдЦреЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ cardBackgroundColorред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо "рдирдХреНрд╢рд╛" рдЧреЛрд▓ рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдмреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:



рдХреА "рдорд╛рдирдЪрд┐рддреНрд░" рдПрдХ рдвреЗрд░ рдХреА рдУрд░ рд╕реЗ рдЖрдпреЛрдЬрд┐рдд superposition VStack, ZStackрдФрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреА ForEach:



рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ рд╕рд┐рд░реНрдл рдПрдХ "рдХрд╛рд░реНрдб" рдФрд░ "3 рдбреА-macshtabiruemye" рдирд╣реАрдВ рд╣реИ рдХрд╛рд░реНрдбреНрд╕ CardViewScalable, рдЬрд┐рдирдХрд╛ рдЖрдХрд╛рд░ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде рдШрдЯрддрд╛ рд╣реИindexChatрдФрд░ рд╡реЗ рдереЛрдбрд╝рд╛ рд▓рдВрдмрд╡рдд рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

"3D-рд╕реНрдХреЗрд▓реЗрдмрд▓ рдХрд╛рд░реНрдб" рдХреЗ рдХреНрд░рдо sequencedрдХреЛ рдЗрд╢рд╛рд░реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо ( ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ LongPressGestureрдФрд░ DragGesture, рдЬреЛ рдХреЗрд╡рд▓ "рдХрд╛рд░реНрдб" рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдКрдкрд░ "рдХрд╛рд░реНрдб" рдкрд░ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ indexChat == 0:



рдЖрдк LongPress"рдЪрд╛рд░реНрдЯ рдХреЗ рд╕реЗрдЯ" рдХреЗ рд╕рд╛рде рд╢реАрд░реНрд╖ "рдХрд╛рд░реНрдб" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ DragрдиреАрдЪреЗ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ ( ) рдЕрдЧрд▓реЗ рдХрд╛рд░реНрдб рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдиреАрдЪреЗ рдЦреАрдВрдЪрдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ "рдЕрдВрддрд┐рдо рд╕реНрдерд╛рди рдкрд░" рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ ZStack, рдФрд░ рдЕрдЧрд▓рд╛ "рдХрд╛рд░реНрдб" рдЖрдЧреЗ рдЖрддрд╛ рд╣реИ:



рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдКрдкрд░реА "рдХрд╛рд░реНрдб" рдХреЗ рд▓рд┐рдП рд╣рдо рдЖрд╡реЗрджрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ TapGesture, рдЬреЛ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛ рдЗрд╢рд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде LongPressGestureрдФрд░ рдПрдХ DragGesture:



Tap"рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕реЗрдЯ" рдПрдХ рдЗрд╢рд╛рд░рд╛ рдореЛрдбрд▓ рджрд┐рдЦрд╛рдПрдЧрд╛ ChartViewрдИ рдХреЗ рд╕рд╛рде ementami рдкреНрд░рдмрдВрдзрди RangeViewрдФрд░CheckMarksView :



TabViewрд╕рдВрд░рдЪрдирд╛ "рдЪрд╛рд░реНрдЯ рд╕реЗрдЯ" рдХреЗ рд╕рднреА 3 рд╡реЗрд░рд┐рдПрдВрдЯ рдПрдХ рд╕реНрдХреНрд░реАрди рдкрд░ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди ChartViewред





рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЫрд╡рд┐ ImageрдФрд░ рдкрд╛рда рдХреЗ рд╕рд╛рде 3 рдмреБрдХрдорд╛рд░реНрдХ рд╣реИрдВ Text, VStackрдЙрдирдХреА рд╕рдВрдпреБрдХреНрдд рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╕реНрдЯреИрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рд╡реЗ "рдЪрд╛рд░реНрдЯ рдХреЗ рд╕реЗрдЯ" рдХреЗ рд╣рдорд╛рд░реЗ 3 рддрд░реАрдХреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВ ChartViews:

  1. "рд╕реНрдХреНрд░реЙрд▓ рдЯреЗрдмрд▓" ListChartViews,
  2. 3 рдбреА рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде рдХреНрд╖реИрддрд┐рдЬ рдвреЗрд░ HStackChartViews,
  3. ZStack рдиреЗ "рдХрд╛рд░реНрдбреНрд╕" рдкрд░ рдЬрд╝реЛрд░ рджрд┐рдпрд╛ OverlayCardsViewsред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рд╕рднреА рддрддреНрд╡: mini - map"рдЪрд╛рд░реНрдЯ" рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдФрд░ "рд╕реНрдХреЗрд▓" рдХреЛ рд╕рд╣рд╛рдпрддрд╛ , рд╕рдВрдХреЗрддрдХ рдФрд░ рдмрдЯрди рдХреЗ рд╕рд╛рде рдмрджрд▓рддреЗ рд╣реИрдВ ред рд╕рднреА 3 рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдХреЛрдб рдЧрд┐рддреБрдм рдкрд░ рд╣реИ ред

SwiftUI ...


рдЖрдкрдХреЛ рд╡реАрдбрд┐рдпреЛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓, рдкреБрд╕реНрддрдХреЛрдВ рдФрд░ рдмреНрд▓реЙрдЧреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

Mang To , Lets Build That Application , рд╕рд╛рде рд╣реА рдХреБрдЫ SwiftUI рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рд╡рд░реНрдгрди ,
- рдПрдХ рдореБрдлреНрдд рдкреБрд╕реНрддрдХ "рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП SwiftUI" рдФрд░ рдПрдХ рд╡реАрдбрд┐рдпреЛ www.hackingwithswift
- quick - start / swiftui - рднреБрдЧрддрд╛рди рдХреА рдЧрдИ рдкреБрд╕реНрддрдХред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЖрдзрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдореБрдлреНрдд www.bigmountstudio.com/swiftui-views-book- рдХреЗ рд▓рд┐рдП рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- SwiftUI www.hackingwithswift.com/articles/201/start-the-100-days-of-swswui рдХреЗ рд╕рд╛рде 100 рджрд┐рди рдХрд╛ рдХреЛрд░реНрд╕ , рдЬреЛ рдЕрднреА рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ 31 рджрд┐рд╕рдВрдмрд░, 2019 рдХреЛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛,
- рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдореЗрдВ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдЪреАрдЬреЗрдВ рд╕реНрд╡рд┐рдлреНрдЯреБрдИ- рд▓рд╛рдм рдбреЙрдЯ рдХреЙрдо
- рдорд╛рдЬрд┐рдж рдмреНрд▓реЙрдЧ ,
- рдкреЙрдЗрдВрдЯрдлреНрд░реА рдкрд░ рдХреА рдЬрд╛рддреА рд╣реИрдВредwww.pointfree.co SwiftUI (рд╕реБрдкрд░ рджрд┐рд▓рдЪрд╕реНрдк) рдореЗрдВ Reducers рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрджреЛрдВ рдХрд╛ "рдореИрд░рд╛рдерди"
рдПрдХ рдЕрджреНрднреБрдд рдореВрд╡реАрд╕рд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬрд┐рд╕рдиреЗ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЙрдзрд╛рд░ рд▓рд┐рдпрд╛ рд╣реИред

Source: https://habr.com/ru/post/hi468897/


All Articles