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

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

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

Бвойство clipsToBounds Π²ΠΈΠ΄Π° UIView опрСдСляСт, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ Β«ΠΏΠΎΠ΄ΠΎΠΊΠ½Π°Β» этого Π²ΠΈΠ΄Π° ΠΎΠ±Ρ€Π΅Π·Π°Ρ‚ΡŒΡΡ, Ссли ΠΎΠ½ΠΈ выходят Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ содСрТащСго ΠΈΡ… Π²ΠΈΠ΄Π°. МоТно ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ этим свойством, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ с Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Β«ΠΏΠΎΠ΄ΠΎΠΊΠ½Π°Β» ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π²Π½Π΅ Π³Ρ€Π°Π½ΠΈΡ† содСрТащСго ΠΈΡ… Π²ΠΈΠ΄Π° (ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈ нСобходимости Π½Π΅ΠΏΡ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π° Π΅Π³ΠΎ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ β€” Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²Π°ΠΌ трСбуСтся).

Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ опрСдСлСнная ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ останСтся Π² Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ… Π²ΠΈΠ΄Π° с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ сторон этой ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ окаТСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ отобраТСния содСрТимого UIViewContentModeScaleAspectFit:


β€” (void)viewDidLoad{

[super viewDidLoad];


UIImage *macBookAir = [UIImage imageNamed:@"MacBookAir"];

self.myImageView = [[UIImageView alloc] initWithFrame: self.view.bounds];

self.myImageView.contentMode = UIViewContentModeScaleAspectFit;

self.myImageView.image = macBookAir;

self.myImageView.center = self.view.center;

[self.view addSubview: self.myImageView];

}


ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ добивались (рис. 1.62).


Рис. 1.62. Π’Π°ΠΊΠΎΠ΅ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ сторон ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π½Π°ΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚

1.23. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ UIScrollView

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

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π½Π° экранС, Π½ΠΎ вся эта информация Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ большС экранного пространства, Ρ‡Π΅ΠΌ позволяСт ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ дисплСй нашСго устройства.

РСшСниС

Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ классом UIScrollView.

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

ΠŸΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ Π²ΠΈΠ΄ (Scroll View) β€” ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Ρ… достоинств, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму iOS Ρ‚Π°ΠΊΠΎΠΉ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ практичСски Π² Π»ΡŽΠ±Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…. ΠœΡ‹ ΡƒΠΆΠ΅ познакомились с прилоТСниями Clock (Часы) ΠΈ Contacts (ΠšΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹). Π’Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΈΡ… содСрТимоС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π²Π²Π΅Ρ€Ρ… ΠΈ Π²Π½ΠΈΠ·? Π”Π°, Π² этом ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ магия, присущая Π²ΠΈΠ΄Π°ΠΌ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅.

Π’ сущности, Π΅ΡΡ‚ΡŒ всСго ΠΎΠ΄Π½Π° базовая концСпция, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΠ²ΠΎΠΈΡ‚ΡŒ Π² связи с Π²ΠΈΠ΄Π°ΠΌΠΈ, Ρ‡ΡŒΠ΅ содСрТимоС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Ρ‚ΡŒ, β€” это Ρ€Π°Π·ΠΌΠ΅Ρ€ содСрТимого. Учитывая Ρ€Π°Π·ΠΌΠ΅Ρ€ содСрТимого, ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ Π²ΠΈΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Π½Π΅ΠΌ находится. Π Π°Π·ΠΌΠ΅Ρ€ содСрТимого β€” это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° CGSize, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ высоту ΠΈ ΡˆΠΈΡ€ΠΈΠ½Ρƒ Ρ‚ΠΎΠ³ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наполняСт Π²ΠΈΠ΄ с ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠΌ. Π’ΠΈΠ΄ с ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ слСдуСт ΠΈΠ· Π΅Π³ΠΎ названия, являСтся подклассом UIView. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ваши Π²ΠΈΠ΄Ρ‹ ΠΊ Π²ΠΈΠ΄Π°ΠΌ с ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠΌ, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ addSubview:. ΠŸΡ€Π°Π²Π΄Π°, Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ содСрТимого для ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° Π·Π°Π΄Π°Π½ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС эта информация ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

НайдСм для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ Π΅Π΅ Π² Π²ΠΈΠ΄ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π― Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡΡŒ Ρ‚ΠΎΠΉ самой ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΎΠΉ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 1.22: MacBook Air. Π”ΠΎΠ±Π°Π²Π»ΡŽ Π΅Π΅ Π² Π²ΠΈΠ΄ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠ΅Ρ‰Ρƒ Π² Π²ΠΈΠ΄ с ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠΌ. ΠŸΠΎΡ‚ΠΎΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡΡŒ свойством contentSize ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ этого ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° Ρ€Π°Π²Π½Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌ изобраТСния (высотС ΠΈ ΡˆΠΈΡ€ΠΈΠ½Π΅). НачнСм Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ„Π°ΠΉΠ»Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° нашСго Π²ΠΈΠ΄Π°:


#import Β«ViewController.hΒ»


@interface ViewController ()

@property (nonatomic, strong) UIScrollView *myScrollView;

@property (nonatomic, strong) UIImageView *myImageView;

@end


@implementation ViewController

И помСстим Π²ΠΈΠ΄ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π²Π½ΡƒΡ‚Ρ€ΡŒ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°:

β€” (void)viewDidLoad{

[super viewDidLoad];


UIImage *imageToLoad = [UIImage imageNamed:@"MacBookAir"];

self.myImageView = [[UIImageView alloc] initWithImage: imageToLoad];

self.myScrollView = [[UIScrollView alloc] initWithFrame: self.view.bounds];

[self.myScrollView addSubview: self.myImageView];

self.myScrollView.contentSize = self.myImageView.bounds.size;

[self.view addSubview: self.myScrollView];


}


Если Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² эмуляторС iOS, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ прокручиваСтся ΠΈ ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ, ΠΈ ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ. Основная Π·Π°Π΄Π°Ρ‡Π° Π² Π΄Π°Π½Π½ΠΎΠΌ случаС β€” Π½Π°ΠΉΡ‚ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ, которая Π±ΡƒΠ΄Π΅Ρ‚ довольно Π²Π΅Π»ΠΈΠΊΠ° ΠΈ Π½Π΅ помСстится Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… экрана. Π’Π°ΠΊ, Ссли Π²Π·ΡΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 20 Γ— 20 пиксСлов, Ρ‚ΠΎ особой ΠΏΠΎΠ»ΡŒΠ·Ρ‹ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. ΠŸΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ, ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΈ Π½Π΅ слСдуСт ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ Π²ΠΈΠ΄, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π΄Π°Π½Π½ΠΎΠΉ ситуации Ρ‚Π°ΠΊΠΎΠΉ Π²ΠΈΠ΄ Ρ€Π΅ΡˆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ бСсполСзСн. ΠŸΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅Ρ‡Π΅Π³ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€ экрана большС, Ρ‡Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ изобраТСния.

UIScrollView ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° дСлСгирования. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‚Π°ΠΊΠΎΠΉ Π²ΠΈΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π°ΠΆΠ½Ρ‹Ρ… событиях с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π΅Π»Π΅Π³Π°Ρ‚Π°. Π”Π΅Π»Π΅Π³Π°Ρ‚ для ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ трСбованиям ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° UIScrollViewDelegate. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, опрСдСляСмыС Π² этом ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅:

β€’ scrollViewDidScroll: β€” вызываСтся всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° содСрТимоС ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° прокручиваСтся;

β€’ scrollViewWillBeginDecelerating: β€” вызываСтся, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅Ρ‚ содСрТимоС Π²ΠΈΠ΄Π° ΠΈ ΠΎΡ‚Ρ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ°Π»Π΅Ρ† ΠΎΡ‚ сСнсорного экрана Π² Ρ‚ΠΎ врСмя, ΠΊΠ°ΠΊ Π²ΠΈΠ΄ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ;

β€’ scrollViewDidEndDecelerating: β€” вызываСтся, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, содСрТащСйся Π² Π²ΠΈΠ΄Π΅, заканчиваСтся;

β€’ scrollViewDidEndDragging: willDecelerate: β€” вызываСтся, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ пСрСтаскиваниС содСрТимого Π² ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠΌ Π²ΠΈΠ΄Π΅. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ‡Π΅Π½ΡŒ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ scrollViewDidEndDecelerating:, Π½ΠΎ слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ‚Π°ΡΠΊΠΈΠ²Π°Ρ‚ΡŒ элСмСнты содСрТимого Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΠΈ Π½Π΅ прокручивая Π΅Π³ΠΎ. МоТно просто ΠΏΡ€ΠΈΠΊΠΎΡΠ½ΡƒΡ‚ΡŒΡΡ ΠΏΠ°Π»ΡŒΡ†Π΅ΠΌ ΠΊ элСмСнту содСрТимого, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ°Π»Π΅Ρ† Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Π½Π° экранС, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΎΡ‚ΠΎΡ€Π²Π°Ρ‚ΡŒ ΠΏΠ°Π»Π΅Ρ† ΠΎΡ‚ экрана, Π½Π΅ сдвинув содСрТимоС самого Π²ΠΈΠ΄Π° Π½ΠΈ Π½Π° ΠΌΠΈΠ»Π»ΠΈΠΌΠ΅Ρ‚Ρ€. Π­Ρ‚ΠΈΠΌ пСрСтаскиваниС ΠΈ отличаСтся ΠΎΡ‚ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ. ΠŸΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠ° Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ пСрСтаскиваниС, Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ «сообщаСт ΠΈΠΌΠΏΡƒΠ»ΡŒΡΒ», приводящий ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ содСрТимого, Ссли снимаСт ΠΏΠ°Π»Π΅Ρ† с экрана, ΠΏΠΎΠΊΠ° информация Π΅Ρ‰Π΅ прокручиваСтся. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡƒΠ±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΠ°Π»Π΅Ρ†, Π½Π΅ доТдавшись Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ. ΠŸΠ΅Ρ€Π΅Ρ‚Π°ΡΠΊΠΈΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π²Ρ‹ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚Π΅ пСдаль Π³Π°Π·Π° Π² машинС ΠΈΠ»ΠΈ пСдаль вСлосипСда. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ эту аналогию, ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΡƒ с Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΠΈΠ½Π΅Ρ€Ρ†ΠΈΠΈ Π½Π° машинС ΠΈΠ»ΠΈ вСлосипСдС.

Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ интСрСснСС. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ яркости ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π² нашСм Π²ΠΈΠ΄Π΅ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ (этот ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ называСтся Β«Π°Π»ΡŒΡ„Π°-ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒΒ» ΠΈΠ»ΠΈ Β«Π°Π»ΡŒΡ„Π°-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β») Ρ€Π°Π²Π½Ρ‹ΠΌ 0.50f (ΠΏΠΎΠ»ΡƒΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ) Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΡƒ изобраТСния, ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ этот ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ 1.0f (Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ) ΠΊ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ. Π‘Π½Π°Ρ‡Π°Π»Π° обСспСчим соотвСтствиС ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ UIScrollViewDelegate:


#import Β«ViewController.hΒ»


@interface ViewController () <UIScrollViewDelegate>

@property (nonatomic, strong) UIScrollView *myScrollView;

@property (nonatomic, strong) UIImageView *myImageView;

@end


@implementation ViewController

ΠŸΠΎΡ‚ΠΎΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Π΄Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ:

β€” (void)scrollViewDidScroll:(UIScrollView *)scrollView{

/* Π’ызываСтся, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΡƒ

ΠΈΠ»ΠΈ пСрСтаскиваниС. */

self.myScrollView.alpha = 0.50f;

}


β€” (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{

/* Π’ызываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ. */

self.myScrollView.alpha = 1.0f;

}


β€” (void)scrollViewDidEndDragging:(UIScrollView *)scrollView

willDecelerate:(BOOL)decelerate{

/* Π“Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ Π°Π»ΡŒΡ„Π°-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ вСрнСтся ΠΊ исходному,

Π΄Π°ΠΆΠ΅ Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ просто пСрСтаскиваСт элСмСнты. */

self.myScrollView.alpha = 1.0f;

}


β€” (void)viewDidLoad{

[super viewDidLoad];


UIImage *imageToLoad = [UIImage imageNamed:@"MacBookAir"];

self.myImageView = [[UIImageView alloc] initWithImage: imageToLoad];

self.myScrollView = [[UIScrollView alloc] initWithFrame: self.view.bounds];

[self.myScrollView addSubview: self.myImageView];

self.myScrollView.contentSize = self.myImageView.bounds.size;

self.myScrollView.delegate = self;

[self.view addSubview: self.myScrollView];


}


Как ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Π² ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Π²ΠΈΠ΄Π°Ρ… ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹. Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ β€” это тонкая ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ линия, которая отобраТаСтся с ΠΊΡ€Π°ΡŽ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ содСрТимоС прокручиваСтся ΠΈΠ»ΠΈ пСрСмСщаСтся (рис. 1.63).

Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ просто ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, ΠΊΠ°ΠΊ Π²ΠΈΠ΄ располоТСн Π² настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΅Π³ΠΎ содСрТимого (Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части, Π½Π° ΠΏΠΎΠ»ΠΏΡƒΡ‚ΠΈ ΠΊ Π½ΠΈΠ·Ρƒ ΠΈ Ρ‚. Π΄.). Π’Π½Π΅ΡˆΠ½ΠΈΠΌ Π²ΠΈΠ΄ΠΎΠΌ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ, измСняя Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства indicatorStyle. НапримСр, Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ я дСлаю ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° Π±Π΅Π»Ρ‹ΠΌ:

self.myScrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;


Рис. 1.63. Π§Π΅Ρ€Π½Ρ‹Π΅ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΏΠΎΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ справа ΠΈ снизу ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°