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

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

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

Рис. 1.57. Кнопка Delete Account (Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΡƒΡ‡Π΅Ρ‚Π½ΡƒΡŽ запись)


Кнопка ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ дСйствия Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΎΡ€Π°ΠΌ (Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π°ΠΌ). НапримСр, ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ дСйствиС, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ Π΅Π΅ ΠΏΠ°Π»ΡŒΡ†Π΅ΠΌ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ β€” ΠΊΠΎΠ³Π΄Π° ΡƒΠ±ΠΈΡ€Π°Π΅Ρ‚ с Π½Π΅Π΅ ΠΏΠ°Π»Π΅Ρ†. Π­Ρ‚ΠΈ двиТСния становятся дСйствиями, Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия, β€” ΠΈΡ… цСлями. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π² Ρ„Π°ΠΉΠ»Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° нашСго Π²ΠΈΠ΄Π°:


#import Β«ViewController.hΒ»


@interface ViewController ()

@property (nonatomic, strong) UIButton *myButton;

@end


@implementation ViewController

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ высота UIButton Π² iOS 7 указываСтся ΠΊΠ°ΠΊ 44.0f ΠΏΡƒΠ½ΠΊΡ‚Π°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ (рис. 1.58):


β€” (void) buttonIsPressed:(UIButton *)paramSender{

NSLog(@"Button is pressed.");

}


β€” (void) buttonIsTapped:(UIButton *)paramSender{

NSLog(@"Button is tapped.");

}


β€” (void)viewDidLoad{

[super viewDidLoad];


self.myButton = [UIButton buttonWithType: UIButtonTypeRoundedRect];


self.myButton.frame = CGRectMake(110.0f,

200.0f,

100.0f,

44.0f);


[self.myButton setTitle:@"Press Me"

forState: UIControlStateNormal];


[self.myButton setTitle:@"I'm Pressed"

forState: UIControlStateHighlighted];


[self.myButton addTarget: self

action:@selector(buttonIsPressed:)

forControlEvents: UIControlEventTouchDown];


[self.myButton addTarget: self

action:@selector(buttonIsTapped:)

forControlEvents: UIControlEventTouchUpInside];


[self.view addSubview: self.myButton];


}


Рис. 1.58. Π’ Ρ†Π΅Π½Ρ‚Ρ€Π΅ экрана находится систСмная ΠΊΠ½ΠΎΠΏΠΊΠ°


Π’ ΠΊΠΎΠ΄Π΅ ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΡ‹ примСняСм ΠΌΠ΅Ρ‚ΠΎΠ΄ setTitle: forState: ΠΊΠ½ΠΎΠΏΠΊΠΈ, задавая для Π½Π΅Π΅ Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ β€” это надпись Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅. Π’ Ρ€Π°Π·Π½ΠΎΠ΅ врСмя ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… состояниях: ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ ΠΈ ΡƒΡ‚ΠΎΠΏΠ»Π΅Π½Π½ΠΎΠΌ (Π½Π°ΠΆΠ°Ρ‚ΠΎΠΌ). Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· состояний надпись Π½Π° Π½Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ. НапримСр, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π²ΠΈΠ΄ΠΈΡ‚ ΠΊΠ½ΠΎΠΏΠΊΡƒ, Π½Π° Π½Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ написано Press Me (НаТми мСня). А ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π½Π°ΠΆΠΌΠ΅Ρ‚ Π΅Π΅, надпись Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅ измСнится Π½Π° I'm Pressed (Π― Π½Π°ΠΆΠ°Ρ‚Π°).

Аналогичная ситуация складываСтся ΠΈ с дСйствиями, ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ addTarget: action: forControlEvents:, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ для нашСй ΠΊΠ½ΠΎΠΏΠΊΠΈ Π΄Π²Π° дСйствия:

β€’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΠ΅, ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠ½ΠΎΠΏΠΊΡƒ;

β€’ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ дСйствиС, происходящСС, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡƒΠΆΠ΅ Π½Π°ΠΆΠ°Π» ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΈ ΡƒΠ±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΠ°Π»Π΅Ρ† с экрана. Π’Π°ΠΊΠΎΠ΅ событиС называСтся ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ΠΌ наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ (touch-inside-up).

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° Π²Π΅Ρ‰ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎ UIButton, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ присвоСн Ρ‚ΠΈΠΏ. ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ выполняСтся ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° класса buttonWithType Π½Π° этапС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅-ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° UIButtonType:


typedef NS_ENUM(NSInteger, UIButtonType) {

UIButtonTypeCustom = 0,

UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS(7_0),

UIButtonTypeRoundedRect,

UIButtonTypeDetailDisclosure,

UIButtonTypeInfoLight,

UIButtonTypeInfoDark,

UIButtonTypeContactAdd,

UIButtonTypeRoundedRect = UIButtonTypeSystem,

}


ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ замСняСт Π΅Π΅ стандартный внСшний Π²ΠΈΠ΄. Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ сСрия ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ состояниям ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ° относится ΠΊ Ρ‚ΠΈΠΏΡƒ UIButtonTypeCustom. Π—Π΄Π΅ΡΡŒ я ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ» Π΄Π²Π° изобраТСния: ΠΎΠ΄Π½ΠΎ для ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ состояния ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π° Π΄Ρ€ΡƒΠ³ΠΎΠ΅ β€” для Π½Π°ΠΆΠ°Ρ‚ΠΎΠ³ΠΎ (ΡƒΡ‚ΠΎΠΏΠ»Π΅Π½Π½ΠΎΠ³ΠΎ). БСйчас я создам ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΈ ΠΏΡ€ΠΈΡΠ²ΠΎΡŽ Π΅ΠΉ Π΄Π²Π° этих изобраТСния:


UIImage *normalImage = [UIImage imageNamed:@"NormalBlueButton.png"];

UIImage *highlightedImage = [UIImage imageNamed:@"HighlightedBlueButton"];


self.myButton = [UIButton buttonWithType: UIButtonTypeCustom];


self.myButton.frame = CGRectMake(110.0f,

200.0f,

100.0f,

44.0f);


[self.myButton setBackgroundImage: normalImage

forState: UIControlStateNormal];

[self.myButton setTitle:@"Normal"

forState: UIControlStateNormal];


[self.myButton setBackgroundImage: highlightedImage

forState: UIControlStateHighlighted];

[self.myButton setTitle:@"Pressed"

forState: UIControlStateHighlighted];


На рис. 1.59 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ выглядит ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ссли Π΅Π³ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π² эмуляторС iOS. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ относящийся ΠΊ ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ setBackgroundImage: forState:. Работая с Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ setTitle: forState: для отобраТСния тСкста ΠΏΠΎΠ²Π΅Ρ€Ρ… Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния. Если вашС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ содСрТит тСкст ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ надписи Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π½Π΅ трСбуСтся, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ setImage: forState: ΠΈΠ»ΠΈ просто ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ с ΠΊΠ½ΠΎΠΏΠΊΠΈ.


Рис. 1.59. Кнопка с Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ

1.22. Показ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ UIImageView

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

ВрСбуСтся Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ изобраТСния Π² графичСском интСрфСйсС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

РСшСниС

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

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

Класс UIImageView β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ слоТных Π² iOS SDK. Как Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, сущСствуСт особый Π²ΠΈΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ изобраТСния. Π§Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ изобраТСния, Π½ΡƒΠΆΠ½ΠΎ всСго лишь ΠΈΠ½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° UIImageView ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π΅Π³ΠΎ ΠΊ вашим Π²ΠΈΠ΄Π°ΠΌ. НапримСр, Ρƒ мСня Π΅ΡΡ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Apple MacBook Air ΠΈ я Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π΅ Π² Π²ΠΈΠ΄Π΅ для ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. НачнСм с Ρ„Π°ΠΉΠ»Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°:


#import Β«ViewController.hΒ»


@interface ViewController ()

@property (nonatomic, strong) UIImageView *myImageView;

@end

@implementation ViewController

Π˜Π½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΡƒΠ΅ΠΌ Π²ΠΈΠ΄ для ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ размСстим Π² Π½Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

β€” (void)viewDidLoad{

[super viewDidLoad];


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

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

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

[self.view addSubview: self.myImageView];


}


Π’Π΅ΠΏΠ΅Ρ€ΡŒ, запустив ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ, ΠΊΠ°ΠΊ Π½Π° рис. 1.60.


Рис. 1.60. Π’ΠΈΠ΄ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ довольно Π²Π΅Π»ΠΈΠΊΠΎ ΠΈ Π½Π΅ умСщаСтся Π½Π° экранС


ΠžΡ‚ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Apple MacBook Air, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽ Π² этот Π²ΠΈΠ΄, ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ 980 Γ— 519 пиксСлов ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Π½Π΅ умСщаСтся Π½Π° экранС iPhone. Как Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ? Для Π½Π°Ρ‡Π°Π»Π° Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ наш Π²ΠΈΠ΄ для ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° initWithFrame:, Π° Π½Π΅ initWithImage:, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π°Π΄Π°Π΅Ρ‚ высоту ΠΈ ΡˆΠΈΡ€ΠΈΠ½Ρƒ Π²ΠΈΠ΄Π° с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ высотС ΠΈ ΡˆΠΈΡ€ΠΈΠ½Π΅ самого изобраТСния. Π˜Ρ‚Π°ΠΊ, сначала Ρ€Π΅ΡˆΠΈΠΌ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ:

β€” (void)viewDidLoad{

[super viewDidLoad];


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

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

self.myImageView.image = macBookAir;

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

[self.view addSubview: self.myImageView];


}

Как Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅? Рассмотрим рис. 1.61.


Рис. 1.61. Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ умСщаСтся ΠΏΠΎ ΡˆΠΈΡ€ΠΈΠ½Π΅ Π½Π° экранС устройства


Но ΠΌΡ‹ Π½Π΅ этого Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, ΠΏΡ€Π°Π²Π΄Π°? Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΊΠΎΠ½Ρ‚ΡƒΡ€Ρ‹ Π²ΠΈΠ΄Π° с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π°ΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ подходят, Π½ΠΎ сама ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° стала ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π§Ρ‚ΠΎ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ? МоТно Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΡˆΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π·Π°Π΄Π°Π² для Π²ΠΈΠ΄Π° с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ свойство contentMode. Π­Ρ‚ΠΎ свойство Ρ‚ΠΈΠΏΠ° UIContentMode:


typedef NS_ENUM(NSInteger, UIViewContentMode) {

UIViewContentModeScaleToFill,

UIViewContentModeScaleAspectFit,

UIViewContentModeScaleAspectFill,

UIViewContentModeRedraw,

UIViewContentModeCenter,

UIViewContentModeTop,

UIViewContentModeBottom,

UIViewContentModeLeft,

UIViewContentModeRight,

UIViewContentModeTopLeft,

UIViewContentModeTopRight,

UIViewContentModeBottomLeft,

UIViewContentModeBottomRight,

}


Π’ΠΎΡ‚ описаниС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· пСрСчня UIViewContentMode:

β€’ UIViewContentModeScaleToFill β€” позволяСт ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² Π²ΠΈΠ΄Π΅ для изобраТСния Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ Π²ΠΈΠ΄ Π² Π΅Π³ΠΎ Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ…;

β€’ UIViewContentModeScaleAspectFit β€” позволяСт Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²ΠΈΠ΄Π° с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ сторон (характСристичСскоС ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅) ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π² Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π²ΠΈΠ΄Π° с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ;

β€’ UIViewContentModeScaleAspectFill β€” позволяСт Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²ΠΈΠ΄Π° с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ сторон ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π² Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π²ΠΈΠ΄Π° с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ дСйствовало ΠΊΠ°ΠΊ слСдуСт, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ свойству clipsToBounds Π²ΠΈΠ΄Π° с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ YES.

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