IOS рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдлреЛрдЯреЛ рдПрдбрд┐рдЯрд░ рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВред VKontakte рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рд░рд┐рдкреЛрд░реНрдЯ


рд╕рднреА habrazhitel рдФрд░ рд░реБрдЪрд┐ рдХреЛ рдирдорд╕реНрдХрд╛рд░!
рдХрд▓ (рдЕрдЪрд╛рдирдХ) VKontakte рд╕реЗ iOS рдХреЗ рд▓рд┐рдП рдлреЛрдЯреЛ рд╕рдВрдкрд╛рджрдХреЛрдВ рдХреА рдПрдХ рдФрд░ рд╢рд╛рдирджрд╛рд░ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдбрд┐рд▓реАрд╡рд░реА рдХрд╛ рдЕрдВрдд рдерд╛ред рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЗрд╕ рдЙрддреНрдкрд╛рдж рдХреЗ рдореЗрд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рд░реЗрдХ рдФрд░ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдЬреЛ рдореБрдЭреЗ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред

"рдЗрдВрдЬрди"


рд╢реВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛: "рд╕рднреА рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдзреАрдорд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП" - рд╕рд╡рд╛рд▓ рдЙрдард╛рдпрд╛, "рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдЗрдВрдЬрди рд▓реЗрдирд╛ рд╣реИред" рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди 5 рд╕реЗрдХрдВрдб рдореЗрдВ google рд╣реИ рдФрд░ рдЗрд╕реЗ GPUImage рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЗрд░реЗ рджреЛрд╕реНрддреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ (рд╣рдо рдЙрд╕реЗ рдирд╛рдо рд╕реЗ рдирд╣реАрдВ рдмреБрд▓рд╛рдПрдВрдЧреЗ) рдиреЗ рдХрд╣рд╛ рдХрд┐ рдЙрд╕рдХреЗ рд▓рд┐рдП, 140 рдЦреБрд▓реЗ рдореБрджреНрджреЗ рд╣реИрдВ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдпрд╣ рд╕рдм рдХреБрдЫ рдЦреБрдж рд▓реЗрдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИред рд▓реЗрдХрд┐рди рд╕рдордп рдПрдХ рджрдпрд╛ рдерд╛, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЕрдкрдиреА рддрд╛рдХрдд рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдирд┐рд╖реНрдкрдХреНрд╖ рд░реВрдк рд╕реЗ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рд┐рдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓рдЧрднрдЧ рд╕рднреА рдкреНрд░рддрд┐рднрд╛рдЧреА рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ :)
рдмреЗрд╢рдХ, GPUImage рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ , рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд▓рдЧрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрдореЛрд░реА рдЦрдкрдд рдХреЗ рд╕рд╛рде рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛, рдЬреЛ рдПрдХ рдЕрдЬреНрдЮрд╛рдд рджрд┐рд╢рд╛ рдореЗрдВ рд▓реАрдХ рд╣реЛрддреА рд╣реИ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдпрд╛ рддреЛ рдЖрдкрдХреЗ рдХреЛрдб рдХреА рд╕рдорд╕реНрдпрд╛ рдпрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ - рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдпрджреНрдпрдкрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕рдореВрд╣ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рд╕реВрдХреНрд╖реНрдо рдмрд┐рдВрджреБ рд╕рд┐рд░рджрд░реНрдж рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдЖрдИ рдЬрдм рдореИрдВ рдХреБрдЫ рдХрд░ рд░рд╣рд╛ рдерд╛:
[stillCamera addTarget:filter]; 

рдпрд╛
 [filter prepareForImageCapture]; 

рджреЛ рдмрд╛рд░, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрдореГрддрд┐ рдХреЗ рдмреНрд░рд╣реНрдорд╛рдВрдбреАрдп рдкреИрдорд╛рдиреЗ рдХреЛ рдЦрд╛ рдЧрдпрд╛ рдФрд░ рд╕рд░реНрд╡реЗрдХреНрд╖рдг (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдзрдмреНрдмрд╛ рдХреЗ рд╕рд╛рде) рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдлрд╝рд┐рд▓реНрдЯрд░ рдЙрдЪреНрдЪ-рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдмрдирд╛рд╡рдЯ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ 640kb рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛, 1024x1536 рдкрд┐рдХреНрд╕реЗрд▓ рд╕рднреА рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдВрдЧреЗ, рдФрд░ рдореИрдВрдиреЗ рджрд┐рдП рдЧрдП рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд┐рдпрд╛:
 CGSize forceSize = CGSizeMake(1024, 1024 * 1.5); if (!frontCameraSelected) [processFilter forceProcessingAtSize:forceSize]; @autoreleasepool { [stillCamera capturePhotoAsJPEGProcessedUpToFilter:processFilter ... ... 


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

рдлрд┐рд▓реНрдЯрд░



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

рдПрдХ рдЕрдиреБрдорд╛рдирд┐рдд рдлрд╝рд┐рд▓реНрдЯрд░ рдЪрдпрди рдкреНрд░рдХреНрд░рд┐рдпрд╛:


рдореИрдВрдиреЗ рдкреНрд░рд╕реНрддреБрдд рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рдЪрдпрди рдкрд░ рд▓рдЧрднрдЧ 3 рджрд┐рди (1-2 рдШрдВрдЯреЗ рдкреНрд░рддреНрдпреЗрдХ) рдмрд┐рддрд╛рдП, рдФрд░ рдлрд┐рд░ рдореИрдВрдиреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдордЬрд╝реЗ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЖрда-рдмрд┐рдЯ рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛ рд╣реИ:


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореИрдВрдиреЗ рдлрд┐рд▓реНрдЯрд░ рдХреА рдПрдХ рд╢реНрд░реЗрдгреА рдмрдирд╛рдИ рдЬреЛ рд╕рдореВрд╣ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЧрдИ рдереАред рдкреНрд░рд╛рд░рдВрдн рдФрд░ рдЖрдВрддрд░рд┐рдХ рдХреЙрд▓ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 -(void)getFilters { /* Contrast : 1.032491 Gamma : 1.196751 Sepia : 0.442238 Saturation : 1.198556 */ GPUImageContrastFilter * contrast = [[GPUImageContrastFilter alloc] init]; contrast.contrast = 1.032491f; [self prepare:contrast]; GPUImageGammaFilter * gamma = [[GPUImageGammaFilter alloc] init]; gamma.gamma = 1.196751; [self prepare:gamma]; GPUImageSepiaFilter * sepia = [[GPUImageSepiaFilter alloc] init]; sepia.intensity = 0.442238; [self prepare:sepia]; GPUImageSaturationFilter * saturation = [[GPUImageSaturationFilter alloc] init]; saturation.saturation = 1.198556; [self prepare:saturation]; } 


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

рд╕реНрдХреЗрд▓рд┐рдВрдЧ


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

 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGPoint offset = scrollView.contentOffset; CGSize size = scrollView.contentSize; CGFloat scrollViewWidth = scrollView.frame.size.width, scrollViewHeight = scrollView.frame.size.height; translationX = 0; float a = size.width - scrollViewWidth, b = size.height - scrollViewWidth; if ((int)a != 0) { translationX = (a / scrollViewWidth) * (0.5f - offset.x / a) * 2; } translationY = 0; if ((int)b != 0) { translationY = (b / scrollViewWidth) * (0.5f - offset.y / b) * 2; } if (size.height < size.width) { translationX *= aspectRatio; translationY *= aspectRatio; } CGAffineTransform resizeTransform = CGAffineTransformMakeScale(scrollView.zoomScale / scrollView.minimumZoomScale, scrollView.zoomScale / scrollView.minimumZoomScale); resizeTransform.tx = translationX; resizeTransform.ty = translationY; transformFilter.affineTransform = resizeTransform; [self fastRedraw]; //  } 


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

рдЖрдИрдлреЛрди 5 рд╕рдкреЛрд░реНрдЯ


рдпрд╣ рдмрд╣реБрдд рдХрдард┐рди рд╡рд┐рд╖рдп рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдкрдХреЛ рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрд╡реЗрджрди рдХреЗрд╡рд▓ рдЦрд┐рдВрдЪрд╛рд╡ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд▓реНрдХрд┐ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рднреА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, 80% рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рд╢реЗрд╖ 20% рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ:
 - (BOOL)hasFourInchDisplay { return ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && [UIScreen mainScreen].bounds.size.height == 568.0); } 

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

рд╣рд╛рд▓ рдХреА рддрд╕реНрд╡реАрд░реЗрдВ


рджрд┐рди рдореЗрдВ рдЬрдм рд╕рдм рдХреБрдЫ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рддреИрдпрд╛рд░ рдерд╛, "рдЕрддреАрдд рдХреА рддрд╕реНрд╡реАрд░реЗрдВ" рдПрдХ рдирдпрд╛ рд╕рд┐рд░рджрд░реНрдж рдмрди рдЧрдИрдВред рдЙрдирдХреА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╕рдордп рдкрд░ рдврдВрдЧ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ: рдПрдХ рдлреЛрдЯреЛ - рдЕрдкрдбреЗрдЯ рд▓рд┐рдпрд╛, рдЧреИрд▓рд░реА рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ - рдЕрдкрдбреЗрдЯред
рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмрд╛рдХреА рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреИрд╕реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрд╕реЗрдЯрд╕реЗрдЯ рдФрд░ рдПрдирд╛рдорд░реНрдЯрд╕реЗрдЯреНрд╕рдПрдЯрдПрдВрдбрдПрдВрдбрдПрдХреНрд╕ enumerateAssetsAtIndexes ... рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рддрд╕реНрд╡реАрд░реЗрдВ рдорд┐рд▓реАрдВред рдЬрдм рдЖрдк рдЕрдкрдиреА рд╕рдВрдкрддреНрддрд┐рдпрд╛рдВ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╡рд┐рдзрд┐ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ, рдЧреИрд▓рд░реА рд╕реЗ рдХреБрдЫ рд╣рдЯрд╛рдПрдВ, рдФрд░ рдлрд┐рд░ рдЖрд╡реЗрджрди рдХреЛ рдлрд┐рд░ рд╕реЗ рджрд░реНрдЬ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЕрд╡реИрдз рд╕реЗрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА [NSIndexSet indexSetWithIndexesInRange:assetsRange] рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкреНрд░рд╕рд╡ рдХреЗ рдЖрдЦрд┐рд░реА рдШрдВрдЯреЛрдВ рддрдХ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдиреЗ рдореБрдЭреЗ рд╕рддрд╛рдпрд╛, рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ рдареАрдХ рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдПрдХ рдЙрдкрд╕рдВрд╣рд╛рд░ рдХреЗ рдмрдЬрд╛рдп


рдЗрди рджреЛ рд╣рдлреНрддреЛрдВ рдХреЗ рджреМрд░рд╛рди, рдореБрдЭреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рдорд┐рд▓рд╛, рдФрд░ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдкрд╣рд▓реБрдУрдВ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛, рджреЛрдиреЛрдВ рдореЗрдВ рд╡рд┐рдХрд╛рд╕, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдФрд░ рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдорд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ред
рдореИрдВ рд╕рднреА рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рд╢реБрднрдХрд╛рдордирд╛рдПрдБ рдФрд░ рдкреБрд░рд╕реНрдХрд╛рд░ рджреЗрдирд╛ рдЪрд╛рд╣реВрдБрдЧрд╛! рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП - рдкрд╣рд▓реЗ;)

PS рдореИрдВ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрд░реЛрдд рдХреЛрдб рдкреЛрд╕реНрдЯ рдХрд░реВрдБрдЧрд╛ред рдХрд┐ рдХреЛрдИ рдЬреНрдпрд╛рджрддреА рдирд╣реАрдВ рд╣реБрдИред

рдкреАрдкреАрдПрд╕ рддреАрд╕рд░реЗ рджреМрд░ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ: github.com/Dreddik/Phostock
рд╕реНрд░реЛрдд рдХреЛрдб рдмрд╣реБрдд рдЧрдВрджрд╛ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рдЬрд▓реНрджреА рдФрд░ рдЕрдХреНрд╕рд░ рд╡рд┐рдЪрд╛рд░рд╣реАрди рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ :)
Xcode 4.5 рдФрд░ рдКрдкрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

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


All Articles