
рд╣реЗрд▓реЛ, рд╣реЗрдмрд░ рдХреЗ рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ!
рдореИрдВ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╕рдордп рд╕реЗ рдПрдХ рдлреНрд░реАрд▓рд╛рдВрд╕рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдХрднреА-рдХрднреА рдореИрдВ рдорд╕реНрддрд┐рд╖реНрдХ рдХреЛ рдЙрддрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП $ 100-200 рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рд░рд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓реЗрддрд╛ рд╣реВрдВред рдЗрд╕ рдмрд╛рд░, рдХреНрд▓рд╛рдЗрдВрдЯ рдиреЗ рдореБрдЭреЗ iPhone рдкрд░ рдмрд╛рд╣рд░реА рд╡реЙрд▓реНрдпреВрдо рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рдЖрдИрдУрдПрд╕ рдореЗрдВ рдмрд╛рд╣рд░реА рдмрдЯрди рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдПрдкреАрдЖрдИ рдореМрдЬреВрдж рдирд╣реАрдВ рдерд╛: рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╕рд┐рд╕реНрдЯрдо рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рд╖рд┐рджреНрдз рдерд╛ред рдЗрд╕рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреИрд╕реЗ "рдХреИрдорд░рд╛ +" рдФрд░ "рдХреИрдорд░рд╛ рдкреНрд░реЛ" рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдРрд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╕рдВрдпреЛрдЧ рд╕реЗ, iOS 5 рдореЗрдВ, Apple рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рд╕реНрд╡рдпрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛: рдЖрдк рдЕрдм рд╡реЙрд▓реНрдпреВрдо рдХреА рдХреБрдВрдЬреА рджрдмрд╛рдХрд░ рдХреИрдорд░реЗ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рддрд╕реНрд╡реАрд░ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдмрд╛рд╣рд░реА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рджреЗрдЦреЗрдВред рд╕реНрд░реЛрдд рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕рдВрд▓рдЧреНрди рд╣реИрдВред
рдХрд╛рд░реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛
рдЧреБрдЧрд▓реА рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдПрдХ рдЦреБрд▓реЗ
RBVolumeButtons рд╕рдорд╛рдзрд╛рди рдкрд░ рдареЛрдХрд░
рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдСрдбрд┐рдпреЛ рд╕рддреНрд░ рдЦреЛрд▓рддрд╛ рд╣реИ рдФрд░ рд╡реЙрд▓реНрдпреВрдо рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЛ рд╕реБрдирдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рд╡рд░реНрдЧ рдиреЗ рдХреИрдорд░реЗ рдХреЛ рдЕрдкреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛: рдПрдХ рдирдП рдСрдбрд┐рдпреЛ рд╕рддреНрд░ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдХреЗ, рд╣рдордиреЗ рдХреИрдорд░реЗ рдХреЗ рдСрдбрд┐рдпреЛ рд╕рддреНрд░ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░ рджрд┐рдпрд╛ред рдореИрдВрдиреЗ рдЕрдкрдиреА рдмрд╛рдЗрдХ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдкрдХреНрд╖ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд┐рдпрд╛; рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЫрд┐рдкрд╛рддреЗ рд╣реБрдП рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ NKVolumeButtons рд▓рд┐рдЦреЗрдВред
рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдбрд┐рдмреНрд░реАрдкрд┐рдВрдЧ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд MediaPlayer рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗ MPMusicPlayer рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рджреЛ рд╕рд┐рдЧреНрд▓рдЯрди рдореНрдпреВрдЬрд┐рдХ рдкреНрд▓реЗрдпрд░ рд╣реИрдВ: рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдФрд░ рджреВрд╕рд░рд╛ рд╕рд┐рд╕реНрдЯрдо, рдкреВрд░реЗ рдлреЛрди рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдпред рд╣рдо рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреАрдд рдЦрд┐рд▓рд╛рдбрд╝реА рдХреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╕реБрдиреЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, NKVolumeButtons рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг рд╡рд┐рдзрд┐ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
рдореБрдЭреЗ рдзрдХреНрдХрд╛ рджреЛ![[MPMusicPlayerController applicationMusicPlayer] addObserver:self forKeyPath:@"volume" options:NSKeyValueObservingOptionNew context:nil];
KVO рдХреЗ рдХреИрдирди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдм рдХреБрдЫ: рдЕрдкрдиреА рдЦреБрдж рдХреА рдмрд╛рдЗрдХ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЕрдЪреНрдЫреА рдкреБрд░рд╛рдиреА рд╢реНрд░реЗрдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ NSObject рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИред рддрджрдиреБрд╕рд╛рд░, рд╣рдореЗрдВ рдПрдХ рдШрдЯрдирд╛ рд╣реИрдВрдбрд▓рд░ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдЬрдм рд╣рдо рдЬрд┐рд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╕реБрди рд░рд╣реЗ рд╣реИрдВ, рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред NKVolumeButtons рдореЗрдВ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ!
рдореБрдЭреЗ рдзрдХреНрдХрд╛ рджреЛ! - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
рдЖрдЗрдП рдХреЛрдб рдХрд╛ рдХреНрд░рдо рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ:
- рд╡рд░реНрддрдорд╛рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡реЙрд▓реНрдпреВрдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
- рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдорд╛рддреНрд░рд╛ рдмрдврд╝ рдЧрдИ рд╣реИ рдпрд╛ рдХрдо рд╣реЛ рдЧрдИ рд╣реИ
- рд╡реЙрд▓реНрдпреВрдо рдХреЛ рдЙрд╕рдХреЗ рдореВрд▓ рдореВрд▓реНрдп рдкрд░ рд▓реМрдЯрд╛рдПрдВред
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдХреНрдпрд╛ рд╣реИ? рдореИрдВ рд╕рдордЭрд╛рддрд╛ рд╣реВрдВ: рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рд╡реЙрд▓реНрдпреВрдо рд╢реВрдиреНрдп рдкрд░ рд╣реИ? рддрдм рд╡реЙрд▓реНрдпреВрдо рдбрд╛рдЙрди рдХреА рдХреЛ рджрдмрд╛рдиреЗ рд╕реЗ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣реА рд╣рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрддрд░ рдкрд░ рд╡реЙрд▓реНрдпреВрдо рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдо рдиреГрддреНрдп рдХрд░реЗрдВрдЧреЗред рд╡реЙрд▓реНрдпреВрдо рдкреИрд░рд╛рдореАрдЯрд░ 0 рд╕реЗ 1 рддрдХ рдорд╛рди рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдордзреНрдп - 0.5 рдХрд╛ рдЪрдпрди рдХрд░реЗрдВрдЧреЗред NKVolumeButtons рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
рдореБрдЭреЗ рдзрдХреНрдХрд╛ рджреЛ! [[MPMusicPlayerController applicationMusicPlayer] setVolume:0.5];
рдФрд░ рдЕрдм рдЪрд▓реЛ рд╡реЙрд▓реНрдпреВрдордЕрдк рдФрд░ рд╡реЙрд▓реНрдпреВрдордбрд╛рдЙрди рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо NKVolumeButtons рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬреЛ рдмрд╛рд╣рд░ рд╕реЗ - рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ рд╕реЗ рд╕реБрд▓рдн рд╣реИрдВред рд╣рдо рдлрд╝рд╛рдЗрд▓ NKVolumeButtons.h рдХреЛ рдирд┐рдореНрди рд░реВрдк рдореЗрдВ рд▓рд╛рддреЗ рд╣реИрдВ:
рдореБрдЭреЗ рдзрдХреНрдХрд╛ рджреЛ! typedef void (^ButtonBlock)(); #import <Foundation/Foundation.h> @interface NKVolumeButtons : NSObject @property (nonatomic, copy) ButtonBlock upBlock; @property (nonatomic, copy) ButtonBlock downBlock; @end
рдпрд╣рд╛рдВ, рд╣рдордиреЗ рдмрд╕ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЗ рд╕реЗ рдмрд╛рд╣рд░ рд╕реЗ рдХреЛрдб рдмреНрд▓реЙрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реА рд╣реИ рдЬрд┐рд╕реЗ рд╡реЙрд▓реНрдпреВрдо рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рджрдмрд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдорд╛рд░реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рдВрд╢реНрд▓реЗрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд NKVolumeButtons рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
рдореБрдЭреЗ рдзрдХреНрдХрд╛ рджреЛ! @synthesize upBlock = _upBlock; @synthesize downBlock = _downBlock;
рдФрд░, рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдХ рдХреЛ рд╕рд╣реА рд╕рдордп рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛:
рдореБрдЭреЗ рдзрдХреНрдХрд╛ рджреЛ! рдФрд░ рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╣реИ! рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рд╡реЙрд▓реНрдпреВрдо рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рд╡реЙрд▓реНрдпреВрдо рд╕рдВрдХреЗрддрдХ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдЦреИрд░, рд╣рдо рдПрдХ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА RBVolumeButtons рдореЗрдВ рдерд╛ред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╡рд╣ рдФрд░ рдУрдкрдирд╕реЛрд░реНрд╕ рдПрдХ рджреВрд╕рд░реЗ рдХреА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣реИ рдирд╛? NKVolumeButtons.m рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
рдореБрдЭреЗ рдзрдХреНрдХрд╛ рджреЛ! рд╡рд╣ рд╕рдм рд╣реИ! рд╣рдо рдХреЗрд╡рд▓ рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, NKVolumeButtons рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рдХреЗ рдЖрд╡рд╢реНрдпрдХ рдмреНрд▓реЙрдХ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рд░рд▓ рдмреИрд╕рд╛рдЦреА рдПрдкреАрдЖрдИ рдмрд╛рд╣рд░реА рдХреБрдВрдЬреА рдХреА рдХрдореА рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреА рд╣реИред
рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдЧреАрдереВрдм рдкрд░ рд╕реНрд░реЛрдд рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдЪрд╛рдирдХ рдХреЛрдИ рдЕрд╢реБрджреНрдзрд┐ рдпрд╛ рдЯрд╛рдЗрдкреЛ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ
рдЖрдкрдХрд╛ рдореЗрд░реЗ рдЖрд░рд╛рдорджрд╛рдпрдХ рдЕрдзреНрдпрдпрди рдХрдХреНрд╖ рдореЗрдВ рд╕реНрд╡рд╛рдЧрдд рд╣реИред