Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«iOS. ΠŸΡ€ΠΈΠ΅ΠΌΡ‹ программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 100

Автор Π’Π°Π½Π΄Π°Π΄ Нахавандипур

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