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

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

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

Рис. 16.21. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ с ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌΡ‹ΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ


Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌΠΈ, ΠΈΠ·ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 16.2, ΠΈ сгСнСрируСм Ρ„Π°ΠΉΠ» класса для управляСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Laptop. ПослС этого ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ этого управляСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ color рассматриваСмого класса относится ΠΊ Ρ‚ΠΈΠΏΡƒ id:


#import <Foundation/Foundation.h>

#import <CoreData/CoreData.h>


@interface Laptop: NSManagedObject


@property (nonatomic, retain) NSString * model;

@property (nonatomic, retain) id color;


@end


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


#import <Foundation/Foundation.h>

#import <CoreData/CoreData.h>

/* ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅, Π² ΠΊΠ°ΠΊΠΎΠΌ

UIColor находится Π² UIKit */

#import <UIKit/UIKit.h>


@interface Laptop: NSManagedObject


@property (nonatomic, retain) NSString * model;

@property (nonatomic, retain) UIColor *color;


@end


Π˜Ρ‚Π°ΠΊ, ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ вСсь ΠΈΠ·ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. Π’ Π΄Π΅Π»Π΅Π³Π°Ρ‚Π΅ нашСго прилоТСния создадим экзСмпляр Laptop ΠΈ Π·Π°Π΄Π°Π΄ΠΈΠΌ для Π½Π΅Π³ΠΎ красный Ρ†Π²Π΅Ρ‚. Π—Π°Ρ‚Π΅ΠΌ вставим этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² стСк Core Data ΠΈ попытаСмся ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. Π’Π°ΠΊ ΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π»ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ вновь Π΄ΠΎΡΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…:


#import Β«AppDelegate.hΒ»

#import Β«Laptop.hΒ»


@implementation AppDelegate


@synthesize managedObjectContext = _managedObjectContext;

@synthesize managedObjectModel = _managedObjectModel;

@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;


β€” (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{


self.window = [[UIWindow alloc]

initWithFrame: [[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];


/* Π‘Π½Π°Ρ‡Π°Π»Π° сохраняСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ laptop с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ */

Laptop *laptop =

[NSEntityDescription

insertNewObjectForEntityForName: NSStringFromClass([Laptop class])

inManagedObjectContext: self.managedObjectContext];


laptop.model = @"model name";

laptop.color = [UIColor redColor];


NSError *error = nil;

if ([self.managedObjectContext save:&error] == NO){

NSLog(@"Failed to save the laptop. Error = %@", error);

}


/* Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ этот ΠΆΠ΅ laptop */

NSFetchRequest *fetch =

[[NSFetchRequest alloc]

initWithEntityName: NSStringFromClass([Laptop class])];

fetch.fetchLimit = 1;


fetch.predicate = [NSPredicate predicateWithFormat:@"color == %@",

[UIColor redColor]];


error = nil;

NSArray *laptops = [self.managedObjectContext

executeFetchRequest: fetch

error:&error];


/* ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° 1, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π»ΠΈΠΌΠΈΡ‚ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Ρ€Π°Π²Π΅Π½ 1 */

if (laptops.count == 1 && error == nil){


Laptop *fetchedLaptop = laptops[0];


if ([fetchedLaptop.color isEqual: [UIColor redColor]]){

NSLog(@"Right colored laptop was fetched");

} else {

NSLog(@"Could not find the laptop with the given color.");

}

}

else {

NSLog(@"Could not fetch the laptop with the given color. \

Error = %@", error);

}


return YES;

}

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

Π Π°Π·Π΄Π΅Π» 16.1.

Π“Π»Π°Π²Π° 17. Π“Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ анимация

17.0. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

НС сомнСваюсь, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ доводилось Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для iPhone ΠΈ iPad с ΠΎΡ‡Π΅Π½ΡŒ красивой Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, встрСчали Π·Π°Π±Π°Π²Π½ΡƒΡŽ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ Π² ΠΈΠ³Ρ€Π°Ρ… ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…. ΠŸΡ€ΠΈ совмСстном использовании срСды Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ исполнСния iOS ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² программирования Cocoa Touch ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ самыС Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ графичСскиС ΠΈ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ эффСкты с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ простого ΠΊΠΎΠ΄Π°. РазумССтся, качСство этой Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΈ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ частично зависит ΠΎΡ‚ эстСтичСского вкуса программиста ΠΈ Π΅Π³ΠΎ ΠΊΠΎΠ»Π»Π΅Π³-Ρ…ΡƒΠ΄ΠΎΠΆΠ½ΠΈΠΊΠΎΠ². Но Π² этой Π³Π»Π°Π²Π΅ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² области Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΈ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ, обладая вСсьма скромными Π½Π°Π²Ρ‹ΠΊΠ°ΠΌΠΈ программирования.

Π― Π½Π΅ Π±ΡƒΠ΄Ρƒ ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ здСсь Π² ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ вопросы ΠΈ расскаТу ΠΎ Ρ‚Π°ΠΊΠΈΡ… понятиях, ΠΊΠ°ΠΊ Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Π΅ пространства, прСобразования ΠΈ графичСский контСкст ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ Π΄Π΅Π»Π°. ΠœΡ‹ быстро рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ сразу ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΊΠΎΠ΄Ρƒ.

Π’ Cocoa Touch ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ состоит ΠΈΠ· ΠΎΠΊΠΎΠ½ (Window) ΠΈ Π²ΠΈΠ΄ΠΎΠ² (View). Если Ρƒ прилоТСния Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс, Ρ‚ΠΎ Π² Π½Π΅ΠΌ присутствуСт ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄Π½ΠΎ ΠΎΠΊΠ½ΠΎ. Окно, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько Π²ΠΈΠ΄ΠΎΠ². Π’ Cocoa Touch ΠΎΠΊΠ½ΠΎ являСтся экзСмпляром класса UIWindow. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ открываСтся Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, ΠΈ программист добавляСт Π² это ΠΎΠΊΠ½ΠΎ Π²ΠΈΠ΄Ρ‹, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса. Π’ΠΈΠ΄Π°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ, Π² частности, ΠΊΠ½ΠΎΠΏΠΊΠΈ, подписи, изобраТСния ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты управлСния, создаваСмыС самим программистом (Custom Controls). ΠžΡ‚Ρ€ΠΈΡΠΎΠ²ΠΊΠ° всСх этих элСмСнтов ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π²ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ΅ UIKit.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· этих Π²Π΅Ρ‰Π΅ΠΉ слоТно ΠΏΠΎΠ½ΡΡ‚ΡŒ сразу, Π½ΠΎ Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ β€” ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ чтСния Π³Π»Π°Π²Ρ‹ Π²Ρ‹ постСпСнно Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ΡΡŒ Π²ΠΎ всСм. ОсобСнно послС знакомства с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΆΠ΄ΡƒΡ‚ нас Π²ΠΏΠ΅Ρ€Π΅Π΄ΠΈ.

Apple прСдоставляСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΌΠΎΡ‰Π½Ρ‹Π΅ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для управлСния Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ ΠΈ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠ΅ΠΉ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах iOS ΠΈ OS X. Π”Π°Π»Π΅Π΅ пСрСчислСны Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· этих Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ.

β€’ UIKit β€” это высокоуровнСвый Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²ΠΈΠ΄Ρ‹, ΠΎΠΊΠ½Π°, ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ряд Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… API Π² состав высокоуровнСвого API, Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ довольно нСслоТно.

β€’ Quartz 2D β€” это основной Π΄Π²ΠΈΠΆΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Β«ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌΒ» ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈ обСспСчиваСт отрисовку Π² iOS. Quartz примСняСтся ΠΈ Π²ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ΅ UIKit.

β€’ Core Graphics β€” Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ графичСский контСкст (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом β€” Π² дальнСйшСм), Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΠΉ изобраТСния, ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ изобраТСния ΠΈ Ρ‚. Π΄.

β€’ Core Animation β€” ΠΊΠ°ΠΊ слСдуСт ΠΈΠ· Π΅Π³ΠΎ названия, этот Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ обСспСчиваСт ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ Π² iOS.


ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ ΠΊ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° экранС, ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π°ΠΆΠ½ΠΎ ΡƒΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ: ΠΏΠΎΠ½ΡΡ‚ΡŒ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ ΠΈ пиксСлами. Π‘ пиксСлами всС ясно, Π½ΠΎ Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΡ‡ΠΊΠΈ? Π­Ρ‚ΠΎ Π½Π΅ зависящий ΠΎΡ‚ устройства Π°Π½Π°Π»ΠΎΠ³ пиксСлов. ΠŸΡ€ΠΎΡ‰Π΅ говоря, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для iOS ΠΈ ΠΎΡ‚ вас трСбуСтся ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ высоту ΠΈ ΡˆΠΈΡ€ΠΈΠ½Ρƒ, Ρ‚ΠΎ iOS считываСт прСдоставлСнныС Π²Π°ΠΌΠΈ значСния ΠΊΠ°ΠΊ Ρ‚ΠΎΡ‡ΠΊΠΈ, Π° Π½Π΅ ΠΊΠ°ΠΊ пиксСлы.

НапримСр, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ вСсь экран Π½Π° iPhone 5, ваш экранный элСмСнт Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡˆΠΈΡ€ΠΈΠ½Ρƒ 320 ΠΈ высоту 568. Однако ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ истинноС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ экрана Ρƒ iPhone 5 составляСт 640 Γ— 1136. Π’ этом ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΏΡ€Π΅Π»Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΡ‡Π΅ΠΊ: оказываСтся, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π½ΠΈΠΌΠΈ учитываСтся коэффициСнт ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ.

Π—Π΄Π΅ΡΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коэффициСнт ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ. Π­Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ iOS ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ количСство пиксСлов Π½Π° экранС. Для этого провСряСтся число логичСских Ρ‚ΠΎΡ‡Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π½Π° этом экранС. На iPhone 5 коэффициСнт ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Ρ€Π°Π²Π΅Π½ 2,0. БоотвСтствСнно, iOS ΡƒΠΌΠ½ΠΎΠΆΠ°Π΅Ρ‚ 320 Π½Π° 2, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ количСство пиксСлов, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ устройство ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ, ΠΈ ΡƒΠΌΠ½ΠΎΠΆΠ°Π΅Ρ‚ 568 Π½Π° 2, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ количСство пиксСлов ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ.

На экранС устройства с iOS Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ располоТСно Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ. Π’Π°ΠΊΠΈΠ΅ экраны Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ΡΡ ULO-экранами (ΠΎΡ‚ английского Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° Upper Left Origin β€” Β«Π½Π°Ρ‡Π°Π»ΠΎ Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»ΡƒΒ»).

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΡ‡ΠΊΠ° с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (0; 0) β€” крайняя Ρ‚ΠΎΡ‡ΠΊΠ° Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ экрана. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ значСния ΠΏΠΎ оси X ΠΈΠ΄ΡƒΡ‚ ΠΎΡ‚ Π½Π΅Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΎ, Π° ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ значСния ΠΏΠΎ оси Y β€” Π²Π½ΠΈΠ·. Π˜Π½Ρ‹ΠΌΠΈ словами, Ρ‚ΠΎΡ‡ΠΊΠ° с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΠΉ x = 20 находится Π½Π° экранС ΠΏΡ€Π°Π²Π΅Π΅, Ρ‡Π΅ΠΌ Ρ‚ΠΎΡ‡ΠΊΠ° с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΠΉ x = 10. По оси Y Ρ‚ΠΎΡ‡ΠΊΠ° с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΠΉ y = 20 располоТСна Π½ΠΈΠΆΠ΅, Ρ‡Π΅ΠΌ Ρ‚ΠΎΡ‡ΠΊΠ° y = 10.

Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-Π²ΠΈΠ΄Ρ‹ Ρ‚ΠΈΠΏΠ° UIView для отрисовки Ρ„ΠΈΠ³ΡƒΡ€, строк ΠΈ Π»ΡŽΠ±Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… элСмСнтов, Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ… Π½Π° экранС.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с новСйшСй вСрсиСй Xcode on Apple. Если Π½Π΅Ρ‚, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ OS X, скачайтС ΠΈ установитС Π½ΠΎΠ²Π΅ΠΉΡˆΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Xcode.

Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ рассматриваСмыС здСсь ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, я сначала ΠΏΠΎΠΊΠ°ΠΆΡƒ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² Xcode ΠΈ подкласса ΠΎΡ‚ UIView, ΠΊΡƒΠ΄Π° ΠΌΡ‹ смоТСм ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ наш ΠΊΠΎΠ΄.

1. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Xcode.

2. Π’ мСню File (Π€Π°ΠΉΠ») Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ New β€” Project (Новый β€” ΠŸΡ€ΠΎΠ΅ΠΊΡ‚).

3. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π² Π»Π΅Π²ΠΎΠΉ части экрана Π²Ρ‹Π±Ρ€Π°Π½Π° катСгория iOS. Π’ этой ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Application (ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅) (рис. 17.1)