
iOS 11
рдФрд░
iOS 12
рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛
Drag & Drop
рддрдВрддреНрд░ рд░реЗрдЦреАрдп рд░реВрдк рд╕реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдпрд╛ рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рднреАрддрд░ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдпрджреНрдпрдкрд┐ рдпрд╣ рддрдХрдиреАрдХ рд▓рдЧрднрдЧ 30 рд╕рд╛рд▓ рдкреБрд░рд╛рдиреА рд╣реИ, рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг
iOS
рдкрд░ "рд╕рдлрд▓рддрд╛" рддрдХрдиреАрдХ рдмрди рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЬрдм
iOS
рдкрд░ рдХреБрдЫ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ
multitouch
рдЖрдкрдХреЛ рдмрд╛рдХреА рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рд╕реЗ рд░реАрд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
iOS
рдПрдХ рд╕рд╛рде рдХрдИ рддрддреНрд╡реЛрдВ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдиреНрд╣реЗрдВ рдЪрдпрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкрд╣реБрдВрдЪ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдЖрдк рдкрд╣рд▓реА рд╡рд╕реНрддреБ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдХреБрдЫ рдФрд░ рдкрдХрдбрд╝ рд▓реЗрдВ - рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЖрдкрдХреА рдЙрдВрдЧрд▓реА рдХреЗ рдиреАрдЪреЗ "рдвреЗрд░" рдореЗрдВ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдлрд┐рд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдбреЙрдХ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рд╡рд╣рд╛рдВ рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЦреЛрд▓реЗрдВ рдФрд░ рддреАрд╕рд░реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдЪрд▓ рд░рд╣реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░реАрди рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд░рд┐рд╣рд╛ рдХрд┐рдП рдмрд┐рдирд╛, рдЙрдиреНрд╣реЗрдВ рдЦреБрд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдбрдВрдк рдХрд░реЗрдВред
iPad
рдкрд░
iPhone
рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рд╕рдВрднрд╡ рд╣реИ,
iOS
рдореЗрдВ
Drag & Drop
рдХрд╡рд░реЗрдЬ рдХреЗрд╡рд▓ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдврд╛рдВрдЪреЗ рддрдХ рд╕реАрдорд┐рдд рд╣реИред
рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдХрдкреНрд░рд┐рдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди (
Safary
,
Chrome
,
IbisPaint X
,
Mail
,
Photos
,
Files
, рдЖрджрд┐) рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ
Drag & Drop
рддрдВрддреНрд░ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
Apple
рдиреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ
Drag & Drop
рддрдВрддреНрд░ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдФрд░ рд╕рд╣рдЬ
API
рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ред
Drag & Drop
рдореИрдХреЗрдирд┐рдЬреНрдо, рдЬреЗрд╕реНрдЪрд░ рдХреА рддрд░рд╣ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ,
рдпреВрдЖрдИрд╡реАрд╡рд╛рдИ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░
рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдереЛрдбрд╝реЗ рдЗрд╢рд╛рд░реЛрдВ рдХреА рддрд░рд╣, рдЗрд╕рд▓рд┐рдП рдЖрдк
Drag & Drop
рдореИрдХреЗрдирд┐рдЬреНрдо рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЗрд╢рд╛рд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЗрд╢рд╛рд░реЛрдВ, рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди
UITableView рддрд╛рд▓рд┐рдХрд╛ рдпрд╛
UICollectionView рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ
API Drag & Drop
рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдЕрдореВрд░реНрддрддрд╛ рдХреЗ рдЙрдЪреНрдЪ рд╕реНрддрд░ рддрдХ рдЙрдард╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐
Collection View
рд╕рдВрдЧреНрд░рд╣ рд╣реА рдЖрдкрдХреЛ рд╕рдВрдЧреНрд░рд╣ рддрддреНрд╡ рдХреЗ
рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЦреАрдВрдЪреЗрдВ рдФрд░ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
Drag
ред рд╡рд╣ рдЬрд╛рдирддреА рд╣реИ рдХрд┐ рдЖрдкрдХреА рдЙрдВрдЧрд▓реА рдХрд╣рд╛рдВ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЙрд╕ рд╕рдВрдЧреНрд░рд╣ рддрддреНрд╡ рдХреЗ
рдЗрдВрдбреЗрдХреНрд╕рдкрд╛рде рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк "рдЦреАрдВрдЪ рд░рд╣реЗ рд╣реИрдВ" рдЗрд╕ рд╕рдордп
Drag
, рдпрд╛ рд╕рдВрдЧреНрд░рд╣ рддрддреНрд╡ рдХреЗ
рдЗрдВрдбреЗрдХреНрд╕рдкрд╛рде рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╣рд╛рдВ рдЖрдк "рдбреНрд░реЙрдкрд┐рдВрдЧ" рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреБрдЫ
Drop
ред рдЗрд╕рд▓рд┐рдП
Collection View
рд╕рдВрдЧреНрд░рд╣ рдЖрдкрдХреЛ
IndexPath рдХреЗ рд╕рд╛рде рдЖрдкреВрд░реНрддрд┐ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдпрдерд╛ рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд
UIView рдХреЗ рд▓рд┐рдП
API Drag & Drop
рдХреЗ рд╕рдорд╛рди рд╣реИред
iOS
рдкрд░
Drag & Drop
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ 4 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрд░рдг рд╣реИрдВ:
рд▓рд┐рдлреНрдЯ (рдЙрдард╛рдиреЗ)
рд▓рд┐рдлреНрдЯ (рдЙрдард╛рдирд╛) - рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ
рд▓рдВрдмрд╛ рдкреНрд░реЗрд╕ рдЗрд╢рд╛рд░реЗ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЙрд╕ рддрддреНрд╡ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдЬреЛ "рдЦреАрдВрдЪреЗрдВ рдФрд░ рдЧрд┐рд░рд╛рдПрдЧрд╛ред" рдЗрд╕ рд╕рдордп, рд╕рдВрдХреЗрддрд┐рдд рддрддреНрд╡ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣рд▓реНрдХрд╛ рддрдерд╛рдХрдерд┐рдд "
lift preview
" рдмрдирддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреА рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдХреЛ рдЦреАрдВрдЪрдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред

рдЦреАрдВрдЪреЗрдВ (рдЦреАрдВрдЪреЗрдВ рдФрд░ рдЫреЛрдбрд╝реЗрдВ)
рдЦреАрдВрдЪреЗрдВ (рдЦреАрдВрдЪреЗрдВ рдФрд░ рдЫреЛрдбрд╝реЗрдВ) - рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдХреНрд░реАрди рдХреА рд╕рддрд╣ рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди, рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП "
lift preview
" рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдПрдХ рд╣рд░рд╛ "+" рдкреНрд▓рд╕ рдЪрд┐рд╣реНрди рдпрд╛ рдЕрдиреНрдп рдЪрд┐рд╣реНрди рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ) ...

... рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреА рднреА рдЕрдиреБрдорддрд┐ рд╣реИ: рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди "рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк" рд╕рддреНрд░ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

рдбреНрд░реЙрдк (рдЫреЛрдбрд╝рдиреЗ)
рдбреНрд░реЙрдк рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдЙрдВрдЧрд▓реА рдЙрдард╛рддрд╛ рд╣реИред рдЗрд╕ рд╕рдордп, рджреЛ рдЪреАрдЬреЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ: рдпрд╛ рддреЛ
Drag
рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдпрд╛
Drop
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЧрдВрддрд╡реНрдп рдкрд░ "рдЧрд┐рд░рд╛" рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░
рдпрджрд┐ рдбреНрд░реИрдЧ "
рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк" рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░рджреНрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ "
рдбреНрд░реЙрдк " рд░реАрд╕реЗрдЯ рд╣реЛ рдЧрдпрд╛, рддреЛ
рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ (рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░) рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ "рдбреНрд░реЙрдк рдкреЙрдЗрдВрдЯ" "рд╕реНрд░реЛрдд" рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рд╣рдо рдЖрдкрдХреЛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐
рд╕реНрдЯреИрдирдлреЛрд░реНрдб рдХреЗ рд╣реЛрдорд╡рд░реНрдХ рдХреЛрд░реНрд╕ CS193P рд╕реЗ рд▓реА рдЧрдИ рдЫрд╡рд┐ рдЧреИрд▓рд░реА рдбреЗрдореЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдиреЗ
iOS
рдРрдк рдореЗрдВ
Drag & Drop
рддрдВрддреНрд░ рдХреЛ рдХреИрд╕реЗ
рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдо
Collection View
рд╕реНрд╡рдпрдВ OUTSIDE рдХреЗ рд╕рд╛рде рд╕реНрд╡рдпрдВ рдХреЛ рднрд░рдиреЗ
Collection View
рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде, рд╕рд╛рде рд╣реА
Drag & Drop
рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ INSIDE рддрддреНрд╡реЛрдВ рдХреЛ рдкреБрдирд░реНрдЧрдард┐рдд рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ
Collection View
рдЕрдирд╛рд╡рд╢реНрдпрдХ рддрддреНрд╡реЛрдВ рдХреЛ "рдХрдЪрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ" рдореЗрдВ рдбрдВрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдХрд┐ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп
UIView рд╣реИ рдФрд░ рдЗрд╕реЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкреИрдирд▓ рдХреЗ рдПрдХ рдмрдЯрди рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо
Drag & Drop
рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реА рдЧреИрд▓рд░реА рдореЗрдВ рдПрдХрддреНрд░ рдХреА рдЧрдИ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рднреА рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
Notes
рдпрд╛
Notes
рдпрд╛
Mail
рдпрд╛ рдлреЛрдЯреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (
Photo
)ред
рд▓реЗрдХрд┐рди "рдЗрдореЗрдЬ рдЧреИрд▓рд░реА" рдбреЗрдореЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ
Drag & Drop
рддрдВрддреНрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЗрд╕рдХреЗ рдореБрдЦреНрдп рдШрдЯрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╣реБрдд рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред
"рдЫрд╡рд┐ рдЧреИрд▓рд░реА" рдбреЗрдореЛ рдЖрд╡реЗрджрди рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
рдЗрдореЗрдЬ рдЧреИрд▓рд░реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ (
UI
) рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдпрд╣ рдПрдХ "рд╕реНрдХреНрд░реАрди рд╕реНрдирд┐рдкреЗрдЯ" рд╣реИ рдЬреЛ
Image Gallery Collection View Controller
рдХреЛ
Navigation Controller
рдореЗрдВ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИ:

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдордзреНрдп рднрд╛рдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ
Image Gallery Collection View Controller
, рдЬреЛ рдХрд┐ рдЗрдореЗрдЬ рдЧреИрд▓рд░реА рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓
рд╡реЗрд░рд┐рдПрдВрдЯ рдЗрдореЗрдЬ рдЗрдореЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИред

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

рд╣рдорд╛рд░рд╛
ImageGalleryCollectionViewController рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:

рд╕реЗрд▓ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХрд╕реНрдЯрдо рд╕реЗрд▓ рдореЗрдВ рдПрдХ рдЫрд╡рд┐
рджреГрд╢реНрдп рдЫрд╡рд┐ рд╣реЛрддреА рд╣реИ
: UIImageView! рдФрд░
рд╕реНрдкрд┐рдирд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реВрдЪрдХ
: UIActivityIndicatorView! рдФрд░
UICollectionViewCell рд╡рд░реНрдЧ рдХреЗ рдХрд╕реНрдЯрдо
subclass
ImageCollectionViewCell рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ:
ImageCollectionViewCell рд╡рд░реНрдЧ рдХрд╛
Public API
рдЗрдореЗрдЬреБрд░рд▓ рдЗрдореЗрдЬ
рдпреВрдЖрд░рдПрд▓ рд╣реИ ред рдЬреИрд╕реЗ рд╣реА рд╣рдо рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░рд╛
UI
рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЛ рдЗрд╕
рдЗрдореЗрдЬреБрд░рд▓ рдкрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реЗрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдмрдХрд┐ рдбреЗрдЯрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ,
рд╕реНрдкрд┐рдирд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕рдВрдХреЗрддрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реИрдВред
рдореИрдВ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП
URL
рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рддрд░реНрдХ рдХреА
qos рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд╕рд╛рде рд╡реИрд╢реНрд╡рд┐рдХ рдХрддрд╛рд░
(qos: .userInitiated) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ
.userInitiated рдкрд░ рд╕реЗрдЯ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░ рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реВрдВ:

рдЬрдм рднреА рдЖрдк рдХрд┐рд╕реА рдХреНрд▓реЛрдЬрд░ рдХреЗ рдЕрдВрджрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣
imageView рдФрд░
imageURL рд╣реИ , рд╕рдВрдХрд▓рдХ рдЖрдкрдХреЛ рдЙрдирдХреЗ рд╕рд╛рдордиреЗ
рд╕реНрд╡рдпрдВ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ
ред рддрд╛рдХрд┐ рдЖрдк рдЦреБрдж рд╕реЗ рдкреВрдЫреЗрдВ: "рдХреНрдпрд╛ рдХреЛрдИ" рдореЗрдореЛрд░реА рд╕рд╛рдЗрдХреНрд▓рд┐рдХ рд▓рд┐рдВрдХ "рд╣реИ?" рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣рд╛рдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ "
memory cycle
" рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐
рд╕реНрд╡рдпрдВ рдХреЛ рдЗрд╕ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рдирд╣реАрдВ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐
Collection View
рдореЗрдВ
рдХреЛрд╢рд┐рдХрд╛рдПрдВ dequeueReusableCell рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд╣реИрдВред рд╣рд░ рдмрд╛рд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рд╕реЗрд▓ (рдирдпрд╛ рдпрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛) рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдЫрд╡рд┐ рдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЗрд╕ рд╕рдордп
рд╕реНрдкрд┐рдирд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕рдВрдХреЗрддрдХ рдХрд╛ "
рд╕реНрдкрд┐рдирд░ " рдХрддрд╛рдИ рд╣реИ)ред
рдЬреИрд╕реЗ рд╣реА рдбрд╛рдЙрдирд▓реЛрдб рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЫрд╡рд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЗрд╕ рд╕рдВрдЧреНрд░рд╣ рд╕реЗрд▓ рдХрд╛
UI
рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЫрд╡рд┐ рдХреЛ рд▓реЛрдб рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рд╣рдордиреЗ рдЬреЛ рд╕рдВрдЧреНрд░рд╣ рд╕реЗрд▓ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рд╣рдорд╛рд░реЗ
UI
рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рд╕реНрдХреНрд░реАрди рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдирдИ рдЫрд╡рд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдИ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕реНрдХреНрд░реАрди рдЫреЛрдбрд╝ рджреА рдЧрдИ рдЙрд╕реА рд╕реЗрд▓ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХ рдЕрдиреНрдп рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП, рдЬреЛ рдЬрд▓реНрджреА рд╕реЗ
UI
рд▓реЛрдб рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреА рд╣реИред рдЗрд╕ рд╕рдордп, рдЗрд╕ рд╕реЗрд▓ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд▓реЛрдб рдХреА рдЧрдИ рдЫрд╡рд┐ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреА рдФрд░ рд╕реНрдХреНрд░реАрди рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рдПрдЧреА, рдЬрд┐рд╕рд╕реЗ рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рдЖрдПрдЧрд╛ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдордп рдкрд░ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВред
рд╣рдо рд╕реНрдерд┐рддрд┐ рдХреЛ рдХреИрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ
GCD рддрдВрддреНрд░ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░, рд╣рдо рд╕реНрдХреНрд░реАрди рдХреЛ рдЫреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕реЗрд▓ рдХреА рдЫрд╡рд┐ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХреЛ рд░рджреНрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рд╣рдорд╛рд░рд╛
рдЗрдореЗрдЬ рдбреЗрдЯрд╛ рдбреЗрдЯрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ
рдЖрддрд╛ рд╣реИ, рддреЛ
URL
рдпреВрдЖрд░рдПрд▓ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдЬреЛ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдиреА рдФрд░ рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рддреА рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рд╣реИ рдЗрд╕ рд╕рдордп рдпрд╣ рд╕реЗрд▓, рдЕрд░реНрдерд╛рддреН
рдЗрдореЗрдЬреБрд░рд▓ ред рдпрджрд┐ рд╡реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо
UI
рд╕реЗрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЫрд╡рд┐ рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗ:

рдпрд╣ рдХреЛрдб
url == self.imageURL рдХреА рдмреЗрддреБрдХреА рд░реЗрдЦрд╛ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ, рдПрдХ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреИрд░-рдорд╛рдирдХ рдХрд▓реНрдкрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдорд▓реНрдЯреА-рдереНрд░реЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдХреБрдЫ рдЪреАрдЬреЗрдВ рдХреЛрдб рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдХреНрд░рдо рдореЗрдВ рд╣реЛрддреА рд╣реИрдВред
рдпрджрд┐ рдЫрд╡рд┐ рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛, рддреЛ рдПрдХ рдЫрд╡рд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ "рддреНрд░реБрдЯрд┐" рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдФрд░ "frown" рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдореЛрдЬреА рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рд╣рдорд╛рд░реЗ
Collection View
рдореЗрдВ рдмрд╕ рдЦрд╛рд▓реА рдЬрдЧрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИ:

рд╣рдо рдирд╣реАрдВ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдЫрд╡рд┐ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдЫрд╡рд┐ рдХреЗ
рдкрд╣рд▓реВ рдЕрдиреБрдкрд╛рдд рдХреЛ рджреЛрд╣рд░рд╛рдП, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрдореЛрдЬреА рдХреЗ рд╕рд╛рде рдкрд╛рда рдХреЛ рдмрдврд╝рд╛рдпрд╛ рдпрд╛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдо рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рддрдЯрд╕реНрде - рд╡рд░реНрдЧреАрдп рд╣реЛ, рдпрд╛рдиреА рдЗрд╕рдореЗрдВ 1.0 рдХреЗ рдХрд░реАрдм рдкрд╣рд▓реВ рдЕрдиреБрдкрд╛рдд рд╣реЛрдЧрд╛ред

рд╣рдореЗрдВ рдЗрд╕ рдЗрдЪреНрдЫрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ
Controller
рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╡рд╣ рдЕрдкрдиреЗ
рдЗрдореЗрдЬрдЧреИрд▓рд░реА рдореЙрдбрд▓ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд
рдЗрдВрдбреЗрдХреНрд╕рдкрде рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реВ рдЕрдиреБрдкрд╛рдд рдХреЛ рд╕рд╣реА
рдХрд░реЗ ред рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рдо рд╣реИ, рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдХрд╛ рдЪрдпрди рдХрд░реЗрдВрдЧреЗ -
рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреНрд▓реЛрдЬрд░
var closeAspectRatio рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП
: () (> - рд╢реВрдиреНрдп)? ред рдпрд╣
рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рддреЛ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:

рдХреНрд▓реЛрдЬрд░
changeAspectRatio рдмреБрд▓рд╛рддреЗ рд╕рдордп? () рдЧрд▓рдд рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЕрдм рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐ рдЬреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдЧрд▓рдд рдЫрд╡рд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛ рдмрдВрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдо рдЕрдкрдиреЗ
Controller
рдореЗрдВ
cellForItemAt рдореЗрдердб рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ:

рд╡рд┐рд╡рд░рдг
рдпрд╣рд╛рдБ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рд╕рд╣реА
рдкрд╣рд▓реВ рдХреЗ рд╕рд╛рде рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
UICollectionViewDelegateFlowLayout рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ
sizeForItemAt рд╡рд┐рдзрд┐ рдХрд╛
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ :

рд╣рдорд╛рд░реЗ
UI
рдкрд░,
Collection View
рдЫрд╡рд┐
Collection View
рдЕрд▓рд╛рд╡рд╛
UI
рд╣рдордиреЗ рдПрдХ рдХрд╕реНрдЯрдо
Bar Button
рд╕рд╛рде рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкреИрдирд▓ рдкрд░ рдПрдХ
Bar Button
рд░рдЦрд╛ рдЬрд┐рд╕рдореЗрдВ рдПрдХ
рд╕рдмрд╡реНрдпреВ рдХреЗ рд░реВрдк рдореЗрдВ "рдХрдЪрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ"

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

рдореИрдВрдиреЗ
рдЧрд╛рд░рдмреЗрдЬ рд╡реНрдпреВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рд░рджрд░реНрд╢реА рдкреГрд╖реНрдарднреВрдорд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рд╣реИ:

рдХрдЪрд░реЗ рдХрд╛ рдЖрдХрд╛рд░ рдФрд░ рдЙрд╕рдХреА рд╕реНрдерд┐рддрд┐
UIView рд╡рд░реНрдЧ рдХреЗ
рд▓реЗрдЖрдЙрдЯрд╕реБрдмреНрдпреВ () рд╡рд┐рдзрд┐ рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рдПрдЧреА,
рдЬреЛ рджрд┐рдП рдЧрдП
UIView рдХреА
рд╕реАрдорд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣реИ:

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

рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ
Drag & Drop
рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЕрдкрдиреЗ
Collection View
рдХреЛ "рдбреНрд░реИрдЧ" рдХрд░рдиреЗ Collection View
рдХреНрд╖рдорддрд╛ рдХреЗ Collection View
рджреЗрдЦреЗрдВрдЧреЗ, рдЗрд╕реЗ UIImage рдЗрдореЗрдЬ рд╕реЗ рдмрд╛рд╣реНрдп рдФрд░ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ Drag
ред - рддрдм рд╣рдо рдЕрдкрдиреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ
Collection View
рдХреЛ "рдбреНрд░реИрдЧ" рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ, рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рдпрд╛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ UIImage рд╕реЗ Drag
, - рд╣рдо рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдг рдмрдЯрди рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рдХрдЪрд░рд╛ рд╡реНрдпреВ рднреА рд╕рд┐рдЦрд╛рдПрдВрдЧреЗ, рд╕реНрдерд╛рдиреАрдп
Collection View
рд╕реЗ рдЦреАрдВрдЪреА рдЧрдИ UIImage рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ Collection View
рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛ рджреЗрдВ
рдпрджрд┐ рдЖрдк рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ "рдЗрдореЗрдЬ рдЧреИрд▓рд░реА" рдбреЗрдореЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ
Drag & Drop
рддрдВрддреНрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣
ImageGallery_finished
рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ
Github
рдкрд░ рд╕реНрдерд┐рдд рд╣реИред
рдЖрдкрдХреЗ
Collection View
рдореЗрдВ
Drag & Drop
рддрдВрддреНрд░ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рджреЛ рдирдП рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдкрд╣рд▓реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рддрд░реАрдХреЗ
, DragDelegate рдХреЛ рдбреНрд░реИрдЧ рдФрд░ рдбреНрд░реЙрдк
рдбреНрд░реИрдЧреНрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдФрд░ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рджреВрд╕рд░реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рддрд░реАрдХреЗ,
рдбреНрд░реЙрдкрдбреЗрд▓рдЧреЗрдЯ , рдбреНрд░реИрдЧ рдХреЗ рдбреНрд░реЙрдк рдФрд░ рдбреНрд░реЙрдк рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░, рдореВрд▓ рд░реВрдк рд╕реЗ,
Drop
рд░реАрд╕реЗрдЯ рд╣реЛрдиреЗ рдкрд░ рдбреЗрдЯрд╛
Data transfer
рдФрд░ рдХрд╕реНрдЯрдо рдПрдиреАрдореЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЕрдиреНрдп рд╕рдорд╛рди рдЪреАрдЬреЗрдВ рднреАред
рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпреЗ рджреЛрдиреЛрдВ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВред рдЖрдк рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ "рдбреНрд░реИрдЧ"
Drag
рдпрд╛ рдХреЗрд╡рд▓ "рдбреНрд░реЙрдк"
Drop
, рд▓реЗрдХрд┐рди рдЖрдк рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рджреЛрдиреЛрдВ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░
Drag
рдФрд░ "рдбреНрд░реЙрдк"
Drop
, рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЦреЛрд▓рддрд╛ рд╣реИред рдЕрдкрдиреЗ
Collection View
рдореЗрдВ рдЖрдЗрдЯрдореЛрдВ рдХреЛ рдкреБрдирдГ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рдХреЛ
Drag & Drop
ред
рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк Drag
рдПрд▓рд┐рдореЗрдВрдЯреНрд╕ рдлреНрд░реЙрдо Collection View
Drag
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдФрд░ рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рд╡рд╣ рд╣реИ рдЦреБрдж рдХреЛ,
рд╕реНрд╡рдпрдВ рдХреЛ рдПрдХ
рдбреНрд░реИрдЧрдбреЗрд▓реА рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рдирд╛:

рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ,
ImageGalleryCollectionViewController рд╡рд░реНрдЧ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░
, рдЖрдкрдХреЛ "рд╣рд╛рдВ" рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рдо
UICollectionViewDragDelegate рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:

рдЬреИрд╕реЗ рд╣реА рд╣рдо рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ "рд╢рд┐рдХрд╛рдпрдд рдХрд░рдирд╛" рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рд╣рдо рд▓рд╛рд▓ рдШреЗрд░реЗ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╕реЗ рдкреВрдЫрд╛ рдЬрд╛рддрд╛ рд╣реИ: "рдХреНрдпрд╛ рдЖрдк
UICollectionViewDragDelegate рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЖрд╡рд╢реНрдпрдХ рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?"
рдореИрдВ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реВрдВ: "рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ!" рдФрд░
Fix
рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:
UICollectionViewDragDelegate рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдЖрд╡рд╢реНрдпрдХ рддрд░реАрдХрд╛
рдЖрдЗрдЯрдордлреЙрд░рдмрд╛рдЗрдирд┐рдВрдЧ рд╡рд┐рдзрд┐ рд╣реИ, рдЬреЛ
Drag
рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдмрддрд╛рдПрдЧреА рдХрд┐ рд╣рдо "рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк" рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрдЧреНрд░рд╣
рдХрдХреНрд╖ рдореЗрдВ рдПрдХ рд╕реЗрд▓ "рдЦреАрдВрдЪреЗрдВ" (
Dragging
) рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рддреЛ
рдЖрдЗрдЯрдордлреЙрд░рдмрд┐рдирд┐рдВрдЧ рд╡рд┐рдзрд┐
рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ,
Collection View
рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ
indexPath рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдХреМрди рд╕рд╛ рддрддреНрд╡, рдХреМрди рд╕рд╛
рдЗрдВрдбреЗрдХреНрд╕рдкрд╛рде , рд╣рдо "рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк" рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ
рд╕рддреНрд░ рдФрд░
indexPath рдХреЗ рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ,
рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдбреНрд░реИрдЧ рдФрд░ рдбреНрд░реИрдЧ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИред
рдпрджрд┐ "рдбреНрд░реИрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп" рддрддреНрд╡реЛрдВ рдХреА рд╕рд░рдгреА
[UIDragItems] рд╡рд╛рдкрд╕ рдЖ рдЧрдИ рд╣реИ, рддреЛ рдбреНрд░реИрдЧ рдХреА "рдбреНрд░реИрдЧ"
Drag
рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ; рдпрджрд┐ рдЦрд╛рд▓реА рдПрд░реЗ
[] рдХреЛ рд▓реМрдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдбреНрд░реИрдЧ рдХреЗ "рдбреНрд░реИрдЧ"
Drag
рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛
Drag
рд╣реИред
рдореИрдВ
indexPath рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯрд╛
рдирд┐рдЬреА рдбреНрд░реИрдЧрдЗрдореЗрдЯреНрд╕ (at: indexPath) рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдКрдВрдЧрд╛ ред рдпрд╣ рд╕рд░рдгреА
[UIDragItem] рд╣рдореЗрдВ рджреЗрддрд╛
рд╣реИ ред

рдбреНрд░реИрдЧ-рдПрдВрдб-рдбреНрд░реЙрдк
UIDragItem рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ ?
рдЙрд╕рдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕реЗ
рдЖрдЗрдЯрдордкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдЗрдЯрдордкреНрд░реЙрдЗрдбрд░ рд╕рд┐рд░реНрдл рдПрдХ рдЪреАрдЬ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕реЗ рдбреНрд░реИрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣ рдкреВрдЫрдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИ: "рдПрдХ
UIDragItem рддрддреНрд╡ рдХреЗ" рдЦреАрдВрдЪрдиреЗ рдФрд░ рдЫреЛрдбрд╝рдиреЗ "рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмрд╕ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ?" рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕ рдЖрдЗрдЯрдо рдХреЛ рдЖрдк рдЦреАрдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕рдореЗрдВ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбреЗрдЯрд╛ рдмрдирд╛рдирд╛ рдПрдХ рдорд╣рдВрдЧрд╛ рдСрдкрд░реЗрд╢рди рд╣реИред рдпрд╣ рдПрдХ рдЫрд╡рд┐
рдЪрд┐рддреНрд░ рдпрд╛ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдмрдбрд╝реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐
Drag & Drop
рдСрдкрд░реЗрд╢рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИред рдЬрдм рдЖрдк рдбреНрд░реИрдЧ рдХреЛ рдбреНрд░реИрдЧ рдФрд░ рдбреНрд░реЙрдк рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╣рд▓реНрдХреА рд╡рд╕реНрддреБ (
lift preview
) рд╣реИ, рдЖрдк рдЗрд╕реЗ рд╣рд░ рдЬрдЧрд╣ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ "рдбреНрд░реИрдЧ" рдХреЗ рджреМрд░рд╛рди рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ рд╣реА рдЖрдк "рдбреНрд░реЙрдк" рдХрд╣реАрдВ рдЕрдкрдиреА рд╡рд╕реНрддреБ
рдЫреЛрдбрд╝рддреЗ рд╣реИрдВ , рддреЛ, рдПрдХ
рдЖрдЗрдЯрдордкреНрд░реЛрд╡рд╛рдЗрдбрд░ рд╣реЛрдиреЗ рдХреЗ
рдирд╛рддреЗ , рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреА "рдШрд╕реАрдЯрд╛" рдФрд░ "рдлреЗрдВрдХреА рдЧрдИ" рд╡рд╕реНрддреБ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА рдпрд╣ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╣реЛред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдХрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд
рдЖрдЗрдЯрдордкреЙрд╡рд░реНрд╕ рд╣реИрдВ ред рдпреЗ рдРрд╕реА рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
iOS
рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВ рдФрд░ рдЬреЛ
рдЖрдЗрдЯрдордкреЙрдЗрдбрд░ рд╣реИрдВ , рдЬреИрд╕реЗ рдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдПрдирдПрд╕рдПрд╕рдЯреНрд░рд┐рдВрдЧ , рдЬреЛ рдЖрдкрдХреЛ рдлрд╝реЙрдиреНрдЯ рдХреЗ рдмрд┐рдирд╛ рдкрд╛рда рдХреЛ рдЦреАрдВрдЪрдиреЗ рдФрд░ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдПрдХ
UIImage рдЫрд╡рд┐ рд╣реИред рдЖрдк рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░
UIImages рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЦреАрдВрдЪ рдФрд░ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред
NSURL рд╡рд░реНрдЧ, рдЬреЛ рдмрд┐рд▓реНрдХреБрд▓ рдЕрджреНрднреБрдд рд╣реИред рдЖрдк
Web
рдкреЗрдЬ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ,
URL
рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ "рдбреНрд░реЙрдк" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд▓реЗрдЦ рдпрд╛ рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдПрдХ
URL
рд▓рд┐рдВрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рдбреЗрдореЛ рдореЗрдВ рд╣реЛрдЧрд╛ред рдпреЗ
UIColor ,
MKMapItem рдирдХреНрд╢рд╛
рддрддреНрд╡ , рдкрддрд╛ рдкреБрд╕реНрддрд┐рдХрд╛ рд╕реЗ
рд╕реАрдПрдирд╕реА рдХрд╛рдВрдЯреИрдХреНрдЯ рдХреЗ рд░рдВрдЧ рд╡рд░реНрдЧ рд╣реИрдВ, рдЖрдк рдмрд╣реБрдд рд╕реА рдЪреАрдЬреЛрдВ рдХрд╛ рдЪрдпрди рдФрд░ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА
рдЖрдЗрдЯрдо рд╣реИрдВ ред
рд╣рдо
UIImage рдЫрд╡рд┐ рдХреЛ "рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк" рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдпрд╣
IndexPath рдХреЗ рд╕рд╛рде
Collection View
рд╕реЗрд▓ рд╕реЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рдЬреЛ рдореБрдЭреЗ рд╕реЗрд▓
рд╕реЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рд╕реЗ
Outlet
рдЗрдореЗрдЬ рд╡реНрдпреВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреА рдЗрдореЗрдЬ
рдЗрдореЗрдЬ рдкреНрд░рд╛рдкреНрдд
рдХрд░реЗрдВ ред
рдЖрдЗрдП рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдХреЛрдб рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╡реНрдпрдХреНрдд рдХрд░рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЕрдкрдиреЗ
Collection View
рдХреЛ рдЗрд╕
IndexPath рдХреЗ рдЕрдиреБрд░реВрдк
рдЖрдЗрдЯрдо рддрддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реВрдВред

Collection View
рд▓рд┐рдП
cellForItem (at: IndexPath) рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рджреГрд╢реНрдпрдорд╛рди рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╕реНрдХреНрд░реАрди рдкрд░
Drag
рд╕рдВрдЧреНрд░рд╣ рддрддреНрд╡ рдХреЛ "рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк" рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред
рддреЛ, рдореБрдЭреЗ рдПрдХ "рдбреНрд░реИрдЧреЗрдмрд▓" рд╕реЗрд▓
рд╕реЗрд▓ рдорд┐рд▓рд╛ ред
рдЕрдЧрд▓рд╛, рдореИрдВ рдСрдкрд░реЗрдЯрд░ рдХреЗ
рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ
? рдЗрд╕ рд╕реЗрд▓ рдореЗрдВ рддрд╛рдХрд┐ рдореЗрд░реЗ рдХрд╕реНрдЯрдо
subclass
рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИред рдФрд░ рдЕрдЧрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдПрдХ
Outlet
рдЫрд╡рд┐ рджреГрд╢реНрдп рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдореИрдВ рдЗрд╕рдХреА рдЫрд╡рд┐
рдЫрд╡рд┐ рд▓реЗрддрд╛ рд╣реВрдВред рдореИрдВ рд╕рд┐рд░реНрдл рдЗрд╕
indexPath рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐
рдЫрд╡рд┐ рдХреЛ "рдХреИрдкреНрдЪрд░" рдХрд░рддрд╛ рд╣реВрдВред
рдЕрдм рдЬрдмрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрдореЗрдЬ
рдЗрдореЗрдЬ рд╣реИ , рдореБрдЭреЗ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдЗрди
рдпреВрдЖрдИрдбреНрд░рд╛рдИрдЧреЗрдЯреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдПрдХ
рдЗрдореЗрдЬрдкреНрд░реЛрдбрд╛рдЗрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ
рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рд╣реИ , рдпрд╛рдиреА рд╡рд╣ рдЪреАрдЬ рдЬреЛ рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдореБрд╣реИрдпрд╛ рдХрд░рд╛рддреА рд╣реИред
рдореИрдВ
UIDragItem рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
рдбреНрд░реИрдЧ рдЗрдЯ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬреЛ
рдЖрдЗрдЯрдордкреЙрдЗрдбрд░ рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ:

рдлрд┐рд░ рд╣рдо
NSItemProvider рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЫрд╡рд┐
рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдПрдХ
рдЖрдЗрдЯрдордкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдмрдирд╛рддреЗ рд╣реИрдВред
NSItemProvider рдХреЗ рд▓рд┐рдП рдХрдИ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрджреНрднреБрдд рд╣реИ -
NSItemProvider (рдСрдмреНрдЬреЗрдХреНрдЯ: NSItemProviderWriting) :

рдЖрдк рдмрд╕ рдЗрд╕
NSItemProvider рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░
рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ
рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐
рдЖрдЗрдЯрдордкреНрд░реЛрдЗрдбрд░ рдХреЛ рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ
рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЙрд╕ рдЫрд╡рд┐ рдХреЛ
рдЫрд╡рд┐ рджреЗрддрд╛ рд╣реВрдВ рдЬреЛ рдореБрдЭреЗ рд╕реЗрд▓
рд╕реЗрд▓ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рдерд╛ рдФрд░
рдпреВрдЖрдИрдЖрдИрдПрдордПрдЬ рдХреЗ рд▓рд┐рдП
рдЖрдЗрдЯрдордкреНрд░реЙрдЗрдбрд░ рдорд┐рд▓рд╛ред
рдФрд░ рд╡рд╣ рд╕рдм рд╣реИред рд╣рдордиреЗ
DragItem рдмрдирд╛рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВ рд╡рд╛рдкрд╕ рдЖ dragItem , рдореИрдВ рдПрдХ рдФрд░ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрд░реНрдерд╛рддреН, рдЪрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ localObject рдХреЗ рд▓рд┐рдП dragItem , рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЪрд┐рддреНрд░ рдХреЗ рдмрд░рд╛рдмрд░ рдЫрд╡рд┐ ред
рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?
рдпрджрд┐ рдЖрдк Drag
рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ "рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк" рдХрд░рддреЗ рд╣реИрдВ , рдЬреЛ рдХрд┐ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдЗрдЯрдордкреНрд░реЙрдЗрдбрд░ рд╕реЗ рдЬреБрдбрд╝реЗ рдЗрд╕ рд╕рднреА рдХреЛрдб рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ ред рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рдмрд╕ рд▓реЛрдХрд▓ рдСрдмрдЬреЗрдХреНрдЯ рд▓реЗрдиреЗ рдФрд░ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╕реНрдерд╛рдиреАрдп "рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк" рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ "рд╢реЙрд░реНрдЯ рд╕рд░реНрдХрд┐рдЯ" рд╣реИ Drag
редрд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб Drag
рд╣рдорд╛рд░реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдмрд╛рд╣рд░ "рдбреНрд░реИрдЧрд┐рдВрдЧ" Collection View
рдХрд░рдиреЗ рдкрд░ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ , рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо Drag
рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ "рдбреНрд░реИрдЧ" рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд▓реЛрдХрд▓рдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдЕрдЧрд▓рд╛, рдореИрдВ рдПрдХ рдбреНрд░реИрдЧ рдЗрдЯрд┐рдо рддрддреНрд╡ рдХрд╛ рдПрдХ рд╕рд░рдгреА рд▓реМрдЯрд╛рддрд╛ рд╣реВрдВ редрд╡реИрд╕реЗ, рдЕрдЧрд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдореБрдЭреЗ рдЗрд╕ рд╕реЗрд▓ рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫрд╡рд┐ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИ , рддреЛ рдореИрдВ рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рд▓реМрдЯрд╛рддрд╛ рд╣реВрдВ [] , рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ "рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк" рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕реНрдерд╛рдиреАрдп рд╡рд╕реНрддреБ рдХреЗ рдЕрд▓рд╛рд╡рд╛ localObject , рдЖрдк рд╕реНрдерд╛рдиреАрдп рд╕рдВрджрд░реНрдн рдпрд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ localContext рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рддреНрд░ рд╕рддреНрд░ ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ collectionView рдФрд░ рдпрд╣ рд╣рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ: рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж "рдЦреАрдВрдЪреЗрдВ рдФрд░ рдбреНрд░реЙрдк" , рдЖрдк рдФрд░ рдЕрдзрд┐рдХ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЖрдЗрдЯрдо рдЗрд╕ "рдЦреАрдВрдЪреЗрдВ рдФрд░ рдбреНрд░реЙрдк" рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд░рд╣реА рдирд▓ рдЙрди рдкрд░ред рдирддреАрдЬрддрди, рдЖрдк рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВDrag

Drag

Drag
Drag
рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрдИ рдЖрдЗрдЯрдоред рдФрд░ рдпрд╣ рдПрдХ рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ , UICollectionViewDragDelegate , рдЖрдЗрдЯрдореНрд╕ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╣реА рд╕рдорд╛рди рд╣реИрдлреЛрд░рдЧреЗрдирд┐рдВрдЧ рд╡рд┐рдзрд┐ , рдЖрдЗрдЯрдордлреЙрд░рдПрдбрд┐рдВрдЧрдЯрд┐рдВрдЧ рдирд╛рдордХ рдПрдХ рд╡рд┐рдзрд┐ ред рд╡рд┐рдзрд┐ itemsForAddingTo рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд╕реА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рд╣реИ itemsForVeginning , рдФрд░ рд░рд┐рдЯрд░реНрди рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рд╣реА рдмрд╛рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рднреА рд╣рдореЗрдВ рджреЗрддрд╛ рд╣реИ indexPath "рдЦреАрдВрдЪреЗрдВ рдФрд░ рдбреНрд░реЙрдк" рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреНрдпрд╛ "tapnul" рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░ рдХреА Drag
рд╣реИ, рдФрд░ рдореИрдВ рдХрд╛рдлреА рддрд╕реНрд╡реАрд░ рдорд┐рд▓ рдЫрд╡рд┐ рд╕реЗрд▓ рдХреА, рдкрд░ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ "рдЯреИрдк" рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рд▓реМрдЯреЗрдВ [] itemsForAddingTo рд╡рд┐рдзрд┐ рд╕реЗрдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдирд▓ рдХрд╛ рдЗрд╢рд╛рд░рд╛ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЕрд░реНрдерд╛рддреН, рдЗрд╕ рд╕реЗрд▓ рд╕реЗрд▓ рдХреА рдкрд╕рдВрдж рдХреЗ рд░реВрдк рдореЗрдВ редрдФрд░ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдбреНрд░реИрдЧ рдФрд░ рдбреНрд░реЙрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ Drag
редрд╣рдордиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛редрдореИрдВ "рд╡реЗрдирд┐рд╕" рдЫрд╡рд┐ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕реЗ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рджрдмрд╛рдП рд░рдЦреЗрдВ рдФрд░ рд╣рд┐рд▓рдирд╛ рд╢реБрд░реВ
рдХрд░ рджреЗрдВ ... рдФрд░ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдЫрд╡рд┐ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ Photos
, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк "рдбреНрд░реИрдЧреЗрдмрд▓" рдЫрд╡рд┐ рдХреЗ рдКрдкрд░реА рдмрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рд╣рд░реЗ рд░рдВрдЧ рдХрд╛ рдкреНрд▓рд╕ рдЪрд┐рд╣реНрди "+" рджреЗрдЦрддреЗ рд╣реИрдВред рдореИрдВ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдПрдХ рдФрд░ рдЖрд░реНрдЯрд┐рдХрд╛ рдЫрд╡рд┐ рдкрд░ рдПрдХ рдЯреИрдк рдЗрд╢рд╛рд░рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ Collection View
...
... рдФрд░ рдЕрдм рд╣рдо рджреЛ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ Photos
:
рдЪреВрдВрдХрд┐ Photos
рддрдВрддреНрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИDrag & Drop
рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИредрдЗрд╕рд▓рд┐рдП, рдЧреИрд▓рд░реА рдЫрд╡рд┐ рдХреЗ "рдбреНрд░реИрдЧрд┐рдВрдЧ" Drag
рдФрд░ "рдбрдВрдкрд┐рдВрдЧ" Drop
рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рдЫрд╡рд┐ рдХреЛ рдПрдХ рд╕рд░рдгреА [UIDragItem] рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ ред рдпрд╣ рддрдВрддреНрд░ рдХреА рдХрдИ рдорд╣рд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ Drag & Drop
- рдЗрд╕реЗ рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИредDrop
рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд░реАрд╕реЗрдЯ рдХрд░реЗрдВCollection View
рдЕрдм рд╣рдореЗрдВ Drop
рдЕрдкрдиреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдПрдХ рднрд╛рдЧ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ Collection View
рддрд╛рдХрд┐ рд╣рдо Drop
рдЗрд╕ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХрд┐рд╕реА рднреА "рдШрд╕реАрдЯ" рдЧрдИ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ "рдбрдВрдк" рдХрд░ рд╕рдХреЗрдВ ред рдПрдХ "рдбреНрд░реИрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп" рдЫрд╡рд┐ OUTSIDE рд╕реЗ "рдЖ рд╕рдХрддреА рд╣реИ", рдпрд╛ рд╕реАрдзреЗ рдЗрд╕ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИредрдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╣реА рдмрд╛рдд рдХреЛ рд╕реМрдВрдкрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдХрд░рддреЗ dragDelegate , рдпрд╛рдиреА рдмрдирд╛рдиреЗ рдХреЗ рдЕрдкрдиреЗ рдЖрдк рдХреЛ, рдЖрддреНрдо , рдкреНрд░рддрд┐рдирд┐рдзрд┐ dropDelegate рдХреА рд╡рд┐рдзрд┐ рдореЗрдВ viewDidLoad :
рдлрд┐рд░ рд╕реЗ, рд╣рдо рдЕрдкрдиреЗ рд╡рд░реНрдЧ рдХреЗ рд╢реАрд░реНрд╖ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрдврд╝рд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ ImageGalleryCollectionViewController рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди UICollectionViewDropDelegate :
рдЬреИрд╕реЗ рд╣реА рд╣рдордиреЗ рдЕрдкрдирд╛ рдирдпрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЬреЛрдбрд╝рд╛, рдХрдВрдкрд╛рдЗрд▓рд░ рдлрд┐рд░ рд╕реЗ "рд╢рд┐рдХрд╛рдпрдд" рдХрд░рдиреЗ рд▓рдЧрд╛ рдХрд┐ рд╣рдордиреЗ рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рд╣рдо рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ Fix
рдФрд░ рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЖрд╡рд╢реНрдпрдХ рддрд░реАрдХреЗ рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ рдкреНрд░рдХрдЯ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП :
рд╣рдореЗрдВ рдпрд╣ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ "рд░реАрд╕реЗрдЯ" рдирд╣реАрдВ рд╣реЛрдЧрд╛ Drop
ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рдкрд┐рдЫрд▓реЗ рджрд┐рдиреЛрдВ рдкрд░рдлреЙрд░реНрдордбреЙрдк рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ , рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдЕрдиреНрдп рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд╢рдВрд╕рд┐рдд Apple
рддрд░реАрдХреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ Drop
рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рдпрд╣ рд╣реИрд╣реИрдВрдбрд▓ рдФрд░ рдбреНрд░реЙрдкрдбреЗрд╕рдирдбреАрдбрдЕрдкрдбреЗрдЯ :
рдпрджрд┐ рд╣рдо рдЗрди рджреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╣рд░реЗ рд░рдВрдЧ рдХреЗ рдкреНрд▓рд╕ рдЪрд┐рд╣реНрди "+" рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рд╣рдо рдЕрдкрдиреЗ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ OUTSIDE рд╕реЗ рдЪрд┐рддреНрд░ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ ollection View
, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реЗ рдЬреЛ рд╣рдо рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВ рдЙрд╕реЗ рдбрдВрдк рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗредрдЖрдЗрдП рд╣рдо canHandle рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ ред рдЖрдк рдХрд╛рд╣реИрдВрдбрд▓ рд╡рд┐рдзрд┐ рд╕рдВрд╕реНрдХрд░рдг , рдЬреЛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ ollection View
, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдзрд┐ ollection View
рдареАрдХ рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рдЬреЛ рдирд┐рдпрдорд┐рдд UIView рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╡рд┐рдзрд┐ рд╣реИ , рд╡рд╣рд╛рдБ рдХреЛрдИ IndexPath рдирд╣реАрдВ рд╣реИ , рд╣рдореЗрдВ рдмрд╕ рд╕рддреНрд░ рд╡рд╛рдкрд╕реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрд┐ рдореИрдВ рдЗрд╕ рд╕реАрдПрд▓ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ "рд░реАрд╕реЗрдЯ" рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдореЗрд░реЗ рд╕рдВрдХрд▓рди рдХреЗ рдкреАрдП ollection View
:
рд▓реЗрдХрд┐рди рдпрд╣ Drop
рдореЗрд░реЗ рд╕рдВрдЧреНрд░рд╣ Collection View
OUTSIDE рдореЗрдВ рдЫрд╡рд┐ рдХреЛ "рдбрдВрдк" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ ред"рд░реАрд╕реЗрдЯ" рдЕрдЧрд░ Drop
рдЫрд╡рд┐ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рднреАрддрд░ рд╣реЛрддрд╛ рд╣реИ Collection View
, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рддрддреНрд╡реЛрдВ рдХрд╛ рдкреБрдирд░реНрдЧрдарди рд╣реЛрдЧрд╛ рдЖрдЗрдЯрдо рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Drag & Drop
рддреЛ рдХреЗрд╡рд▓ рдПрдХ рдЫрд╡рд┐, рдПрдХ UIImage , рдФрд░ рд╡рд┐рдзрд┐ рдХреЗ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди canHandle рдКрдкрд░ рдврдВрдЧ рд╕реЗ рдХреА рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛редрд▓реЗрдХрд┐рди рдЕрдЧрд░ Drop
рдЫрд╡рд┐ рдХрд╛ "рдбрдВрдкрд┐рдВрдЧ" OUTSIDE рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдХреЗрд╡рд▓ "рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк" рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП Drag
рдЬреЛ рдЗрд╕ рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде-рд╕рд╛рде UIImage рдЫрд╡рд┐ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ URL
, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕реАрдзреЗ UIImage рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВрдореЙрдбрд▓ рдореЗрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореИрдВ рдХреЗрд╡рд▓ рдХреИрдирд╣реИрдВрдбрд▓ рд╡рд┐рдзрд┐ рдореЗрдВ рд╕рд╣реА рд╡рд╛рдкрд╕ рд▓реМрдЯреВрдВрдЧрд╛ рдпрджрд┐ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ : session.canLoadObjects (ofClass: NSURL.self) && session.canLoadObjects (ofClass: UIImage.self) :
рдореБрдЭреЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ "рд░реАрд╕реЗрдЯ" рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдмрд╛рд╣рд░ рдпрд╛ рдЕрдВрджрд░ред рдореИрдВ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░реВрдВрдЧрд╛ , рдЬрд┐рд╕рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдореИрдВ Drop
рд╕рддреНрд░ рд╕рддреНрд░ рдореЗрдВ рдЗрд╕рдХреЗ рд╕реНрдерд╛рдиреАрдп Drag
рд╕рддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реА рдЪреАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ ред рдЗрд╕ рд╕реНрдерд╛рдиреАрдп рдореЗрдВ Drag
рд╕рддреНрд░, рдмрд╛рд░реА рдореЗрдВ, рдПрдХ рд╕реНрдерд╛рдиреАрдп рд╕рдВрджрд░реНрдн рд╣реИ localContext редрдпрджрд┐ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ, рддреЛ рд╣рдо рдЗрд╕ рд╕реНрдерд╛рдиреАрдп рд╕рдВрджрд░реНрдн рдХреЛ рд╡рд┐рдзрд┐ рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВitemsForVeginning Drag
рдкреНрд░рддрд┐рдирд┐рдзрд┐ UICollectionViewDragDelegate :
рдореИрдВ рд╕реНрдерд╛рдиреАрдп рд╕рдВрджрд░реНрдн рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ localContext рдореЗрд░реЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП CollectionView ред рд╕рдЪ рд╣реИ, рд▓реЛрдХрд▓ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ TYPE рдХреЛрдИ рднреА рд╣реЛрдЧрд╛, рдФрд░ рдореБрдЭреЗрдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ TYPE Any рдХреА рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ? UICollectionView :
рд╕реНрдерд╛рдиреАрдп рд╕рдВрджрд░реНрдн рд╣реИрдВ (UICollectionView рд░реВрдк session.localDragSession .localContext ??) рдореЗрд░реЗ рд╕рдВрдЧреНрд░рд╣ рд╣реИ CollectionView , рд╡рд┐рд╕реНрддрд╛рд░ рдЪрд░ isself рд╣реИ рд╕рдЪрдФрд░ рдореЗрд░реЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рд╕реНрдерд╛рдиреАрдп "рд░реАрд╕реЗрдЯ" рд╣реИред рдпрджрд┐ рдЗрд╕ рд╕рдорд╛рдирддрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдХ "рд░реАрд╕реЗрдЯ" Drop
OUTSIDE рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ ред CanHandleрд╡рд┐рдзрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рд╣реИ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рдЗрд╕ рддрд░рд╣ рдХреЗ "рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк" рдХреЛ рдЕрдкрдиреЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ ред рдЕрдиреНрдпрдерд╛, рдЖрдЧреЗ, рдпрд╣ "рдбрдВрдкрд┐рдВрдЧ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ ред рд╣рдо "рд░реАрд╕реЗрдЯ" рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ , рдпрд╣ рдЕрднреА рднреА рдкрд▓ рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдХреНрд░реАрди рдмрдВрдж рдЕрдкрдиреА рдЕрдВрдЧреБрд▓рд┐рдпреЛрдВ рдХреЛ рдЙрдард╛рдПрдВ рдФрд░ рдПрдХ рдЕрд╕рд▓реА "рд░реАрд╕реЗрдЯ" рд╡рд╣рд╛рдБ рд╣реЛ рдЬрд╛рдПрдЧрд╛ , рд╣рдо рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ dropSessionDidUpdate рдкреНрд░рддрд┐рдирд┐рдзрд┐ UICollectionViewDropDelegate рд╣рдорд╛рд░реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ UIDropProposal рд░реАрд╕реЗрдЯ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП редDrag
Collection View
Drop
Drop
Drop
iOS
Drop
рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ Drop
рд╡рд╛рдХреНрдп рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдСрдкрд░реЗрд╢рди рддрд░реНрдХ рдХреЗ рд▓рд┐рдП .copy рдпрд╛ .move рдпрд╛ .cancel рдпрд╛ .forbidden рдорд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ ред рдФрд░ рдпреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реЛрддреА рд╣реИрдВ рдЬрдм рд╣рдо рдПрдХ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ UIView рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВ ред рд▓реЗрдХрд┐рди рд╕рдВрдЧреНрд░рд╣ рд╡рд┐рд╢реЗрд╖ рдСрдлрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдФрд░ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ UICollectionViewDropProposal рд╣реИ, рдЬреЛ рдПрдХ рд╣реИ рд╡рд░реНрдЧ UIDropProposal рдФрд░ рд╢рд▓реНрдп рдЪрд┐рдХрд┐рддреНрд╕рд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЖрдкрд░реЗрд╢рди рдХреЗ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╢рдп рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП ред рдкреИрд░рд╛рдореАрдЯрд░Collection View
subclass
Collection View
рдЖрд╢рдп рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИCollection View
рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ "рдЦрд╛рд░рд┐рдЬ" рддрддреНрд╡ рдХреЛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рд╕реЗрд▓ рдХреЗ рдЕрдВрджрд░ рд░рдЦрд╛рдЬрд╛рдП , рдпрд╛ рдХреНрдпрд╛ рд╣рдо рдПрдХ рдирдпрд╛ рд╕реЗрд▓ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ред рдЕрдВрддрд░ рджреЗрдЦреЗрдВ? рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ,Collection View
рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЗрд░рд╛рджреЗ рдХреЗ рдЗрд░рд╛рджреЗ рд╕реЗ рд╕рдВрд╡рд╛рдж рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПредрд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╣рдореЗрд╢рд╛ рдПрдХ рдирдпрд╛ рд╕реЗрд▓ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЗрд░рд╛рджрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд┐рд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛редрд╣рдо UICollectionViewDropProposal рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЗ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ:
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╣рдореЗрд╢рд╛ рдПрдХ рдирдпрд╛ рд╕реЗрд▓ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрд░рд╛рджрд╛ рдкреИрд░рд╛рдореАрдЯрд░рдорд╛рди рд▓реЗрдЧрд╛ редinsertAtDestinationIndexPath рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд┐рдпрд╛ред.insertIntoDestinationIndexPath ред
рдлрд┐рд░ рдореИрдВ рд▓рдЧрд╛рддрд╛рд░ рдЕрднрд┐рдХрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ isself , рдФрд░ рдЕрдЧрд░ рдпрд╣ рд╣реИ рдЖрддреНрдо рдкреБрдирд░реНрдЧрдарди, рдореИрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ .move , рдЕрдиреНрдпрдерд╛ рдореИрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ .copy ред рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдо .insterAtDestinationIndexPath рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ , рдЕрд░реНрдерд╛рддреН рдирдИ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ редрдЕрдм рддрдХ рдореИрдВрдиреЗ рдкрд░рдлреЙрд░реНрдордбреНрд░реЙрдк рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЗрдП рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реАCollection View
рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЫреЛрдЯреЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рд╛рдердХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИрдЬреЛ рд╣рдордиреЗ рдЗрд╕реЗ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдерд╛редрдореИрдВ рдЫрд╡рд┐Safari
рдХреЛ рдЦреЛрдЬ рдЗрдВрдЬрдирд╕реЗ рдЦреАрдВрдЪрддрд╛ рд╣реВрдВGoogle
, рдФрд░ рдЗрд╕ рдЫрд╡рд┐ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рд╣рд░реЗ рд░рдВрдЧ рдХрд╛ "+" рдЪрд┐рд╣реНрди рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рдЫрд╡рд┐ рдЧреИрд▓рд░реА рди рдХреЗрд╡рд▓ рдЗрд╕ рдЫрд╡рд┐ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдЙрд╕рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ URL
, рдмрд▓реНрдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЬрдЧрд╣ рднреА рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ Collection View
:
рдореИрдВ рдХреБрдЫ рдЫрд╡рд┐рдпреЛрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ Safari
, рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 3 "рдбреНрд░реИрдЧреНрдб" рдЪрд┐рддреНрд░ рд╣реЛрдВрдЧреЗ:
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЕрдкрдиреА рдЙрдВрдЧрд▓реА рдФрд░ "рдбреНрд░реЙрдк" Drop
рдЗрди рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЙрдард╛рддрд╛ рд╣реВрдВ , рддреЛ рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реА рдЧреИрд▓рд░реА рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдмрд╕ рдЕрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд▓реМрдЯ рдЖрдПрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдЕрднреА рддрдХ рдкреНрд░рджрд░реНрд╢рди рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ ред
рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдЧреНрд░рд╣ Collection View
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВредрд╕рдВрдЧреНрд░рд╣ Collection View
рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рдЕрджреНрднреБрдд рдЪреАрдЬ рд╣реИредDrag & Drop
, рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИред рд╣рдордиреЗ рдХреЛрдб рдХреА 4 рдкрдВрдХреНрддрд┐рдпрд╛рдВ рд▓рд┐рдЦрдХрд░ рдЙрд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рдЫреБрдЖ рд╣реИ, рдФрд░ рд╡рд╣ "рд░реАрд╕реЗрдЯ" рдХреА рдзрд╛рд░рдгрд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рдЖрдЧреЗ рдмрдврд╝ рдЪреБрдХреА рд╣реИ Drop
редрдЖрдЗрдП рдХреЛрдб рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ PerformDrop рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ ред
рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ, рд╣рдо рдХреЛрдб рдХреА 4 рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ PerformDrop рд╡рд┐рдзрд┐ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИредрдПрдХ "рд░реАрд╕реЗрдЯ" рдЬрдм Drop
, рддреЛ рд╡рд┐рдзрд┐ performDrop рд╣рдо рдЕрдкрдиреЗ рдореЙрдбрд▓ рд╣реИ, рдЬреЛ рдЫрд╡рд┐рдпреЛрдВ рдХреА рдПрдХ рдЧреИрд▓рд░реА рд╣реИ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ imageGallery рдХреЙрдореНрдмреЛ рдЫрд╡рд┐ рдЫрд╡рд┐рдпреЛрдВ , рдФрд░ рд╣рдо рдЕрдкрдиреЗ рджреГрд╢реНрдп рд╕рдВрдЧреНрд░рд╣ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ CollectionView редрд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ "рд░реАрд╕реЗрдЯ" рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВ Drop
редрдПрдХ "рд░реАрд╕реЗрдЯ" рдирд╣реАрдВ рд╣реИ Drop
рдореЗрд░реЗ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ CollectionView , рдореИрдВ рдкреНрд░рджрд░реНрд╢рди "рд░реАрд╕реЗрдЯ" рдЪрд╛рд╣рд┐рдП Drop
рдирдП рд╕реНрдерд╛рди рдФрд░ рдХрдо рд╕реЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЖрдЗрдЯрдо рдФрд░ рдкреБрд░рд╛рдиреЗ рд╕реНрдерд╛рди рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ ( .move рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЗрд╕ рддрддреНрд╡)ред рдпрд╣ рдПрдХ рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рд╣реИред рдХрд┐рд╕реА рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ"рд░реАрд╕реЗрдЯ" Drop
рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдбреНрд░реИрдЧ" рдЖрдЗрдЯрдо рддрддреНрд╡ рдХреА рдЖрдЗрдЯрдордкреНрд░реЙрдЗрдбрд░ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ред рдЬрдм рд╣рдо рд╕рдВрдЧреНрд░рд╣ рджреГрд╢реНрдп рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ "рд░реАрд╕реЗрдЯ" рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рд╕рдВрдЧреНрд░рд╣ рд╣рдореЗрдВ рдПрдХ рд╕рдордиреНрд╡рдпрдХ рд╕рдордиреНрд╡рдпрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИDrop
ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕рдордиреНрд╡рдпрдХ рд╕реВрдЪрдирд╛ рджреА рд╕рдордиреНрд╡рдпрдХ , рдпрд╣ destinationIndexPath , рдпрд╛рдиреА indexPath "-destination", "рд░реАрд╕реЗрдЯ" Drop
, рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдХрд╣рд╛рдБ рд╣реЛ рдЬрд╛рдПрдЧрд╛ "рд░реАрд╕реЗрдЯред"
рд▓реЗрдХрд┐рди destinationIndexPath рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдирд╣реАрдВ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ рдЖрдк рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ "рд░реАрд╕реЗрдЯ" рдЫрд╡рд┐ рдХреЛ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ Collection View
, рдЬреЛ рдХреБрдЫ рдореМрдЬреВрджрд╛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИ рдХреЛрд╢рд┐рдХрд╛рдУрдВ , рддреЛ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдирд╣реАрдВ рдХреЗ рдмрд░рд╛рдмрд░ ред рдпрджрд┐ рдпрд╣ рд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдореИрдВ 0 рд╡реЗрдВ рдЦрдВрдб рдЕрдиреБрднрд╛рдЧ рдореЗрдВ 0 рдЖрдЗрдЯрдо рддрддреНрд╡ рдХреЗ рд╕рд╛рде рдПрдХ IndexPath рдмрдирд╛рддрд╛ рд╣реВрдВ ред
рдореИрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдЗрдВрдбреЗрдХреНрд╕рдкрде рдХреЛ рдЪреБрди рд╕рдХрддрд╛ рд╣реВрдВ , рд▓реЗрдХрд┐рди рдореИрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рдЗрдВрдбреЗрдХреНрд╕рдкрд╛рде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛редрдЕрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо "рд░реАрд╕реЗрдЯ" рдХрд╣рд╛рдВ рдХрд░реЗрдВрдЧреЗ Drop
ред рд╣рдо рд╕рдм "рдЭрдЯрдХрд╛ рдмрдВрдж" рдЖрдЗрдЯрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдирд╛ рд╣реИ coordinator.items , рд╕рдордиреНрд╡рдпрдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рд╕рдордиреНрд╡рдпрдХ ред рдЗрд╕ рд╕реВрдЪреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдореЗрдВ UICollectionViewDropItem TYPE рд╣реИ рдФрд░ рдпрд╣ рд╣рдореЗрдВ рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИредрдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдореБрдЭреЗ item.sourceIndexPath рд╕реЗ sourceIndexPath рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ , рддреЛ рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдиреВрдВрдЧрд╛ рдХрд┐ рдпрд╣ "рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк" рд╕реНрд╡рдпрдВDrag
рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕реНрд╡редрдФрд░ рдЦреАрдВрдЪреЗрдВ рдХрд╛ рд╕реНрд░реЛрдд Drag
рддрддреНрд╡ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ indexPath рдмрд░рд╛рдмрд░ sourceIndexPath :
рдореИрдВ рднреА рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ localSontext рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП "рдЦреАрдВрдЪреЗрдВ рдФрд░ рдбреНрд░реЙрдк" рд╕рдВрдЧреНрд░рд╣ рдХреЗ рднреАрддрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХреНрдпрд╛ CollectionView ред рд╡рд╛рд╣!
рдЕрдм рдореБрдЭреЗ рдкрддрд╛ рд╣реИ sourceIndexPath рдФрд░ тАЬрдбреЗрд╕реНрдЯрд┐рдиреЗрд╢рдитАЭ рдбреЗрд╕реНрдЯрд┐рдиреЗрд╢рдирдкрд╛рде Drag & Drop
, рдФрд░ рдХрд╛рд░реНрдп рддреБрдЪреНрдЫ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реИ рддрд╛рдХрд┐ рд╕реНрд░реЛрдд рдФрд░ "рдЧрдВрддрд╡реНрдп" рдХреА рдЕрджрд▓рд╛-рдмрджрд▓реА рд╣реЛ, рдФрд░ рдлрд┐рд░ рд╕рдВрдЧреНрд░рд╣ рджреГрд╢реНрдп рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ , рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ sourceIndexPath рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рдЖрдЗрдЯрдо рдХреЛ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЧрдВрддрд╡реНрдп IndexPath рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ редрд╣рдорд╛рд░рд╛ рд╕реНрдерд╛рдиреАрдп рдорд╛рдорд▓рд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рддрдВрддреНрд░ Drag & Drop
рди рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рд╣реА рд╕рдВрдЧреНрд░рд╣ рджреГрд╢реНрдп рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╣реИ , рдФрд░ рдореИрдВ рд╕рдордиреНрд╡рдпрдХ рд╕рдордиреНрд╡рдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдЖрдЗрдП рдЗрд╕реЗ рдЗрд╕ рд╕рд░рд▓рддрдо рд╕реНрдерд╛рдиреАрдп рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрдВ:
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рд▓реЛрдХрд▓ рдСрдмрдЬреЗрдХреНрдЯ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ , рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдмрдирд╛рдпрд╛ рдерд╛ рдЬрдм рдореИрдВрдиреЗ рдбреНрд░реИрдЧ рдЗрдЯ рдмрдирд╛рдпрд╛ рдерд╛ рдФрд░ рдЬрд┐рд╕реЗ рдореИрдВ рдЕрдм рдЖрдЗрдЯрдо "рд╕рдВрдЧреНрд░рд╣" рдореЗрдВ рдЖрдЗрдЯрдо "рд╕рдВрдЧреНрд░рд╣" рд╕реЗ рд▓реЗ рд╕рдХрддрд╛ рд╣реВрдВ ред рдЬрдм "рдбрдВрдкрд┐рдВрдЧ" Drop
рдЫрд╡рд┐рдпреЛрдВ рдХреЛ "рдХрдЪрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ", рддреЛ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА , рдЬреЛ рдПрдХ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рдбрд┐рд╕реНрдкреНрд▓реЗ рд╡реНрдпреВ рд╕рдВрдЧреНрд░рд╣ рдирд╣реАрдВ рд╣реИ ред рджреЛ IndexPathes рдЕрдм рдореЗрд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ : рд╕реНрд░реЛрдд sourceIndexPath рдФрд░ "рдбреЗрд╕реНрдЯрд┐рдиреЗрд╢рди" рдбреЗрд╕реНрдЯрд┐рдиреЗрд╢рди exath редрдореБрдЭреЗ рдкрд╣рд▓реЗ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓рддреА рд╣реИimageInfo рдореЙрдбрд▓ рд╕реЗ рдкреБрд░рд╛рдиреА рдЬрдЧрд╣ рдореЗрдВ рдЫрд╡рд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЗрд╕реЗ рд╡рд╣рд╛рдВ рд╕реЗ рд╣рдЯрд╛ рджреЗрдВред рдФрд░ рдлрд┐рд░ рдХреА рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдбрд╛рд▓рдиреЗ рдЫрд╡рд┐рдпреЛрдВ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреА imageGallery рдЬрд╛рдирдХрд╛рд░реА imageInfo рдПрдХ рдирдпрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдЫрд╡рд┐ destinationIndexPath.item ред рдЗрд╕ рддрд░рд╣ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдореЙрдбрд▓
рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛:рдЕрдм рдореБрдЭреЗ рдХрд▓реЗрдХреНрд╢рди рд╡реНрдпреВ рдХрд▓реЗрдХреНрд╢рди рдХреЛ рдЦреБрдж рд╣реА рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ collectionView рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ reloadData () "рдЦреАрдВрдЪреЗрдВ рдФрд░ рдбреНрд░реЙрдк" рдХреЗ рдмреАрдЪ рдореЗрдВDrag
рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд░реАрд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╣рдорд╛рд░реЗ рдЧреИрд▓рд░реА рд╣реИ, рдЬреЛ рдмрд╣реБрдд рдЦрд░рд╛рдм рд╣реИ рдХреА рдкреВрд░реА "рджреБрдирд┐рдпрд╛", рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдФрд░ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВрдЖрдЗрдЯрдо рдЕрд▓рдЧ рд╕реЗ:
рдореИрдВ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЖрдЗрдЯрдо рд╣рдЯрд╛рдпрд╛ collectionView рд╕рд╛рде sourceIndexPath рдФрд░ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рдирдпрд╛ рдЖрдЗрдЯрдо рдбрд╛рд▓рдиреЗ destinationIndexPath редрдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдХреЛрдб рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ "рдХреНрд░реИрд╢" рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕рдВрдЧреНрд░рд╣ рджреГрд╢реНрдп рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХрдИ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХрд┐ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рджреЛрдиреЛрдВ рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВ: рд╣рдЯрд╛рдПрдВ рдФрд░ рдбрд╛рд▓реЗрдВред рдЗрд╕рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣ рд╕рдВрдЧреНрд░рд╣рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдирд╣реАрдВ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рд░рд╛рдЬреНрдп рдореЗрдВ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рд╣реЛрдЧрд╛редрд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреЛ рд╣реИ рдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╢рд╛рдВрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ collectionView рдПрдХ рд╡рд┐рдзрд┐ рдирд╛рдорд┐рдд рд╣реИ performBatchUpdates , рдЬреЛ рд╕рд░реНрдХрд┐рдЯ (рд╣реИ closure
) рдФрд░ рдЗрд╕ рд╕рд░реНрдХрд┐рдЯ рдХреЗ рднреАрддрд░ рдореИрдВ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдЬрдЧрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ deleteItems , insertItems , moveItems рдФрд░ рд╕рднреА рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ:
рдЕрдм deleteItems рдФрд░ insertItems рдХреЛ рдПрдХ рд╣реА рдСрдкрд░реЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╕рдВрдЧреНрд░рд╣ рд╕рдВрдЧреНрд░рд╣ рджреГрд╢реНрдп рдХреЗ рд╕рд╛рде рдЖрдкрдХреЗ рдореЙрдбрд▓ рдХреЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рдХрдореА рдХрднреА рдирд╣реАрдВ рд╣реЛрдЧреА редрдФрд░ рдЕрдВрдд рдореЗрдВ, рдЖрдЦрд┐рд░реА рдЪреАрдЬ рдЬреЛ рд╣рдореЗрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╡рд╣ рд╕рдордиреНрд╡рдпрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ "рд░реАрд╕реЗрдЯ" рдХреЛ рдЪреЗрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ Drop
:
рдЬреИрд╕реЗ рд╣реА рдЖрдк рд╕реНрдХреНрд░реАрди рд╕реЗ рдЕрдкрдиреА рдЙрдВрдЧрд▓реА рдЙрдард╛рддреЗ рд╣реИрдВ, рдЫрд╡рд┐ рдЪрд▓рддреА рд╣реИ, рд╕рдм рдХреБрдЫ рдЙрд╕реА рд╕рдордп рд╣реЛрддрд╛ рд╣реИ: "рд░реАрд╕реЗрдЯ", рдЫрд╡рд┐ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИ рдПрдХ рдЬрдЧрд╣ рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ рдЙрдкрд╕реНрдерд┐рддрд┐редрдЖрдЗрдП рд╣рдорд╛рд░реА рдЫрд╡рд┐ рдЧреИрд▓рд░реА рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЫрд╡рд┐ "рд╡реЗрдирд┐рд╕" рдХреЛ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рддрдХ рд▓реЗ рдЬрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ ...
... рдФрд░ "рд░реАрд╕реЗрдЯ" рдЗрд╕реЗ:
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗ, рдЗрд╕реЗ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛редрд╣реБрд░реНрд░реЗ!
рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!рдЕрдм рд╣рдо рд╕реНрдерд╛рдиреАрдп рдорд╛рдорд▓реЗ рд╕реЗ рдирд╣реАрдВ рдирд┐рдкрдЯреЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рддреН, рдЬрдм "рд░реАрд╕реЗрдЯ" рддрддреНрд╡ рдУрдпреВрдПрд╕рдЯреАрдЖрдИрдбреАрдЖрдИрдЯреА рдЖрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдПрдХ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗредрдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо sourceIndexPath рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреЛрдб рдореЗрдВ рдФрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ ред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ sourceIndexPath рдирд╣реАрдВ рд╣реИ , рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ "resettable" рддрддреНрд╡ OUTSIDE рд╕реЗ рдЖрдпрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ resettable рдЖрдЗрдЯрдо рдХреЗ рдЖрдЗрдЯрдордкреНрд░реЛрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ редragItem.itemPathider рддрддреНрд╡ :
рдпрджрд┐ рдЖрдк "рдЦреАрдВрдЪреЗрдВ Drag
рдФрд░ рдбреНрд░реЙрдк" OUTSIDE рдФрд░ "рдбреНрд░реЙрдк" "Drop
, рддреЛ рдХреНрдпрд╛ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рддрддреНрдХрд╛рд▓ рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддреА рд╣реИ? рдирд╣реАрдВ, рдЖрдк ASYNCHRONOUSLY "рдШрд╕реАрдЯреА рдЧрдИ" рдЪреАрдЬрд╝ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдирдореВрдирд╛ 10 рд╕реЗрдХрдВрдб рд▓реЗрддрд╛ рд╣реИ? рдЗрд╕ рд╕рдордп рд╕рдВрдЧреНрд░рд╣ рдХреНрдпрд╛ рдХрд░реЗрдЧрд╛ ollection View
? рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреЗрдЯрд╛ рдЙрд╕ рдХреНрд░рдо рдореЗрдВ рдирд╣реАрдВ рдЖ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдордиреЗ рдЗрд╕рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдерд╛ред рдпрд╣ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ Apple
рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд ollection View
рд╡рд┐рдХрд▓реНрдк рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдИ рддрдХрдиреАрдХ рд╣реИ Placeholders
редрдЖрдк рдЕрдкрдиреЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ Collection View
рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рд░рдЦрддреЗ рд╣реИрдВ Placeholder
, рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдЖрдкрдХреЗ Collection View
рд▓рд┐рдП рдпрд╣ рд╕рдм рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЪрдпрдирд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЖрдкрдХреЛ рдпрд╣ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЛ Placeholder
рдЙрд╕рдХреЗ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рд╕рдВрджрд░реНрдн рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВрдФрд░ рдЙрд╕реЗ рдмрддрд╛рдПрдВ рдХрд┐ рдЖрдкрдХреЛ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓реА рд╣реИред рдлрд┐рд░ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдФрд░ рд╕рдВрджрд░реНрдн placeholderContext рдЖрдк рдЬрд┐рд╕ рд╕реЗрд▓ рд╕реНрд╡реИрдк рд╕реЗрд▓ рдПрдХ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЗ рд╕рд╛рде Placeholder
рдЕрдкрдиреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓рд┐рдП рдХреЛрд╢рд┐рдХрд╛рдУрдВ , рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЬреЛ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рд╣реИредрд╣рдо рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдХреЗ рдЙрди рд╕рднреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, Placeholder
рдЬреЛ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬреЛ рдЖрдкрдХреЛ рд╕рдордиреНрд╡рдпрдХ рд╕рдордиреНрд╡рдпрдХ рд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИ , рдЖрдкрдХреЛ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЛ рдЖрдЗрдЯрдоDrop
рддрддреНрд╡ "рд░реАрд╕реЗрдЯ" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ ред рдореИрдВ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реБрдБрдЧреА рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рд╕рдВрджрд░реНрднPlaceholder
рдХреМрди рд╕рд╛ "рдлреЗрдВрдХрддрд╛" dragItem рдкрд░ UICollectionViewDropPlaceholder :
рдЙрджреНрджреЗрд╢реНрдп рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ "рдлреЗрдВрдХ" рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ Drop
рдпрд╣ item.dragItem , рдЬрд╣рд╛рдВ рдордж - рдПрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдЪрдХреНрд░, рд╣рдо "рдлреЗрдВрдХ" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреЗ рд░реВрдк рдореЗрдВ Drop
рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ coordinator.items ред рд╣рдо рдЙрдиреНрд╣реЗрдВ рдПрдХ-рдПрдХ рдХрд░рдХреЗ "рдлреЗрдВрдХ" рджреЗрддреЗ рд╣реИрдВред рддреЛ item.dragItem рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо "рдбреНрд░реИрдЧ Drag
рдПрдВрдб рдбреНрд░реЙрдк " рдХрд░рддреЗ рд╣реИрдВ Drop
ред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрдЧрд▓рд╛ рддрд░реНрдХ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕реЗ UICollectionViewDropPlaceholder initializer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдКрдВрдЧрд╛ :
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореИрдВ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВPlaceholder
, рдЕрд░реНрдерд╛рддреН рд╕рдореНрдорд┐рд▓рди IndexPath , рд╕рд╛рде рд╣реА рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕реЗрд▓ рдкреБрди: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ редрддрд░реНрдХ insertionIndexPath , рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╣реИ destinationIndexPath , рдпрд╣ IndexPath "рдЦреАрдВрдЪреЗрдВ" рдПрдХ рд╡рд╕реНрддреБ рд╣реИ, рдпрд╣ рд╡рд┐рдзрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП performDropWith редрдЕрдм рд╣рдо reuseIdentifier cell id рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ ред рдЖрдкрдХреЛ рддрдп рдХрд░рдирд╛ рдХреНрдпрд╛ рдХреЛрд╢рд┐рдХрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд░реВрд░рдд рд╣реИ рд╕реЗрд▓ рдЕрдкрдиреЗ рдПрдХ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рд╣реИ Placeholder
ред рд╕рдордиреНрд╡рдпрдХ рд╕рдордиреНрд╡рдпрдХ рдХреЗ рдкрд╛рд╕ рд▓реЛрдХреЗрдЯрд░ рдХреЗ рд▓рд┐рдП "рдкреНрд░реА- рдкреИрдХреЗрдЬреНрдб " рд╕реЗрд▓ рдирд╣реАрдВ рд╣реИPlaceholder
ред рдпрд╣ рдЖрдк рд╣реА рд╣реИрдВ рдЬреЛ рдЗрд╕ рд╕реЗрд▓ рд╕реЗрд▓ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ ред рдЗрд╕рд▓рд┐рдП, рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕реЗрд▓ reuseIdentifiercell рдХреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╕реЗ рдЖрдкрдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ storyboard
рддрд╛рдХрд┐ рдЗрд╕реЗ PROTOTYPE рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗредрдореИрдВ рдЗрд╕реЗ "DropPlaceholderCell" рдХрд╣реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореВрд▓ рд░реВрдк рд╕реЗ, рдореИрдВ рдЗрд╕реЗ рдЬреЛ рднреА рдирд╛рдо рджреЗ рд╕рдХрддрд╛ рдерд╛редрдпрд╣ рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ storyboard
рдЗрд╕ рдЪреАрдЬрд╝ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ редрд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ storyboard
рдФрд░ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рд╕реЗрд▓ рд╕реЗрд▓ рдмрдирд╛рдПрдВ Placeholder
ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдмрд╕ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ Collection View
рдФрд░ рдЙрд╕рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ, Items
рдореИрдВ рдмрджрд▓ 1
рдЬрд╛рддрд╛ рд╣реВрдВ2
ред рдпрд╣ рддреБрд░рдВрдд рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рджреВрд╕рд░реА рд╕реЗрд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рдХреА рдПрдХ рд╕рдЯреАрдХ рдкреНрд░рддрд┐ рд╣реИред
рд╣рдо рдЕрдкрдиреЗ рдирдП рд╕реЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ ImageCell
, рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, " DropPlaceholderCell
", рд╡рд╣рд╛рдВ рд╕реЗ рд╕рднреА UI
рддрддреНрд╡реЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ , рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ Image View
, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ PROTOTYPE рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЫрд╡рд┐ рдЕрднреА рддрдХ рдирд╣реАрдВ рдЖрдИ рд╣реИред рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдкреИрд▓реЗрдЯ рд╕реЗ рдПрдХ рдирдпрд╛ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕рдВрдХреЗрддрдХ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ Activity Indicator
, рдпрд╣ рдШреВрдо рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрддрд╛ рдЪрд▓ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рдХреБрдЫ "рд░реАрд╕реЗрдЯ" рдбреЗрдЯрд╛ рдХреА рдЙрдореНрдореАрдж рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд░рдВрдЧ рдмрджрд▓рдиреЗ Background
рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЬрдм рдмрд╛рд╣рд░ рдЫрд╡рд┐ рд╕реЗ "рд░реАрд╕реЗрдЯ" рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд╕реЗрд▓ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд╕реЗрд▓ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд░реВрдк рдореЗрдВ:
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдирдИ рдХреЛрд╢рд┐рдХрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ImageCollectionVewCell, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдЪрд┐рддреНрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореИрдВ рдЗрд╕ рд╕реЗрд▓ рдХреЛ TYPE UI UIOLlectionCiewCell рдХрд╛ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕реЗрд▓ рдмрдирд╛рдКрдВрдЧрд╛ , рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ Outlets
рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ :
рдЖрдЗрдП рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕рдВрдХреЗрддрдХ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ Activity Indicator
рддрд╛рдХрд┐ рдпрд╣ рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣реА рдПрдирд┐рдореЗрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗ, рдФрд░ рдореБрдЭреЗ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдореЗрдВ рдХреБрдЫ рднреА рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдХрд▓реНрдк рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ Animating
:
рдФрд░ рдпрд╣ рд╕рдм рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдЗрд╕ рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреАрдВ DropPlaceholderCell
, рд╣рдо рдЕрдкрдиреЗ рдХреЛрдб рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░реАрди рд▓реЛрдХреЗрдЯрд░ Placeholder
рддреИрдпрд╛рд░ рд╣реИредрд╣рдореЗрдВ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЬрдм рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдмрд╕ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЛ рдЗрд╕ рд╕рдВрджрд░реНрдн рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЛ рд╕реНрд╡реИрдк рдХрд░ рджреЗрдЧрд╛Placeholder
рдФрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА "рдореВрд▓" рд╕реЗрд▓, рдФрд░ рд╣рдо рдореЙрдбрд▓ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВрдЧреЗредрдореИрдВ рдПрдХ рд╡рд╕реНрддреБ рдкрд░ "рд▓реЛрдб" рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рд▓реЛрдбрдУрдмрдЬреЗрдХреНрдЯ (рдЗрдирдХрд╛рд╕: рдпреВрдЖрдИрдЖрдИрдПрдордПрдЬреЗ. рд╕реНрд╡рдпрдВ) рд╡рд┐рдзрд┐ (рдПрдХрд╡рдЪрди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрд░рд╛ рдЖрдЗрдЯрдо рд╣реЛрдЧрд╛ ред рдореИрдВ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ item.dragItem.itemProvider рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛ itemProvider , рдЬреЛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдбреЗрдЯрд╛ рддрддреНрд╡ рдЖрдЗрдЯрдо рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрджрд┐ iitemProvider рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ , рддреЛ рд╣рдо рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмрд╛рд╣рд░ iitem "рд░реАрд╕реЗрдЯ" рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд loadObject (ofClass: UIImage.self) рд╡рд┐рдзрд┐ (рдПрдХрд╡рдЪрди) рд╣реИ: рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
main queue
ред рдФрд░, рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рд╣рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдкрд╣рд▓реВR рдЫрд╡рд┐ рдореЗрдВ рдЫрд╡рд┐ рдХреЗ рдкрд╣рд▓реВ рдЕрдиреБрдкрд╛рдд рдХреЛ "рдкрдХрдбрд╝рдиреЗ" рдХреЗ рд▓рд┐рдП DispatchQueue.main.async {}main queue
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдкрдбрд╝рд╛ ред рд╣рдордиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЛ рд╕реНрдерд╛рдиреАрдп рд╡реИрд░рд┐рдПрдмрд▓ рдЗрдореЗрдЬреБрд░рд▓ рдФрд░ рдЖрд╕реНрдкреЗрдХреНрдЯ рд░реЗрд╢рд┐рдпреЛ рдХреА рд╢реБрд░реБрдЖрдд рдХреА рд╣реИ ... ... рдФрд░ рдЗрдореЗрдЬ рдЗрдореЗрдЬ рдФрд░ URL url рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рд╣рдо рдЙрдиреНрд╣реЗрдВ "рдкрдХрдбрд╝" рд▓реЗрдВрдЧреЗ : рдпрджрд┐ рджреЛрдиреЛрдВ рд▓реЛрдХрд▓ рд╡реИрд░рд┐рдПрдмрд▓ imageURL рдФрд░ рдПрд╕реНрдкреЗрд░рд╛рдЯреНрд░рд┐рдЯ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИрдВ , рддреЛ рд╣рдо рдХрдореНрдкреНрд░реЗрд╢рди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рд╕рдВрджрд░реНрдн рдкреВрдЫреЗрдВрдЧреЗред
рд╣рдореЗрдВ рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдмрджрд▓рдиреЗ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдирд╛ imagegallery :
рдЗрд╕ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ insertionIndexPath - рдпрд╣ indexPath рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐, рдФрд░ рд╣рдо рдЕрдкрдиреЗ рдореЙрдбрд▓ рдмрджрд▓рдиреЗ imagegallery ред рд╣рдореЗрдВ рдмрд╕ рдЗрддрдирд╛ рд╣реА рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╡рд┐рдзрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ Placeholder
рдХреЛ рдПрдХ рд╕реЗрд▓ рдХреЗ рд╕рд╛рде рдмрджрд▓рдХрд░ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗрд▓рдлрд╝реЛрд░рдореЗрдЯрдо рд╡рд┐рдзрд┐ рдХрд╣рд▓рд╛рдПрдЧреА редрдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рдореНрдорд┐рд▓рди IndexPath , рдЧрдВрддрд╡реНрдп IndexPath рд╕реЗ рдмрд╣реБрдд рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ред рдХреНрдпреЛрдВ?
рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛ рд╕реИрдВрдкрд▓рд┐рдВрдЧ рдореЗрдВ 10 рд╕реЗрдХрдВрдб рдХрд╛ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ 10 рд╕реЗрдХрдВрдб рдХрд╛ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди, рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ Collection View
рдмрд╣реБрдд рдХреБрдЫ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ред рдирдИ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ , рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рддреЗрдЬреА рд╕реЗ рд╣реЛрддрд╛ рд╣реИредрд╣рдореЗрд╢рд╛ рдпрд╣рд╛рдБ рдХрд╛ рдЙрдкрдпреЛрдЧ insertionIndexPath , рдФрд░ рдХреЗрд╡рд▓ insertionIndexPath , рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗредрд╣рдо рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЛ рдХреИрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ?рд╣рдо рд╕рд░рдгреА рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд imageGallery.images рд╕рдВрд░рдЪрдирд╛ imagemodel , рдкрд╣рд▓реВ рдЕрдиреБрдкрд╛рдд рд╕реЗ рдмрдирд╛ aspectRatio рдФрд░ рдЪрд┐рддреНрд░ URL imageUrl , рдХрд┐рд╕рдиреЗ рджрд┐рдпрд╛ рд╣рдореЗрдВ рдЗрд╕реА рд╡рд╛рдкрд╕ рдкреНрд░рджрд╛рддрд╛ рджреНрд╡рд╛рд░рд╛ редрдпрд╣ рд╣рдорд╛рд░реЗ рдЗрдореЗрдЬрдЧреИрд▓рд░реА рдореЙрдбрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ , рдФрд░ рдХрдорд┐рдЯрдореЗрдВрдЯ рдореЗрдердб рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╛рдХреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЕрдм рдЖрдкрдХреЛ рдХреБрдЫ рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреЛрдИ рдЖрд╡реЗрд╖рдг, рдХреЛрдИ рд╡рд┐рд▓реЛрдкрди рдирд╣реАрдВ, рдЗрд╕рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдирд╣реАрдВред рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЪреВрдВрдХрд┐ рд╣рдо рдПрдХ рдмрдВрдж рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИрдВ, рд╣рдореЗрдВ рд╕реНрд╡рдпрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред ред
рд╣рдо рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдкрд╣рд▓реВ рдЕрдиреБрдкрд╛рдд рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВ, рддреЛ aspectRatio рдФрд░ URL
рдЫрд╡рд┐ imageUrl рдЗрд╕реА рд╕реЗ рдкреНрд░рджрд╛рддрд╛ рджреНрд╡рд╛рд░рд╛ , рдПрдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рджрд╛рддрд╛ рджреНрд╡рд╛рд░рд╛ , рд╣рдо рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдкрддрд╛ рд╣реИ рд╕рдВрджрд░реНрдн рд╣реИ placeholderContext , рддреЛ рдЖрдк рдЗрд╕ рдПрдХ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ Placeholder
, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕рдм рдПрдХ рд╣реА рд╣реИрдВ рд╣рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЕрдиреНрдп рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдЬрдЧрд╣реЛрдВ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА
рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ URLs
рд╣реЛрдЧрд╛ Google
, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ " рдбреЗрдЯрд╛ " рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдореВрд▓реА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИURL
рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдПред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдбреЗрдореЛ рдЖрд╡реЗрджрди рдореЗрдВ рдЧрд┐рддреБрдмUtilities.swift
рдкрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдЗрд╕рд▓рд┐рдП, рдЬрдм рдкреНрд░рд╛рдкреНрдд рдЫрд╡рд┐, рд╣рдо рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ imageUrl рд╡рд░реНрдЧ рдХреЗ рдпреВрдЖрд░рдПрд▓ : рдФрд░ рд╡рд╣ рд╕рдм рдЖрдк рдмрд╛рд╣рд░ рдХреБрдЫ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЕрдВрджрд░ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ ред рдЗрд╕реЗ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рд╕рд╛рде рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдореЛрдб рдореЗрдВ рд╣рдорд╛рд░реЗ рдбреЗрдореЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдПрдХ рдЦреЛрдЬ рдЗрдВрдЬрди рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ ред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо "рдбреЙрди┬╗ (рд╕реВрд░реНрдпреЛрджрдп) рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдЧ рд░рд╣реА рд╣реИред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд░реНрдорд┐рддURL

Collection View
ImageGallery
Safari
Google
Google
Safari
Drag & Drop
рддрдВрддреНрд░, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрди рдЪрд┐рддреНрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╣рдорд╛рд░реА рдЫрд╡рд┐ рдЧреИрд▓рд░реА рдореЗрдВ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рд░реЗ рд░рдВрдЧ рдХреЗ рдкреНрд▓рд╕ рдЪрд┐рдиреНрд╣ "+" рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рдЫрд╡рд┐ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдерд╛рди рдкрд░ рдЗрд╕реЗ рдЖрдкрдХреЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рд╣рдо рдЗрд╕реЗ "рд░реАрд╕реЗрдЯ" рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЫрд╡рд┐ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓реЗрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рд╕рдордп рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ Placeholder
:
рдбрд╛рдЙрдирд▓реЛрдб рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, "рд░реАрд╕реЗрдЯ" рдЫрд╡рд┐ рдХреЛ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ Placeholder
рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
рд╣рдо рдЕрдкрдиреА рд░реАрд╕реЗрдЯ рдФрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЬрдЧрд╣ рдореЗрдВ "рд░реАрд╕реЗрдЯ" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рднреА рдЕрдзрд┐рдХ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣:
"рд░реАрд╕реЗрдЯ" рдХрд╛рд░реНрдп рдХреЗ рдмрд╛рдж Placeholder
:
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реА рдЫрд╡рд┐ рдЧреИрд▓рд░реА рдирдИ рдЫрд╡рд┐рдпреЛрдВ рд╕реЗ рднрд░ рдЧрдИ рд╣реИ:
рдЕрдм рдЬрдм рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╣рдо рдмрд╛рд╣рд░ рд╕реЗ рдЪрд┐рддреНрд░ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рд╣реИрдВ, рд╣рдо рдкрд░реАрдХреНрд╖рдг рдЫрд╡рд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдо рдирд┐рдХрд▓ рдЬрд╛рдПрдЧрд╛:
рд╣рдорд╛рд░реА viewDidLoad рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ: рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдХрд░ рд░рд╣реЗ рд╣реИрдВ Controller
Drag
рдФрд░ Drop
рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдФрд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЗрд╢рд╛рд░рд╛ рдЬреЛрдбрд╝рдиреЗ рдЪреБрдЯрдХреА , рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ:
рдмреЗрд╢рдХ рд╣рдо рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ ImageCache :
рд╣рдо рднрд░ рдЬрд╛рдПрдЧрд╛ ImageCache рдЬрдм "рд░реАрд╕реЗрдЯ" Drop
рд╡рд┐рдзрд┐ рдореЗрдВ performDrop ...
рдФрд░ "рдиреЗрдЯрд╡рд░реНрдХ" рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдХреНрд╖рд╛ рдореЗрдВ рдХрд╛ рдПрдХ рдирдореВрдирд╛ ImageCollectionViewCell :
рдПрдХ рдХреИрд╢ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ ImageCache рд╕реЗрд▓ рдкреНрд▓реЗрдмреИрдХ рд╣реЛрдЧрд╛рд╕реЗрд▓ рдПрдХ рдХрд╕реНрдЯрдо рд╡рд░реНрдЧ рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╣рдорд╛рд░реЗ рдЧреИрд▓рд░реА рдореЗрдВ ImageCollectionViewCell :
рдЕрдм рд╣рдо рдПрдХ рдЦрд╛рд▓реА рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ ...
... рддреЛ рдПрдХ рдирдИ рдЫрд╡рд┐ рд╣рдорд╛рд░реЗ рд╕рдВрдЧреНрд░рд╣ ... рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдлреЗрдВрдХ"
... prishodit рдЫрд╡рд┐ рд▓реЛрдб рдФрд░Placeholder
рдЪрд▓ рд░рд╣рд╛ рд╣реИ ...
... рдФрд░ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рдЫрд╡рд┐ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ:
рд╣рдо рдЕрдкрдиреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдмрд╛рд╣рд░ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП:
prishodit рдЪрд┐рддреНрд░ рд▓реЛрдб рдХрд░рдирд╛ рдФрд░Placeholders
рдХрд╛рдо рдХрд░рдирд╛ ...
рдФрд░ рдЪрд┐рддреНрд░ рд╕рд╣реА рд╕реНрдерд╛рди рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ:
рддреЛ, рд╣рдо рдЕрдкрдиреА рдЫрд╡рд┐ рдЧреИрд▓рд░реА рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдЗрд╕реЗ рднрд░реЗрдВ, рдЖрдЗрдЯрдореЛрдВ рдХреЛ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ, рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд┐рддреНрд░ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ niyamiредрд╣рдореЗрдВ рдмрд╕ рдЙрд╕реЗ рд╕рд┐рдЦрд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЫрд╡рд┐рдпреЛрдВ рд╕реЗ рдЙрдиреНрд╣реЗрдВ "рд░реАрд╕реЗрдЯ" рдХрд░рдХреЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВDrop
рджрд╛рдпреАрдВ рдУрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдкрд░ "рдЯреНрд░реИрд╢ рдХреИрди" рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЫрд╡рд┐ рдЧреИрд▓рд░реА "" "рдХрдЪрд░реЗ рдХреЗ рдбрд┐рдмреНрдмреЗ рдореЗрдВ" рд╡рд░реНрдЧ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА "рдирдореВрдирд╛ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЕрд╡рд╕рд░" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ GabageView , рд╕реЗ рдЬреЛ inherits UIView рдФрд░ рд╣рдо рдЙрд╕реЗ рд╕рд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рд╣рдорд╛рд░реЗ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП ollection View
редDrop
рдХрдЪрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреИрд▓рд░реА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рддреБрд░рдВрдд рдЬрдЧрд╣ рд╕реЗ - рдЦрджрд╛рди рдХреЗ рд▓рд┐рдПред рдореИрдВ GabageView рдореЗрдВ "рдЗрдВрдЯрд░реИрдХреНрд╢рди" рдЗрдВрдЯрд░реИрдХреНрд╢рди рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдФрд░ рдпрд╣ рдПрдХ UIDropInteraction рд╣реЛрдЧрд╛ , рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ Drop
рдХрд┐рд╕реА рддрд░рд╣ рдХреА рдЪреАрдЬрд╝ рдХреЛ "рд░реАрд╕реЗрдЯ" рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ ред рд╣рдо рд╕рднреА рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╣реИ UIDropInteraction , рдЗрд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐ , рдФрд░ рдореИрдВ рдЦреБрдж рдХреЛ рдирд┐рдпреБрдХреНрдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ, рд╕реНрд╡рдпрдВ , рдЗрд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐ :
рдмреЗрд╢рдХ, рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ GabageView рдкреБрд╖реНрдЯрд┐ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП UIDropInteractionDelegate :
рд╕рднреА рд╣рдо рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Drop
, рдпрд╣ рдХреИрдВрдерд▓ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рд╣реИ ,sessionDidUpdate рдФрд░ performDrop ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рддрд░реАрдХреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд,рдбрдВрдкрд┐рдВрдЧ рд╕реНрдерд╛рди рдХреЗ рдЗрдВрдбреЗрдХреНрд╕рдкрд╛рде рдХреЗCollection View
рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИредрдЖрдЗрдП рдЗрди рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВредрд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ canHandle рдХреЗрд╡рд▓ "рдЦреАрдВрдЪреЗрдВ рдФрд░ рдбреНрд░реЙрдк" рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛рдПрдЧреА, рдЬреЛ рдЫрд╡рд┐ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдПрдХ UIImage ред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдХреЗрд╡рд▓ рддрднреА рд╕рдЪ рд▓реМрдЯрд╛рдКрдБрдЧрд╛ рдЬрдм session.canLoadObjects (ofClass: UIImage.self) : CanHandle рдкрджреНрдзрддрд┐ рдореЗрдВ,рдЖрдк рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣реЗрдВрдЧреЗ рдХрд┐ рдпрджрд┐ "draggable" рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛрдИ UIImage рдЫрд╡рд┐ рдирд╣реАрдВ рд╣реИDrag
, рддреЛ рдЖрдЧреЗ рдпрд╣ "рд░реАрд╕реЗрдЯ" рдбреНрд░реЙрдк рдЬрд╛рд░реА рд░рдЦрдиреЗ рдФрд░ рдмрд╛рдж рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИредрдпрджрд┐ " рдбреНрд░реИрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп " рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ UIImage рдЫрд╡рд┐ рд╣реИ , рддреЛ рд╣рдо sessionDidUpdate рдкрджреНрдзрддрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗ ред рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рд╣рдореЗрдВ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдирд╛ рдпреВрдЖрдИрдбреАрдкреНрд░реЛрдкрдкреНрд░реЛрд╕рд╛рд▓ "рд░реАрд╕реЗрдЯ" рдкреНрд░рд╕реНрддрд╛рд╡ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВDrop
ред рдФрд░ рдореИрдВ рдХреЗрд╡рд▓ "рдШрд╕реАрдЯрд╛ рд╣реБрдЖ" LOCALLY UIImage TYPE рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ, рдЬреЛ Drop
рдореЗрд░реЗ рдХрдЪрд░рд╛ рд╡реНрдпреВ рдХреЗ рдЕрдВрджрд░ рдХрд╣реАрдВ рднреА "рдЧрд┐рд░рд╛рдпрд╛" рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдореЗрд░рд╛ рдЧрд╛рд░рдмреЗрдЬ рд╡реНрдпреВ OUTSIDE рдбрдВрдк рдХреА рдЧрдИ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдореИрдВ session.localDragSession рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд░реНрд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВрдХреНрдпрд╛ рдХреЛрдИ рд╕реНрдерд╛рдиреАрдп "рд░реАрд╕реЗрдЯ" рд╣реИ Drop
, рдФрд░ рдореИрдВ рдСрдкрд░реЗрд╢рди рд▓реЙрдЬрд┐рдХ рдХреЗ рд╕рд╛рде UIDropProposal рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ "рд░реАрд╕реЗрдЯ" рд╡рд╛рдХреНрдп рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реВрдВ , рдорд╛рди рд▓реЗ рд░рд╣рд╛ рд╣реИред рддреЛрдкреА , рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рд╣рдореЗрд╢рд╛ "рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк" рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдЖрдПрдЧрд╛ ред рдпрджрд┐ "рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк" рдФрд░ "рд░рд┐рд╕реЗрдЯ" OUTSIDE рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдСрдкрд░реЗрд╢рди рд▓реЙрдЬрд┐рдХ рдХреЗ рд╕рд╛рде UIDropProposal рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ "рд░реАрд╕реЗрдЯ" рд╡рд╛рдХреНрдп рд▓реМрдЯрд╛рддрд╛ рд╣реВрдВ ред рдорд╛рди рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП .fobbiden , рдЕрд░реНрдерд╛рдд "рдирд┐рд╖рд┐рджреНрдз" рдФрд░ рд╣рдореЗрдВ рдЧреНрд░реАрди рдкреНрд▓рд╕ рд╕рд╛рдЗрди рдХреЗ рдмрдЬрд╛рдп рдПрдХ "рд░реАрд╕реЗрдЯ" рдирд┐рд╖реЗрдз рд╕рдВрдХреЗрдд рдорд┐рд▓реЗрдЧрд╛ред ред рдПрдХ UIImage рдЫрд╡рд┐ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛Drag
Collection View
Drag
Drop
, рд╣рдо рдЗрд╕рдХреЗ рдкреИрдорд╛рдиреЗ рдореЗрдВ рдХрдореА рдХрд╛ рдЕрдиреБрдХрд░рдг рд▓рдЧрднрдЧ 0 рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЬрдм "рд░реАрд╕реЗрдЯ" рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕ рдЫрд╡рд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдирд┐рдХрд╛рд▓ рджреЗрдВрдЧреЗ Collection View
редрдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП "рдХрдЪрд░рд╛ рдмрд┐рди" рдореЗрдВ "рдбрдВрдкрд┐рдВрдЧ рдФрд░ рдЧрд╛рдпрдм" рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рднреНрд░рдо рдкреИрджрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрдирдлреЙрд░рдбреНрд░реЙрдкрд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдирдпрд╛ , рдЬреЛ рд╣рдореЗрдВ "рдбрдВрдкрд┐рдВрдЧ" Drop
рдХреЛ рджреВрд╕рд░реА рдЬрдЧрд╣ рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА рдПрдиреАрдореЗрд╢рди рдХреЗ рджреМрд░рд╛рди "рдбрдВрдк рдХрд┐рдП рдЧрдП" рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ:
^ рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдкреНрд░рд╛рд░рдВрднрдХрд░реНрддрд╛ рдЧ UIDragPreviewTarget рд╣рдо рдПрдХ рдирдпрд╛ рдкрд╛рдиреЗ рдХреЗ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рд╡рд╕реНрддреБ рд╕реЗ рд░рд╛рд╣рдд рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖реНрдп рдФрд░ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдЕрдиреБрдкреНрд░реЗрд╖рд┐рдд retargetedPreviewрдПрдХ рдирдП рд╕реНрдерд╛рди рдкрд░, "рдХрдЪрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ," рдЗрд╕рдХреЗ рдкреИрдорд╛рдиреЗ рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ рд╢реВрдиреНрдп рддрдХ:
рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдЙрдВрдЧрд▓реА рдЙрдард╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ "рд░реАрд╕реЗрдЯ" рд╣реЛрддрд╛ рд╣реИ Drop
, рдФрд░ рдореБрдЭреЗ ( рдЧрд╛рд░рдмреЗрдЬ рд╡реНрдпреВ рдХреА рддрд░рд╣ ) рдПрдХ рдкреНрд░рджрд░реНрд╢рди рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИ ред PerformDrop рд╕рдВрджреЗрд╢ рдореЗрдВ , рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ "рд░реАрд╕реЗрдЯ" рдХрд░рддреЗ рд╣реИрдВ Drop
ред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдЧрд╛рд░рдмреЗрдЬ рд╡реНрдпреВ рдкрд░ рдбрд╛рд▓реА рдЧрдИ рдЫрд╡рд┐ рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд░рдЦрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрджреГрд╢реНрдп рдмрдирд╛ рджреЗрдВрдЧреЗ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ "рд░реАрд╕реЗрдЯ" рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рддрдереНрдп Drop
рдпрд╣ рд╕рдВрдХреЗрдд рджреЗрдЧрд╛ рдХрд┐ рд╣рдо рдЗрд╕ рдЫрд╡рд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ Collection View
ред рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕реНрд╡рдпрдВ рд╕рдВрдЧреНрд░рд╣ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдПрдЗрд╕рдореЗрдВ рдЫрд╡рд┐ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХрд╣рд╛рдБ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ Drag & Drop
рд╕реНрдерд╛рдиреАрдп: рдПрдХ рд╣реА рдЖрд╡реЗрджрди рдореЗрдВ рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИ, рдпрд╣ рд╕реНрдерд╛рдиреАрдп рд╣рдо рд╕рднреА рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ Drag
рд╕рддреНрд░ localDragSession рд╣рдорд╛рд░реЗ Drop
рд╕рддреНрд░ рд╕рддреНрд░ , рд╕реНрдерд╛рдиреАрдп рд╕рдВрджрд░реНрдн localContext , рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╣рдорд╛рд░реЗ рд╕рдВрдЧреНрд░рд╣ рд╣реИ sollectionView рдФрд░ рд╕реНрдерд╛рдиреАрдп рд╡рд╕реНрддреБ localObject рд░реАрд╕реЗрдЯ рдЫрд╡рд┐ рд╣реИ, рдЬреЛ рд╣рдо рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЫрд╡рд┐ "рдЧреИрд▓рд░реА" рдпрд╛ рд╕реЗ indexPath ред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ рд╣рдо рд╡рд┐рдзрд┐ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ performDrop рд╡рд░реНрдЧ GarbageView рд╕рдВрдЧреНрд░рд╣ рд╕рдВрдЧреНрд░рд╣ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдХрд╛ рдЙрдкрдпреЛрдЧрдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреИрд╕реЗ ImageGalleryCollectionViewController рдФрд░ рдореЙрдбрд▓ imageGallery рд╣рдорд╛рд░реЗController
, рд╣рдо рдХреА рдЫрд╡рд┐рдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЫрд╡рд┐рдпреЛрдВ рдкреНрд░рдХрд╛рд░ [ImageModel]:
рд╕реНрдерд╛рдиреАрдп рдХреА рдорджрдж рд╕реЗDrag
рд╕рддреНрд░ localDragSession рд╣рдорд╛рд░реЗDrop
рд╕рддреНрд░ рд╕рддреНрд░ рд╣рдо рд╕рдм рдкрд░ "рдЦреАрдВрдЪреЗрдВ" рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ GarbageView Drag
рдХреЗ рддрддреНрд╡реЛрдВ рдЖрдЗрдЯрдо , рдФрд░ рд╡рд╣рд╛рдБ рдПрдХ рдмрд╣реБрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рд╕рднреА рд╣рдорд╛рд░реЗ рд╕рдВрдЧреНрд░рд╣ рджреГрд╢реНрдп рд╕рдВрдЧреНрд░рд╣ рдХреА рдЫрд╡рд┐рдпрд╛рдВ рд╣реИрдВред рдмрдирд╛рдирд╛Drag
рддрддреНрд╡реЛрдВ dragItems рд╣рдорд╛рд░реЗ рд╕рдВрдЧреНрд░рд╣Collection View
, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ "рдЦреАрдВрдЪреЗрдВ" рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХреА рд╣реИDrag
рддрддреНрд╡dragItem рд╕реНрдерд╛рдиреАрдп рд╡рд╕реНрддреБ localObject , рдЬреЛ рдХреА рдЫрд╡рд┐ рд╣реИ рдЫрд╡рд┐ , рд▓реЗрдХрд┐рди рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдХрд╛рдо рдореЗрдВ рджреМрд░рд╛рди рдЖрдВрддрд░рд┐рдХ рдкреБрдирд░реНрдЧрдарди рд╕рдВрдЧреНрд░рд╣ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВ CollectionView , рд▓реЗрдХрд┐рди "рд░реАрд╕реЗрдЯ" рдЫрд╡рд┐ рдЧреИрд▓рд░реА рд╣рдо рд╕рдЦреНрдд рд╕реНрдерд╛рдиреАрдп рд╕реБрд╡рд┐рдзрд╛ рдореЗрдВ рдХреА рдЬрд░реВрд░рдд рд╣реИ "рдХрдЪрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ" localObject "рдЦреАрдВрдЪреЗрдВ" рд╡рд╕реНрддреБ dragItem , рд╕рднреА рдЗрд╕ рд╕рдордп рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдордиреНрд╡рдпрдХ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рд╕рдВрдЧреНрд░рд╣ рджреГрд╢реНрдп рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрддрдиреА рдЙрджрд╛рд░рддрд╛ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╕реНрдерд╛рдиреАрдп рд╡рд╕реНрддреБ localObject рд╕реВрдЪрдХрд╛рдВрдХ рдерд╛ indexPath рдЫрд╡рд┐ рд╕рд░рдгреА рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдХреАimageGallery ред рд╡рд┐рдзрд┐ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ : dragItems (IndexPath indexPath рдкрд░) рд╡рд░реНрдЧ ImageGalleryCollectionViewController :
рдЕрдм рд╣рдо рд╣рд░ "pretaskivaemogo" рддрддреНрд╡ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЖрдЗрдЯрдо рдпрд╣ localObject , рдЬреЛ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИ indexPath рдЫрд╡рд┐ рд╕рд░рдгреА рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдХреА imagegallery рдФрд░ рд╕рд░рдгреА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рднреЗрдЬ рдЕрдиреБрдХреНрд░рдорд┐рдд рдФрд░ рд╕рд░рдгреА indexPahes рд╣рдЯрд╛рдиреЗ рдЫрд╡рд┐рдпреЛрдВ:
рд╕реВрдЪрдХрд╛рдВрдХ рд╕рд░рдгреА рдХреЛ рдЬрд╛рдирдиреЗ рдХрд╛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдФрд░ рд╕рд░рдгреА indexPahes рд╡рд┐рдзрд┐ рдореЗрдВ рдирд╖реНрдЯ рдЫрд╡рд┐рдпреЛрдВ performBatchUpdatesрд╕рдВрдЧреНрд░рд╣ рд╕рдВрдЧреНрд░рд╣ рд╣рдо рд╕рднреА рд╣рдЯрд╛рдП рдЧрдП рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдореЙрдбрд▓ рдЫрд╡рд┐рдпреЛрдВ рд╕реЗ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рд╣рдЯрд╛рддреЗ рд╣реИрдВ :
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ, рдирдИ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЧреИрд▓рд░реА рднрд░реЗрдВ: рдЙрди рдЪрд┐рддреНрд░реЛрдВ рдХреЗ
рдПрдХ рдЬреЛрдбрд╝реЗ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЕрдкрдиреА рдЧреИрд▓рд░реА рд╕реЗ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ...
"рдЙрдиреНрд╣реЗрдВ" рдХрдЪрд░рд╛ "рдЖрдЗрдХрди" рдкрд░ рдбреНрд░реЙрдк рдХрд░реЗрдВ ...
рд╡реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрдо рд╣реЛ рдЧрдП рд╣реИрдВ 0 ...
... рдФрд░ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ Collection View
, "рдХрдЪрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ" рдореЗрдВ рдЫрд┐рдкрд╛:
рдмреАрдЪ рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
рд░рди рдХреЗ рдмреАрдЪ рдЫрд╡рд┐ рдЧреИрд▓рд░реА рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЛ рдПрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, UserDefaults рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ JSON
ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝ рджреЗрдЧрд╛ рд╣рдорд╛рд░реЗ Controller
рдЪрд░ рд╡рд░ defailts ...
..., рдФрд░ рдореЙрдбрд▓ рдореЗрдВ ImageGallery рдФрд░ ImageModel рдкреНрд░реЛрдЯреЛрдХреЙрд▓ Codable :
рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ , рдХреЗ рдПрд░реЗ рд╕рд░рдгреА , рдпреВрдЖрд░рдПрд▓ , рдФрд░ рдбрдмрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ Codable , рддреЛ рд╣рдо рдХрд╛рдо рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдирд╛ рдХреБрдЫ рдФрд░ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ ImageGallery рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдбрд┐рдХреЛрдбрд┐рдВрдЧ JSON
редрд╣рдо ImageGallery рдХрд╛ JSON
рд╕рдВрд╕реНрдХрд░рдг рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ ?рдЗрд╕ рд╡рд┐рд╕реНрддрд╛рд░ рдЪрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░ json рдЬреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдХреЗ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ, рд╕реНрд╡рдпрдВ , рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ JSONEncoder.encode () рдореЗрдВ JSON
рдкреНрд░рд╛рд░реВрдк:
рдФрд░ рд╡рд╣ рд╕рдм рд╣реИред рдпрджрд┐ рдпрд╣ рд░реВрдкрд╛рдВрддрд░рдг рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рдпрд╛ рддреЛ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрд╡рд░реВрдк рдореЗрдВ рд╕реНрд╡рдпрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ JSON
рдпрд╛ рд╢реВрдиреНрдп рд╣реЛрдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ , рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрд╛рдж рд╡рд╛рд▓рд╛ рдХрднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ TYPE 100% рд╕рд╛рдВрдХреЗрддрд┐рдХ рд╣реИ ред рдкреНрд░рдпреБрдХреНрдд рд╡реИрдХрд▓реНрдкрд┐рдХ рдЪрд░ json рд╕рд┐рд░реНрдл рд╕рдорд░реВрдкрддрд╛ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдПредрдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ ImageGallery рдореЙрдбрд▓ рдХреЛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ JSON
ред рдХреНрдпрд╛ json рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреЗрдЯрд╛ рд╣реИ? рдЬрд┐рд╕реЗ UserDefaults рдореЗрдВ рдпрд╛рдж рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ редрдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдХрд┐рд╕реА рддрд░рд╣ рд╣рдо jsonJSON
рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ , рдФрд░ рдореИрдВ рдЙрдирд╕реЗ рдЕрдкрдиреЗ рдореЙрдбрд▓, ImageCallery рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ImageGallery рдХреЗ рд▓рд┐рдП рдПрдХ INITIALIZER рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ , рдЬрд┐рд╕рдХрд╛ рдЗрдирдкреБрдЯ рддрд░реНрдХ json рдбреЗрдЯрд╛ рд╣реИ ред рдпрд╣ рдЗрдирд┐рд╢рд▓рд╛рдЗрдЬрд╝рд░ рдПрдХ "рдЧрд┐рд░рдиреЗ рд╡рд╛рд▓рд╛" рдЗрдирд┐рд╢рд▓рд╛рдЗрдЬрд╝рд░ рд╣реЛрдЧрд╛ (JSON
failable
)ред рдпрд╣ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рдпрд╣ "рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИ" рдФрд░ рд░рд┐рдЯрд░реНрди рд╢реВрдиреНрдп :
рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рдирдпрд╛ рдорд╛рди рд╣реЛ рд░рд╣реА рд╣реИ newValue рдбрд┐рдХреЛрдбрд░ рджреНрд╡рд╛рд░рд╛ JSONDecoder , рдбреЗрдЯрд╛ рдХреЛ рдбрд┐рдХреЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ json , рдЬреЛ рдореЗрд░реЗ рдкреНрд░рд╛рд░рдВрднрдХрд░реНрддрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ рд╕реНрд╡рдпрдВ редрдореИрдВ рдпрд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдореИрдВ рдХреА рдПрдХ рдирдИ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╛рдкреНрдд imagegallery , рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореЗрд░реА рдкреНрд░рдпрд╛рд╕ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рдореИрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреА рд╢реВрдиреНрдп , рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ "рд╡рд┐рдлрд▓"редрдореБрдЭреЗ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рд╡рд┐рдлрд▓" ( fail
) рд╣реЛрдиреЗ рдХреЗ рдФрд░ рднреА рдХрдИ рдХрд╛рд░рдг рд╣реИрдВ , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЬреЛрд╕рдиJSON
рдбреЗрдЯрд╛ рд╣реЛрдЦрд░рд╛рдм рдпрд╛ рдЦрд╛рд▓реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рд╕рдм fail
рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ "рдлреЙрд▓" ( ) рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИредрдЕрдм рд╣рдо рдкрдврд╝реЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ JSON
рдбреЗрдЯрд╛ рдФрд░ рд╡рд╕реВрд▓реА рдореЙрдбрд▓ imagegallery рд╡рд┐рдзрд┐ viewWillAppear рд╣рдорд╛рд░реЗ Controller
...
... рдФрд░ рд╕рд╛рде рд╣реА рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдореЗрдВ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ didSet {} рдЧреБрдг imagegallery :
рд▓реЗрдЯреНрд╕ рдЖрд╡реЗрджрди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╣рдорд╛рд░реЗ рдЧреИрд▓рд░реА рднрд░рдиреЗ:
рд╣рдо рдЖрд╡реЗрджрди рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЕрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рдЧреИрд▓рд░реА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ UserDefaults рдореЗрдВ рд╕рд╣реЗрдЬреА рдЧрдИ рдЫрд╡рд┐рдпрд╛рдВ редрдирд┐рд╖реНрдХрд░реНрд╖ред
рдпрд╣ рдЖрд▓реЗрдЦ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдбреЗрдореЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди "рдЗрдореЗрдЬ рдЧреИрд▓рд░реА" рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддрдХрдиреАрдХ Drag & Drop
рдХреЛ рдПрдХ iOS
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ ред рдЗрд╕рд╕реЗ рдЫрд╡рд┐ рдЧреИрд▓рд░реА рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛, рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рд╕реЗ рдирдИ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ "рдлреЗрдВрдХрдирд╛", рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд▓реЛрдЧреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ред рдФрд░ рдЧреИрд▓рд░реА рдореЗрдВ рд╕рдВрдЪрд┐рдд рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреАредрдмреЗрд╢рдХ, рд╣рдо рдХрдИ рдРрд╕реЗ рд╡рд┐рд╖рдпрдЧрдд рдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реАрдзреЗ iPad рдпрд╛ iCloud рдбреНрд░рд╛рдЗрд╡ рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдЧреИрд▓рд░реА рдХреЛ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд UIDocument рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╣рдореЗрдВ рдЕрдореВрд░реНрддрддрд╛ рдХреЗ рдЕрдЧрд▓реЗ рд╕реНрддрд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧреАред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЖрд╡реЗрджрди рдореЗрдВ, рдЖрдкрдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ DocumentBrowserViewController рдШрдЯрдХ рджреНрд╡рд╛рд░рд╛ рджрд┐рдЦрд╛рдП рдЬрд╛рдПрдВрдЧреЗ , рдмрд╣реБрдд рд╣реА рдЖрд╡реЗрджрди рдХреЗ рд╕рдорд╛рди Files
ред рдпрд╣ рдЖрдкрдХреЛ "рдЗрдореЗрдЬ рдЧреИрд▓рд░реА" рдкреНрд░рдХрд╛рд░ рдХреА UIDocument рдЫрд╡рд┐рдпрд╛рдВ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬреЛ рдЖрдкрдХреЗ iPad
рдФрд░ рджреЛрдиреЛрдВ рдкрд░ iCloud Drive
, рд╕рд╛рде рд╣реА рджреЗрдЦрдиреЗ рдФрд░ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВредрд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИредPS рддрдВрддреНрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдкрд╣рд▓реЗ Drag & Drop
рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдбреЗрдореЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдХреЛрдб Github рдкрд░ рд╣реИ ред