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

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

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

@end


@implementation ViewController


β€” (void)viewDidLoad {

[super viewDidLoad];


/* Π˜Π½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΡƒΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. */

self.swipeGestureRecognizer = [[UISwipeGestureRecognizer alloc]

initWithTarget: self

action:@selector(handleSwipes:)];


/* ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ ТСсты смахивания,

Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ справа Π½Π°Π»Π΅Π²ΠΎ. */

self.swipeGestureRecognizer.direction =

UISwipeGestureRecognizerDirectionLeft;


/* ΠΡƒΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Π»Π΅Ρ†. */

self.swipeGestureRecognizer.numberOfTouchesRequired = 1;


/* Π”обавляСм ΠΊ Π²ΠΈΠ΄Ρƒ. */

[self.view addGestureRecognizer: self.swipeGestureRecognizer];


}


Π Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚Π΅Π»ΡŒ ТСстов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создан ΠΊΠ°ΠΊ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚Π΅Π»ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΎΠ΄Π½ΠΈΠΌ Π²ΠΈΠ΄ΠΎΠΌ, ΠΌΡ‹ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Π΅Π³ΠΎ ΠΊΠ°ΠΊ свойство ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π²ΠΈΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ТСст (self.swipeGestureRecognizer). Π’ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅Β» Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² этом ΠΊΠΎΠ΄Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° handleSwipes:, Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰Π΅Π³ΠΎ Π² качСствС Ρ†Π΅Π»ΠΈ для распознаватСля ТСстов смахивания.

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

ЖСст смахивания (скольТСния) β€” ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ простых Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ, рСгистрируСмых встроСнными распознаватСлями ТСстов, входящими Π² состав iOS SDK. Π­Ρ‚ΠΎ простоС Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°Π»ΡŒΡ†Π΅Π² ΠΏΠΎ экрану Π² Ρ‚ΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ. Класс UISwipeGestureRecognizer, ΠΊΠ°ΠΊ ΠΈ Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ распознаватСли ТСстов, наслСдуСт ΠΎΡ‚ класса UIGestureRecognizer ΠΈ добавляСт ΠΊ Π½Π΅ΠΌΡƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ частности, это свойства, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ТСсты смахивания, Ρ‡Ρ‚ΠΎΠ±Ρ‹ систСма ΠΈΡ… ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ, сколько ΠΏΠ°Π»ΡŒΡ†Π΅Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½Π° экранС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ТСст смахивания. НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ ТСсты смахивания ΡΠ²Π»ΡΡŽΡ‚ΡΡ дискрСтными.

ΠœΠ΅Ρ‚ΠΎΠ΄ handleSwipes:, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ воспользовались ΠΏΡ€ΠΈ написании распознаватСля ТСстов, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


β€” (void) handleSwipes:(UISwipeGestureRecognizer *)paramSender{


if (paramSender.direction & UISwipeGestureRecognizerDirectionDown){

NSLog(@"Swiped Down.");

}

if (paramSender.direction & UISwipeGestureRecognizerDirectionLeft){

NSLog(@"Swiped Left.");

}

if (paramSender.direction & UISwipeGestureRecognizerDirectionRight){

NSLog(@"Swiped Right.");

}

if (paramSender.direction & UISwipeGestureRecognizerDirectionUp){

NSLog(@"Swiped Up.");

}


}

Π’ свойствС direction экзСмпляра класса UISwipeGestureRecognizer ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ поразрядным ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠΌ OR (Π˜Π›Π˜). Π’ языкС Objective-C ΠΎΠ½ обозначаСтся Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π΅Ρ€Ρ‚ΠΎΠΉ (|). НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прямоС диагональноС смахиваниС ΠΏΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ Π»Π΅Π²ΠΎΠΌΡƒ ΡƒΠ³Π»Ρƒ экрана, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСния UISwipeGestureRecognizerDirectionLeft ΠΈ UISwipeGestureRecognizerDirectionDown, примСняя ΠΏΡ€ΠΈ создании распознаватСля ТСстов Π·Π½Π°ΠΊΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π΅Ρ€Ρ‚Ρ‹. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ пытаСмся ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ТСсты смахивания, ΠΈΠ΄ΡƒΡ‰ΠΈΠ΅ справа Π½Π°Π»Π΅Π²ΠΎ.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ смахиваниС выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ°Π»ΡŒΡ†Π΅ΠΌ, Π½ΠΎ сущСствуСт свойство numberOfTouchesRequired класса UISwipeGestureRecognizer, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ количСство ΠΏΠ°Π»ΡŒΡ†Π΅Π², Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ТСст Π±Ρ‹Π» распознан.

10.2. ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ТСстов вращСния

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

НСобходимо ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ пытаСтся ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΏΠ°Π»ΡŒΡ†Π°ΠΌΠΈ элСмСнт, ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΉ Π½Π° экранС.

РСшСниС

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ экзСмпляр класса UIRotationGestureRecognizer ΠΈ присоСдинитС Π΅Π³ΠΎ ΠΊ Ρ†Π΅Π»Π΅Π²ΠΎΠΌΡƒ Π²ΠΈΠ΄Ρƒ:


β€” (void)viewDidLoad {

[super viewDidLoad];


self.helloWorldLabel = [[UILabel alloc] initWithFrame: CGRectZero];

self.helloWorldLabel.text = @"Hello, World!";

self.helloWorldLabel.font = [UIFont systemFontOfSize:16.0f];

[self.helloWorldLabel sizeToFit];

self.helloWorldLabel.center = self.view.center;

[self.view addSubview: self.helloWorldLabel];


self.rotationGestureRecognizer = [[UIRotationGestureRecognizer alloc]

initWithTarget: self

action:@selector(handleRotations:)];


[self.view addGestureRecognizer: self.rotationGestureRecognizer];


}

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

Π Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚Π΅Π»ΡŒ ТСстов UIRotationGestureRecognizer, ΠΊΠ°ΠΊ понятно ΠΈΠ· Π΅Π³ΠΎ названия, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для распознавания ТСстов вращСния ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ интСрфСйсы Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятными. НапримСр, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с устройством Π² полноэкранном Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈ встрСчаСт Π½Π° экранС ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ориСнтация ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ соотвСтствуСт ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ экрана, Ρ‚ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ попытаСтся ΠΏΠΎΠ΄ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ, ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΠ² Π΅Π΅ Π½Π° дисплСС.

Класс UIRotationGestureRecognizer Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ свойство rotation, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ ΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ вращСния, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ТСстом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π­Ρ‚ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² Ρ€Π°Π΄ΠΈΠ°Π½Π°Ρ…. Π’Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ опрСдСляСтся Π² зависимости ΠΎΡ‚ исходного полоТСния ΠΏΠ°Π»ΡŒΡ†Π΅Π² (UIGestureRecognizerStateBegan) ΠΈ ΠΈΡ… ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ полоТСния (UIGestureRecognizerStateEnded).

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ элСмСнты ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса, Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚ класса UIView, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ свойство rotation распознаватСля ТСстов вращСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CGAffineTransformMakeRotation, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»Π° Π°Ρ„Ρ„ΠΈΠ½Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

Код, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π² ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅ «РСшСниС» Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°, ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π²ΠΈΠ΄Π°) ΠΊ Ρ†Π΅Π»ΠΈ распознаватСля ТСстов вращСния. Π¦Π΅Π»Π΅Π²ΠΎΠΉ сСлСктор задаСтся ΠΊΠ°ΠΊ handleRotations: β€” ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Но ΠΏΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ этому, ΠΈΠ·ΡƒΡ‡ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π²ΠΈΠ΄Π°:


#import Β«ViewController.hΒ»

@interface ViewController ()


@property (nonatomic, strong)

UIRotationGestureRecognizer *rotationGestureRecognizer;


@property (nonatomic, strong)

UILabel *helloWorldLabel;

/* Π˜Π· этого объявлСния свойства ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΠΈ nonatomic

ΠΈ unsafe_unretained. Π˜ΠΌΠ΅Ρ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, компилятор

автоматичСски сгСнСрируСт для нас ΠΎΠ±Π΅ эти ΠΌΠ΅Ρ‚ΠΊΠΈ. */

@property (nonatomic, unsafe_unretained)

CGFloat rotationAngleInRadians;


@end

@implementation ViewController


ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ, рассмотрим, Π·Π° Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· этих свойств ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ:

β€’ helloWorldLabel β€” это ΠΌΠ΅Ρ‚ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π° Π²ΠΈΠ΄Π΅ Π² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅ Π²ΠΈΠ΄Π°. ΠŸΠΎΡ‚ΠΎΠΌ напишСм ΠΊΠΎΠ΄ для вращСния этой ΠΌΠ΅Ρ‚ΠΊΠΈ. Π’Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ станСт ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ Π²Ρ€Π°Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ТСсты Π½Π° Π²ΠΈΠ΄Π΅, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰Π΅ΠΌ этой ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ Π²ΠΈΠ΄Π΅ нашСго ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π²ΠΈΠ΄Π°);

β€’ rotationGestureRecognizer β€” это экзСмпляр распознаватСля ТСстов вращСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΏΠΎΠ·ΠΆΠ΅ Π²Ρ‹Π΄Π΅Π»ΠΈΠΌ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ;

β€’ rotationAngleInRadians β€” это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠΌΠ΅Ρ‚ΠΊΠΈ. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ это свойство устанавливаСтся Π² Π½ΡƒΠ»ΡŒ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡƒΠ³Π»Ρ‹ вращСния, сообщаСмыС распознаватСлСм, ΡΠ±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π½ΠΎΠ²Ρ‹ΠΌ пуском распознаватСля, ΠΌΠΎΠΆΠ½ΠΎ всякий Ρ€Π°Π· ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ распознаватСля ТСстов вращСния, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состояниС UIGestureRecognizerStateEnded. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ запускС ТСста ΠΌΡ‹ суммируСм ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ вращСния ΠΈ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ вращСния, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠ±Ρ‰ΠΈΠΉ ΡƒΠ³ΠΎΠ» вращСния.


Π Π°Π·ΠΌΠ΅Ρ€ ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈ Π΅Π΅ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Π°Ρ Ρ‚ΠΎΡ‡ΠΊΠ° ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ. Аналогично Π½Π΅ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ самой ΠΌΠ΅Ρ‚ΠΊΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ просто пытаСмся Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΡƒ Π²ΠΎΠΊΡ€ΡƒΠ³ Π΅Π΅ Ρ†Π΅Π½Ρ‚Ρ€Π° нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΉ части Π²ΠΈΠ΄Π° ΠΎΠ½Π° располоТСна. ЕдинствСнный Π²Π°ΠΆΠ½Ρ‹ΠΉ аспСкт здСсь Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… прилоТСниях ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΊΠΈ Π² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅ Π²ΠΈΠ΄Π° слСдуСт Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ динамичСски ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ цСлями (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ устройствами), ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π°Ρ… Π΅Π΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°. Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ запускаСтся Π½Π° ΠΈΠ½Ρ‹Ρ… устройствах, ΠΊΡ€ΠΎΠΌΠ΅ iPhone ΠΈ iPad, ΠΌΠ΅Ρ‚ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… экрана.

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ свойство ΠΌΠ΅Ρ‚ΠΊΠΈ center ΠΈ устанавливая эту Ρ‚ΠΎΡ‡ΠΊΡƒ Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ ΠΎΠ±ΡŠΠ΅ΠΌΠ»ΡŽΡ‰Π΅Π³ΠΎ Π²ΠΈΠ΄Π°, ΠΌΡ‹ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ ΠΈ содСрТимоС самой ΠΌΠ΅Ρ‚ΠΊΠΈ. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ вращСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΊ Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠ΅, станСт Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΡƒ Π²ΠΎΠΊΡ€ΡƒΠ³ Π΅Π΅ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ. А Ссли содСрТимоС ΠΌΠ΅Ρ‚ΠΊΠΈ Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½ΠΎ ΠΏΠΎ Π»Π΅Π²ΠΎΠΌΡƒ ΠΈΠ»ΠΈ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ ΠΈ Π΅Π΅ истинный ΠΊΠΎΠ½Ρ‚ΡƒΡ€ ΡˆΠΈΡ€Π΅, Ρ‡Π΅ΠΌ пространство, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ отобраТСния содСрТимого (Π±Π΅Π· отсСчСния), Ρ‚ΠΎ Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ такая ΠΌΠ΅Ρ‚ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ довольно нССстСствСнно ΠΈ Π½Π΅ Π²ΠΎΠΊΡ€ΡƒΠ³ Ρ†Π΅Π½Ρ‚Ρ€Π°. Если Π²Π°ΠΌ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎ, ΠΊΠ°ΠΊ это выглядит Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π²Ρ‹Ρ€ΠΎΠ²Π½ΡΡ‚ΡŒ содСрТимоС ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΏΠΎ Π»Π΅Π²ΠΎΠΌΡƒ ΠΈΠ»ΠΈ ΠΏΡ€Π°Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ ΠΈ посмотритС, Ρ‡Ρ‚ΠΎ получится.

Как ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅ «РСшСниС» Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°, созданный Π½Π°ΠΌΠΈ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚Π΅Π»ΡŒ ТСстов вращСния Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ свои события ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ handleRotations:. Π’ΠΎΡ‚ рСализация этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:


β€” (void) handleRotations:(UIRotationGestureRecognizer *)paramSender{


if (self.helloWorldLabel == nil){

return;

}


/* Π‘Π΅Ρ€Π΅ΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ вращСния ΠΈ суммируСм Π΅Π³ΠΎ с Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ