10.6. ΠΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΊΠ°
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΡΠΈΠΏΠΊΠ°.
Π Π΅ΡΠ΅Π½ΠΈΠ΅
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° UIPinchGestureRecognizer ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π΅Π³ΠΎ ΠΊ Π²Π°ΡΠ΅ΠΌΡ ΡΠ΅Π»Π΅Π²ΠΎΠΌΡ Π²ΠΈΠ΄Ρ, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° addGestureRecognizer:, ΠΎΡΠ½ΠΎΡΡΡΠΈΠΌΡΡ ΠΊ ΠΊΠ»Π°ΡΡΡ UIView:
β (void)viewDidLoad {
[super viewDidLoad];
CGRect labelRect = CGRectMake(0.0f, /* X */
0.0f, /* Y */
200.0f, /* Π¨ΠΈΡΠΈΠ½Π° */
200.0f); /* ΠΡΡΠΎΡΠ° */
self.myBlackLabel = [[UILabel alloc] initWithFrame: labelRect];
self.myBlackLabel.center = self.view.center;
self.myBlackLabel.backgroundColor = [UIColor blackColor];
/* ΠΠ΅Π· ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΡΠΈΠΏΠΊΠΎΠ² ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ. */
self.myBlackLabel.userInteractionEnabled = YES;
[self.view addSubview: self.myBlackLabel];
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΡΠΈΠΏΠΊΠΎΠ². */
self.pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc]
initWithTarget: self
action:@selector(handlePinches:)];
/* ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΡΠΎΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΠΆΠ΅ΡΡΠΎΠ² ΠΊ Π²ΠΈΠ΄Ρ. */
[self.myBlackLabel
addGestureRecognizer: self.pinchGestureRecognizer];
}
ΠΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ Π²ΠΈΠ΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΊ:
#import Β«ViewController.hΒ»
@interface ViewController ()
@property (nonatomic, strong)
UIPinchGestureRecognizer *pinchGestureRecognizer;
@property (nonatomic, strong) UILabel *myBlackLabel;
@property (nonatomic, unsafe_unretained) CGFloat currentScale;
@end
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
Π©ΠΈΠΏΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π»Π΅Π³ΠΊΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡ (ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ ΠΈ ΡΠΌΠ΅Π½ΡΡΠ°ΡΡ) ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π±ΡΠ°ΡΠ·Π΅Ρ Safari Π² iOS Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΈΠΏΠΊΠΎΠΌ Π½Π° Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ Π΅Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅. Π©ΠΈΠΏΠΎΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² Π΄Π²ΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ : ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΡΠ°Π±Π°. ΠΡΠΎ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΡΠΉ ΠΆΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π° ΡΠ΅Π½ΡΠΎΡΠ½ΠΎΠΌ ΡΠΊΡΠ°Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π΄Π²ΡΠΌΡ ΠΏΠ°Π»ΡΡΠ°ΠΌΠΈ.
ΠΠ°Π½Π½ΡΠΉ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΠΆΠ΅ΡΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π±ΡΠ²Π°ΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡΡ :
β’ UIGestureRecognizerStateBegan;
β’ UIGestureRecognizerStateChanged;
β’ UIGestureRecognizerStateEnded.
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΏΠΎΠΊ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π½, Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (ΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΠΈΠΏΠΎΠΊ Π½Π΅ ΠΎΠΊΠΎΠ½ΡΠΈΡΡΡ). Π Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ Π΄ΠΎΡΡΡΠΏ ΠΊ Π΄Π²ΡΠΌ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΡΠΈΠΏΠΊΠΎΠ²: scale ΠΈ velocity. scale β ΡΡΠΎ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΠΎ ΠΎΡΡΠΌ X ΠΈ Y, ΡΡΠΎΠ±Ρ ΠΎΡΡΠ°Π·ΠΈΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΆΠ΅ΡΡΠ°. velocity β ΡΡΠΎ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠΈΠΏΠΊΠ°, ΠΈΠ·ΠΌΠ΅ΡΡΠ΅ΠΌΠ°Ρ Π² ΠΏΠΈΠΊΡΠ΅Π»Π°Ρ Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ. Π‘ΠΊΠΎΡΠΎΡΡΡ ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ ΠΏΠ°Π»ΡΡΡ Π΄Π²ΠΈΠΆΡΡΡΡ Π½Π°Π²ΡΡΡΠ΅ΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ, ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ β Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΡΠ°Π·Π½ΡΠ΅ ΡΡΠΎΡΠΎΠ½Ρ.
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° scale ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ CGAffineTransformMakeScale ΠΈΠ· ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° Core Graphics, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π°ΡΡΠΈΠ½Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅. Π’Π°ΠΊΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²Ρ transform Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ° UIView, ΠΎΠ½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
β (void) handlePinches:(UIPinchGestureRecognizer*)paramSender{
if (paramSender.state == UIGestureRecognizerStateEnded){
self.currentScale = paramSender.scale;
} else if (paramSender.state == UIGestureRecognizerStateBegan &&
self.currentScale!= 0.0f){
paramSender.scale = self.currentScale;
}
if (paramSender.scale!= NAN &&
paramSender.scale!= 0.0){
paramSender.view.transform =
CGAffineTransformMakeScale(paramSender.scale,
paramSender.scale);
}
}
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ scale ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΠΆΠ΅ΡΡΠΎΠ² ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΡΡΡ Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠΈΠΏΠΎΠΊ, ΠΌΡ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° (Instance Property) ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π²ΠΈΠ΄Π°, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠΌ currentScale. Π ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π½ Π½ΠΎΠ²ΡΠΉ ΠΆΠ΅ΡΡ, ΠΌΡ ΠΎΡΡΡΠΈΡΡΠ²Π°Π΅ΠΌ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΡΠΎ ΠΈ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ Π² ΠΊΠΎΠ΄Π΅.
ΠΠ»Π°Π²Π° 11. Π‘Π΅ΡΠ΅Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, JSON, XML ΠΈ Twitter
11.0. ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Π‘ΡΠΎΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ iOS ΠΊ ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΡ β ΠΈ ΠΎΠ½ΠΎ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π΅Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅ ΡΠ΅Π±Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ Π²Π΅Π»ΠΈΠΊΠΎΠ»Π΅ΠΏΠ½ΡΠ΅ ΡΠΎΠ½ΠΎΠ²ΡΠ΅ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π΄Π»Ρ Π Π°Π±ΠΎΡΠ΅Π³ΠΎ ΡΡΠΎΠ»Π°. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΠ· Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΡΡΠΈΡ ΡΠΈΡΡΠ½ΠΊΠΎΠ² Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ iOS. Π ΡΠ΅ΠΏΠ΅ΡΡ Π²ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠΌ ΡΠ΅Π±Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄Π΅Π»Π°Π΅Ρ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ Π°ΡΡΠΎΡΡΠΈΠΌΠ΅Π½Ρ ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π΄Π΅Π½Ρ, Π½Π΅Π΄Π΅Π»Ρ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΡΡ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-ΡΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ²Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ ΠΈ β ΠΎΠΏΠ°! ΠΠ°ΡΡΠ° Π½ΠΎΠ²ΡΡ ΡΠΎΠ½ΠΎΠ²ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π ΡΡΠΎΠΌ ΠΈ Π΅ΡΡΡ ΠΈΠ·ΡΠΌΠΈΠ½ΠΊΠ° ΡΠ°Π±ΠΎΡΡ Ρ Π²Π΅Π±-ΡΠ»ΡΠΆΠ±Π°ΠΌΠΈ ΠΈ ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠΎΠΌ. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΡΠ΄Π°, Π΅ΡΠ»ΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡΡ Π±Π°Π·ΠΎΠ²ΡΠΌΠΈ Π·Π½Π°Π½ΠΈΡΠΌΠΈ ΠΎ ΡΠ°Π±ΠΎΡΠ΅ Π² Π‘Π΅ΡΠΈ, ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ JSON, XML ΠΈ Twitter. ΠΡ, Π΅ΡΠ΅ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΠ·Π²Π΅ΡΡΠ½Π°Ρ ΠΊΡΠ΅Π°ΡΠΈΠ²Π½ΠΎΡΡΡ.
iOS SDK ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΊ ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΡ, ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈ ΠΎΡΡΡΠ»Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅. ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»Π°ΡΡΠ° NSURLConnection. Π‘Π΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ JSON Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅ NSJSONSerialization. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°Π·Π±ΠΎΡ XML ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ NSXMLParser, Π° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ Twitter ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ Π²ΠΎ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ΅ Twitter.
Π SDK iOS 7 ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ, ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΌΡ Π½Π°ΡΡΠΈΠΌΡΡ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ ΠΊΠ»Π°ΡΡΠ΅ NSURLSession, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΠΎΡΡΡΡ Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΈ ΡΠ΅ΡΠ°Π΅Ρ ΡΡΡ Π·Π°Π΄Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΡΠ½ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡ NSURLConnection. Π ΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΠΎΡΡΠΈ ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π΄Π°Π»Π΅Π΅ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅.
11.1. ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ NSURLConnection
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΠ°ΠΉΠ» Ρ ΠΈΠΌΠ΅ΡΡΠ΅Π³ΠΎΡΡ URL.
Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΊΠ»Π°ΡΡ NSURLConnection Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌ Π·Π°ΠΏΡΠΎΡΠΎΠΌ.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
ΠΠ»Π°ΡΡ NSURLConnection ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π²ΡΠΌΡ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ β Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌ ΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌ. ΠΡΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ, ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΡΡΠΎΠΌ Π½ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅. Π‘ΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ, Π° ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΏΡΡΠΌΠΎ Π² Ρ ΠΎΠ΄Π΅ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ.
ΠΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΠΎΠ»Π°Π³Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ Π³Π»Π°Π²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ, Π½ΠΎ ΡΡΠΎ Π½Π΅Π²Π΅ΡΠ½ΠΎ. Π‘ΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π²ΡΠ΅Π³Π΄Π° Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΡΠΎΡ ΠΏΠΎΡΠΎΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π½ΠΎ. ΠΡΠ»ΠΈ Π²Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΈΠ· Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° β Π΄Π°, Π³Π»Π°Π²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π±ΡΠ΄Π΅Ρ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½. ΠΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠ΅ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, Π±ΡΠ΄Π΅Ρ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΡΠΎΠΌ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ, ΡΡΠΎ ΠΎΠ½ΠΎ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΏΠΎΠ²Π»ΠΈΡΠ΅Ρ Π½Π° Π³Π»Π°Π²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡΠΌΠΈ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄Π»Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΡΠ΅Π΄Π° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ, Π° Π΄Π»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ β Π½Π΅Ρ.
Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅.
1. ΠΠΌΠ΅ΡΡ URL ΠΈΠ»ΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ NSString.
2. ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΊΡ Π² ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ NSURL.
3. ΠΠΎΠΌΠ΅ΡΡΠΈΡΡ URL Π² URL-Π·Π°ΠΏΡΠΎΡΠ΅ ΡΠΈΠΏΠ° NSURLRequest, Π° Π΅ΡΠ»ΠΈ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌΠΈ URL β Π² ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ NSMutableURLRequest.
4. Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ NSURLConnection ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅ΠΌΡ URL-Π·Π°ΠΏΡΠΎΡ.
ΠΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΏΠΎ URL Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΊΠ»Π°ΡΡΠ° sendAsynchronousRequest: queue: completionHandler:, ΠΎΡΠ½ΠΎΡΡΡΠ΅Π³ΠΎΡΡ ΠΊ ΠΊΠ»Π°ΡΡΡ NSURLConnection. ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
β’ sendAsynchronousRequest β Π·Π°ΠΏΡΠΎΡ ΡΠΈΠΏΠ° NSURLRequest, ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠΉ ΡΠ°Π½Π΅Π΅;
β’ queue β ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ. ΠΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π΅ ΡΡΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ;
β’ completionHandler β Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ, ΠΊΠΎΠ³Π΄Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ, ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΎ. ΠΡΠΎΡ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°:
β’ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° NSURLResponse, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΎΡΠ²Π΅Ρ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ Π½Π°ΠΌΠΈ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ°, β ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΎΡΠ²Π΅ΡΠ°;
β’ Π΄Π°Π½Π½ΡΠ΅ ΡΠΈΠΏΠ° NSData ΠΏΡΠΈ ΠΈΡ Π½Π°Π»ΠΈΡΠΈΠΈ. ΠΡΠΎ Π±ΡΠ΄ΡΡ Π΄Π°Π½Π½ΡΠ΅, ΡΠΎΠ±ΡΠ°Π½Π½ΡΠ΅ Π² Ρ ΠΎΠ΄Π΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΏΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ URL;
β’ ΠΎΡΠΈΠ±ΠΊΠ° ΡΠΈΠΏΠ° NSError Π² ΡΠ»ΡΡΠ°Π΅ Π΅Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ.
ΠΠ΅ΡΠΎΠ΄ sendAsynchronousRequest: queue: completionHandler: Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅. ΠΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ΅ΡΠΈΡΡ Π·Π°Π΄Π°ΡΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ, ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²Π΅ΡΠ½ΡΠ»ΠΈΡΡ ΠΊ Π³Π»Π°Π²Π½ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ.
ΠΡΠ°ΠΊ, Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ΅ΠΎΡΠΈΠΈ, ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌ. Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠΏΡΡΠ°Π΅ΠΌΡΡ ΡΠΎΠ±ΡΠ°ΡΡ HTML-ΠΊΠΎΠ½ΡΠ΅Π½Ρ Ρ Π΄ΠΎΠΌΠ°ΡΠ½Π΅ΠΉ ΡΡΡΠ°Π½ΠΈΡΡ Apple, Π° ΠΏΠΎΡΠΎΠΌ Π²ΡΠ²Π΅Π΄Π΅ΠΌ ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅ Π² ΠΎΠΊΠ½Π΅ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ:
NSString *urlAsString = @"http://www.apple.com";
NSURL *url = [NSURL URLWithString: urlAsString];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL: url];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection
sendAsynchronousRequest: urlRequest