2GIS рдЖрдкрдХреА рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдкрд░ рд╣реИред рд╣рдордиреЗ Apple рд╡реЙрдЪ рдореЗрдВ рдПрдХ рдирдХреНрд╢рд╛ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛


рдРрдкрд▓ рд╡реЙрдЪ рдиреЗ рддреЗрдЬрд╝реА рд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рд╣рд╛рд╕рд┐рд▓ рдХреА рдФрд░ рд░реЛрд▓реЗрдХреНрд╕ рдФрд░ рдЕрдиреНрдп рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓рдХрд░ рджреБрдирд┐рдпрд╛ рдХреА рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдШрдбрд╝реА рдмрди рдЧрдИред рдШрдбрд╝рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ 2015 рд╕реЗ 2 рдЬреАрдЖрдИрдПрд╕ рдХрд╛рд░реНрдпрд╛рд▓рдп рдореЗрдВ рд░рд╣рд╛ рд╣реИред


рд╣рдорд╕реЗ рдкрд╣рд▓реЗ, рдХреЗрд╡рд▓ Apple рдиреЗ рд╣реА рдШрдбрд╝реА рдкрд░ рдПрдХ рдХрд╛рд░реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рдкреВрд░реНрдг-рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдерд╛ред Yandex.Map рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗрд╡рд▓ рдЯреНрд░реИрдлрд╝рд┐рдХ рд╡рд┐рдЬреЗрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдШрд░ рдФрд░ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рд╕рдордп рдпрд╛рддреНрд░рд╛ рдХрд░рддрд╛ рд╣реИред Yandex.Navigator, Google Maps, Waze рдФрд░ Mapsред рдЖрдорддреМрд░ рдкрд░ рдШрдбрд╝реА рдкрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред


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


рдкрд╛рд▓рддреВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдПрдХ рдкреВрд░реНрдг рдЙрддреНрдкрд╛рдж рдореЗрдВ рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рдПрдХ рддрд┐рд░рдЫреА рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред


UPDред: https://github.com/teanet/DemoWatch


рд╣рдордиреЗ рдПрдХ рдирдХреНрд╢рд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреНрдпрд╛ рдерд╛?


  1. рдШрдбрд╝реА рдкрд░ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдЕрдиреБрднрд╡ - рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ 2 рджрд┐рди рдХрд╛ рдХрд╛рдоред
  2. рд╕реНрдкреНрд░рд╛рдЗрдЯрдХрд┐рдЯ рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡ - 0 рджрд┐рдиред
  3. MapKit рд▓реЗрдЦрди рдЕрдиреБрднрд╡ - 0 рджрд┐рдиред
  4. рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - mayред

Iteration 1 - рд╡рд┐рдЪрд╛рд░ рдХреА рдЙрдбрд╝рд╛рди


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


рдПрдХ рдирдХреНрд╢рд╛ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реА рддрд╕реНрд╡реАрд░ рд╣реИред рд╣рдо рдШрдбрд╝реА рдкрд░ рдЪрд┐рддреНрд░ рджрд┐рдЦрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо рдХрд╛рд░реНрдб рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред


рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рдХрд╛рд░реНрдб рдХреЛ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдХрд╛рдЯ рд╕рдХрддреА рд╣реИ:



рдпрджрд┐ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреА рддрд╕реНрд╡реАрд░ рдХрд╛рдЯрддреЗ рд╣реИрдВ рдФрд░ WKImage рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдкрд╛рдВрдЪ рд╕реЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдорд┐рд▓рддрд╛ рд╣реИред


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


/ рдЖрдирдиреНрджрд┐рдд / рдпрд╣ рднрдпрд╛рдирдХ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣ рдЙрд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рдпрд╣ рдФрд░ рднреА рдмрджрддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред


Iteration 2 - рдиреНрдпреВрдирддрдо рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк


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


StackOverflow Driven Development (SDD) рдХреЗ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ рджреВрд╕рд░рд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдорд┐рд▓рддрд╛ рд╣реИ:
рдПрдХ SKSpriteNode, рдПрдХ WKPanGestureRecognizerред



/ рдЖрдирдиреНрджрд┐рдд / рд╣рд╛рдБ рдпрд╣ 6 kopecks рдХреЗ рд▓рд┐рдП MapKit рд╣реИ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рддрддреНрдХрд╛рд▓ рд░рд┐рд▓реАрдЬ!


Iteration 3- рдЯрд╛рдЗрд▓ рдФрд░ рдЬрд╝реВрдо рдмрдврд╝рд╛рдирд╛


рдЬрдм рднрд╛рд╡рдирд╛рдПрдВ рд╕реЛ рд░рд╣реА рдереАрдВ, рддреЛ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдЖрдЧреЗ рдХрд╣рд╛рдБ рдЬрд╛рдирд╛ рд╣реИред


рд╕рдордЭреЗ рдХрд┐ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд:


  • рдЯрд╛рдЗрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдЫрд╡рд┐ рдмрджрд▓реЗрдВред
  • рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдВрдбрд▓ рдореЗрдВ 4 рдЯрд╛рдЗрд▓реЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред
  • рдЭреВрдо рдЪрд┐рддреНрд░ рдкреНрд░рджрд╛рди рдХрд░реЗрдВред
    рдЖрдЗрдП 4 рдмрдВрдбрд▓ рдХреЛ рдЖрд╡реЗрджрди рдмрдВрдбрд▓ рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрдВ, рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкрд░ рд░рдЦреЗрдВ:

let rootNode = SKSpriteNode() 

рд╕рд░рд▓ рдЧрдгрд┐рдд рдХреА рдорджрдж рд╕реЗ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред
рд╣рдо WKCrownDelegate рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╝реВрдо рдХрд░рддреЗ рд╣реИрдВ:


 internal func crownDidRotate( _ crownSequencer: WKCrownSequencer?, rotationalDelta: Double ) { self.scale += CGFloat(rotationalDelta * 2) self.rootNode.setScale(self.scale) } 


/ рдЖрдирдиреНрджрд┐рдд / рдЕрдЪреНрдЫрд╛, рдЕрдм рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИ! рдлрд┐рдХреНрд╕ рдХрд╛ рдПрдХ рдЬреЛрдбрд╝рд╛, рдФрд░ рдЧреБрд░реБ рдХреЛред


Iteration 4 - рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛


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


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


рдЯрд╛рдЗрд▓реЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИрдВ:



рдкреНрд░рддреНрдпреЗрдХ zoomLevel (рдЗрд╕рдХреЗ рдмрд╛рдж "z") рдореЗрдВ рдЯрд╛рдЗрд▓реНрд╕ рдХрд╛ рдЕрдкрдирд╛ рд╕реЗрдЯ рд╣реИред Z = 1 рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 4 рдЯрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдЬреЛ рдкреВрд░реА рджреБрдирд┐рдпрд╛ рдХреЛ рдмрдирд╛рддреА рд╣реИрдВред



z = 2 рдХреЗ рд▓рд┐рдП - рдкреВрд░реА рджреБрдирд┐рдпрд╛ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 16 рдЯрд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ,
z = 3 рдХреЗ рд▓рд┐рдП - 64 рдЯрд╛рдЗрд▓реЗрдВред
z = 18 тЙИ 68 * 10 ^ 9 рдЯрд╛рдЗрд▓реНрд╕ рдХреЗ рд▓рд┐рдПред
рдЕрдм рдЙрдиреНрд╣реЗрдВ SpriteKit рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред


рдПрдХ рдЯрд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ 256 * 256 рдкреАрдЯреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ
z = 1 рдХреЗ рд▓рд┐рдП, "рджреБрдирд┐рдпрд╛" рдХрд╛ рдЖрдХрд╛рд░ 512 * 512 рдкреАрдЯреА рд╣реЛрдЧрд╛,
z = 2 рдХреЗ рд▓рд┐рдП "рджреБрдирд┐рдпрд╛" рдХрд╛ рдЖрдХрд╛рд░ 1024 * 1024 pt рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ред
рдЧрдгрдирд╛ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЯрд╛рдЗрд▓реЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд░рдЦреЗрдВ:



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


 let kTileLength: CGFloat = 256 struct TilePath { let x: Int let y: Int let z: Int } 

рдРрд╕реА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЯрд╛рдЗрд▓ рдХреЗ рд╕рдордиреНрд╡рдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:


 var position: CGPoint { let x = CGFloat(self.x) let y = CGFloat(self.y) let offset: CGFloat = pow(2, CGFloat(self.z - 1)) return CGPoint(x: kTileLength * ( -offset + x ), y: kTileLength * ( offset - y - 1 )) } var center: CGPoint { return self.position + CGPoint(x: kTileLength, y: kTileLength) * 0.5 } 

рд╕реНрдерд╛рди рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: рдЕрдХреНрд╖рд╛рдВрд╢ / рджреЗрд╢рд╛рдВрддрд░ = 0, рдЬреЛ рд╕рд┐рд░реНрдл "рджреБрдирд┐рдпрд╛" рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рд╣реИред


рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХрд╛ рдЕрдХреНрд╖рд╛рдВрд╢ / рджреЗрд╢рд╛рдВрддрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣рдорд╛рд░реА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ:


 extension CLLocationCoordinate2D { //     ( -1 < TileLocation < 1 ) func tileLocation() -> CGPoint { var siny = sin(self.latitude * .pi / 180) siny = min(max(siny, -1), 1) let y = CGFloat(log( ( 1 + siny ) / ( 1 - siny ))) return CGPoint( x: kTileLength * ( 0.5 + CGFloat(self.longitude) / 360 ), y: kTileLength * ( 0.5 - y / ( 4 * .pi ) ) ) } //       zoomLevel func location(for z: Int) -> CGPoint { let tile = self.tileLocation() let zoom: CGFloat = pow(2, CGFloat(z)) let offset = kTileLength * 0.5 return CGPoint( x: (tile.x - offset ) * zoom, y: (-tile.y + offset) * zoom ) } } 

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



рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░реИрдЦрд┐рдХ рдЬрд╝реВрдо рдХреЛ рдПрдХ рдШрд╛рддреАрдп рдореЗрдВ рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЬрд╝реВрдо 1 <= z <= 18 рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ 2 ^ z рдЬреИрд╕реЗ рдорд╛рдирдЪрд┐рддреНрд░ рддрд░рд╛рдЬреВред


рдЯрд╛рдЗрд▓реНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдХреЗ рдЪрд┐рдХрдирд╛ рдЬрд╝реВрдо рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЯрд╛рдЗрд▓реЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдмреАрдЪ рдореЗрдВ рд╕рд┐рд▓реЗ рд╣реБрдИ рд╣реИрдВ: рдЕрд░реНрдерд╛рдд, рд╕реНрддрд░ 1 рдЯрд╛рдЗрд▓ 1.5 рдХреЗ рдЬрд╝реВрдо рдХреЗ рд╕рд╛рде 4 рд╕реНрддрд░ 2 рдЯрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЬрд╛рддреА рд╣реИред


SpriteKit рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдПрдХ рдлреНрд▓реЛрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред Z = 18 рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ (-33 554 432/33 554 432) рдХрд╛ рдкреНрд░рд╕рд╛рд░ рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рдлреНрд▓реЛрдЯ рдХреА рд╕рдЯреАрдХрддрд╛ 7 рдмрд┐рдЯреНрд╕ рд╣реИред рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 30 рдкреАрдЯреА рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИред рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рдмреАрдЪ "рдЕрдВрддрд░рд╛рд▓" рдХреА рдШрдЯрдирд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреГрд╢реНрдп рдЯрд╛рдЗрд▓ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ SKScene рдХреЗ рдХреЗрдВрджреНрд░ рдХреЗ рдХрд░реАрдм рд░рдЦрддреЗ рд╣реИрдВред


/ рдЖрдирдиреНрдж / рдЗрди рд╕рднреА рдЗрд╢рд╛рд░реЛрдВ рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдорд┐рд▓рд╛ред


рд░рд┐рд▓реАрдЬ рдХреА рддрд╛рд░реАрдЦ


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


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


рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ, рдХреИрд╢ рдФрд░ рдПрдХ рдЫреЛрдЯреЗ рдореЗрдореЛрд░реА рдлрд╝реБрдЯрдкреНрд░рд┐рдВрдЯ рдХреЛ рдареАрдХ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрд╛, рддрд╛рдХрд┐ рд╡реЙрдЪрдУрдПрд╕ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдорд╛рд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рди рдХрд░реЗред


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


рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рдФрд░ рдпреЛрдЬрдирд╛рдПрдВ


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


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


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


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

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


All Articles