Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅
Π Π°Π·Π΄Π΅Π»Ρ 17.12 ΠΈ 17.14.
17.16. ΠΠ½ΠΈΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΎΠ²
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ Π°Π½ΠΈΠΌΠΈΡΠΎΠ²Π°ΡΡ Π²ΠΈΠ΄Ρ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΏΡΠΈ Π²ΡΠ°ΡΠ΅Π½ΠΈΠΈ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π°ΡΡΠΈΠ½Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ, Π΄Π»Ρ Π°Π½ΠΈΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠ° UIView.
ΠΠ΅ΡΠ΅Π΄ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠΎΠΉ Π½Π°ΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ°ΡΡ ΡΠ°Π·Π΄Π΅Π» 17.14.
Π§ΡΠΎΠ±Ρ Π²ΡΠ°ΡΠ°ΡΡ Π²ΠΈΠ΄, Π°Π½ΠΈΠΌΠΈΡΡΡ Π΅Π³ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ, Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΊ Π½Π΅ΠΌΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ, ΠΊΠ°ΠΊ Π² ΠΊΠΎΠ΄Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ Π±Π»ΠΎΠΊ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 17.12). Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΡΡΠ½ΠΈΡ ΡΡΠΎ. ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠΈΡΡΠ½ΠΎΠΊ Xcode.png (ΡΠΌ. ΡΠΈΡ. 17.9) ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ Π΅Π³ΠΎ Π² ΡΠ΅Π½ΡΡΠ΅ ΡΠΊΡΠ°Π½Π°. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ° ΠΏΠΎΡΠ²ΠΈΡΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅, ΠΌΡ ΠΏΠΎΠ²Π΅ΡΠ½Π΅ΠΌ Π΅Π΅ Π½Π° 90Β° Π·Π° 5 ΡΠ΅ΠΊΡΠ½Π΄, Π° ΠΏΠΎΡΠΎΠΌ ΠΏΠΎΠ²Π΅ΡΠ½Π΅ΠΌ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ, ΠΏΠΎΡΡΠ°Π²ΠΈΠ² Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡΠ°ΠΊ, ΠΊΠΎΠ³Π΄Π° Π²ΠΈΠ΄ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡΠ²ΠΈΡΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅, ΠΏΠΎΠ²Π΅ΡΠ½Π΅ΠΌ ΡΡΠΎΡ Π²ΠΈΠ΄ Π½Π° 90Β° ΠΏΠΎ ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠ΅:
β (void) viewDidAppear:(BOOL)paramAnimated{
[super viewDidAppear: paramAnimated];
self.xcodeImageView.center = self.view.center;
/* ΠΠ°ΡΠΈΠ½Π°Π΅ΠΌ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ. */
[UIView beginAnimations:@"clockwiseAnimation"
context: NULL];
/* ΠΠ½ΠΈΠΌΠ°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π΄Π»ΠΈΡΡΡΡ 5 ΡΠ΅ΠΊΡΠ½Π΄. */
[UIView setAnimationDuration:5.0f];
[UIView setAnimationDelegate: self];
[UIView setAnimationDidStopSelector:
@selector(clockwiseRotationStopped: finished: context:)];
/* ΠΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ Π²ΠΈΠ΄ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° 90Β°. */
self.xcodeImageView.transform =
CGAffineTransformMakeRotation((90.0f * M_PI) / 180.0f);
/* ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ. */
[UIView commitAnimations];
}
ΠΡ ΡΠ΅ΡΠΈΠ»ΠΈ, ΡΡΠΎ ΡΠ΅Π»Π΅ΠΊΡΠΎΡ clockwiseRotationStopped: finished: context: Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π² ΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠ΅. Π ΡΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π²ΡΠ°ΡΠ°ΡΡ Π²ΠΈΠ΄ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΡΠΈΠ² ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠΈ, ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ 0Β° (ΡΠΎ Π΅ΡΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅). ΠΠ° ΡΡΠΎ ΡΠΎΠΆΠ΅ ΡΠΉΠ΄Π΅Ρ 5 ΡΠ΅ΠΊΡΠ½Π΄.
β (void)clockwiseRotationStopped:(NSString *)paramAnimationID
finished:(NSNumber *)paramFinished
context:(void *)paramContext{
[UIView beginAnimations:@"counterclockwiseAnimation"
context: NULL];
/* 5 ΡΠ΅ΠΊΡΠ½Π΄ */
[UIView setAnimationDuration:5.0f];
/* ΠΠΎΠ·Π²ΡΠ°Ρ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ */
self.xcodeImageView.transform = CGAffineTransformIdentity;
[UIView commitAnimations];
}
ΠΠ°ΠΊ Π±ΡΠ»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π°Ρ 17.14 ΠΈ 17.15, Π° ΡΠ°ΠΊΠΆΠ΅ Π² ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² Π°Π½ΠΈΠΌΠΈΡΠΎΠ²Π°ΡΡ Π²ΠΈΠ΄Ρ (ΠΏΡΡΠΌΡΠ΅ ΠΈΠ»ΠΈ Π½Π΅ΠΏΡΡΠΌΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΡ UIView). ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π½Π΅ΠΌΠ°Π»ΠΎ ΡΠ²ΠΎΠΉΡΡΠ². ΠΡΠ΄ΡΡΠ΅ ΠΊΡΠ΅Π°ΡΠΈΠ²Π½Ρ ΠΈ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΡΠΉΡΠ΅ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ UIView, ΠΎ ΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π½ΡΡΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ Π·Π½Π°Π»ΠΈ. ΠΠ΅ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΡΠ°ΠΊΠΆΠ΅ Π΅ΡΠ΅ ΡΠ°Π· ΠΏΠ΅ΡΠ΅ΡΠΌΠΎΡΡΠ΅ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ UIView Π² ΠΎΡΠ³Π°Π½Π°ΠΉΠ·Π΅ΡΠ΅ Xcode.
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅
Π Π°Π·Π΄Π΅Π»Ρ 17.13β17.15.
17.17. ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΎ ΡΠΊΡΠΈΠ½ΡΠΎΡΠΎΠΌ Π²ΠΈΠ΄Π°
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°-Π²ΠΈΠ΄Π°, Π½Π°Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎΡΡ Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Π² Π²ΠΈΠ΄Π΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΈΡΠΊΠ΅ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Ρ Π½ΠΈΠΌ Π΄ΡΡΠ³ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΡΡΠΎΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΎΠΉ Π² Π»ΡΠ±ΠΈΠΌΠΎΠΉ ΡΠΎΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΈ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 11.11).
Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ°Π³ΠΈ.
1. ΠΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ UIGraphicsBeginImageContextWithOptions Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΡΡΠ°Π·Ρ ΡΡΠ°Π½Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ (Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠΌ), ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Π½Π΅ΠΌ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ Π²ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
2. ΠΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ drawViewHierarchyInRect: Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ° UIView. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°ΠΉΡΠ΅ ΡΡΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Π³ΡΠ°Π½ΠΈΡΡ Π²ΠΈΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅.
3. ΠΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ UIGraphicsGetImageFromCurrentImageContext, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ β ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ½ΠΎΡΠΈΡΡΡΡ ΠΊ ΡΠΈΠΏΡ UIImage.
4. ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠΉΡΠ΅ Π²Π°Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² Π΄Π°Π½Π½ΡΠ΅, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ UIImagePNGRepresentation. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π΄Π°ΡΡ Π²Π°ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° NSData.
5. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ Π² Π²Π°ΡΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ Π΄Π°Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° writeToUrl: atomically:, ΡΡΠΎΠ±Ρ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π°Π΄ΡΠ΅Ρ Π½Π° Π΄ΠΈΡΠΊΠ΅ β Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅. ΠΠΌΠ΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ UIImage, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Ρ ΡΡΠΈΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ Π»ΡΠ±ΡΡ Π΄ΡΡΠ³ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
ΠΠ½ΠΎΠ³Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ ΡΠΊΡΠΈΠ½ΡΠΎΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π°. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΠ΄Π΅Π»Π°Π½Π½ΡΠΉ ΡΠΈΡΡΠ½ΠΎΠΊ Π² ΡΠ°ΠΉΠ»Π΅. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎΡ ΡΠ°ΠΉΠ» Π·Π°ΡΠ΅ΠΌ Π±ΡΠ΄Π΅Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ Π² ΠΎΠ±Π»Π°ΠΊΠ΅ iCloud, ΠΎΡΠΊΡΠ΄Π° Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ Π·Π°Π³ΡΡΠ·ΠΈΡΡ.
ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΠΈΠΌ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΡΡΠ°Π΅ΡΡΡ Π΄Π»Ρ Π½Π°Ρ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΈΠΌΠ΅Π΅ΠΌ Π΅Π³ΠΎ ΠΎΠΏΠΈΡΠ°ΡΠ΅Π»Ρ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π²ΡΠ΅ ΡΠΈΡΠΎΠ²Π°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅, Π±ΡΠ΄ΡΡ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ°Π²Π½ΠΈΡΡ Ρ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡΠΌ Ρ ΠΎΠ»ΡΡΠΎΠΌ Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π°ΡΠ΅Π³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ UIGraphicsGetImageFromCurrentImageContext.
ΠΠΎΠ³Π΄Π° Π²Ρ Π½Π°ΡΠ½Π΅ΡΠ΅ ΡΠ΅ΡΠ°ΡΡ ΡΠ°ΠΊΡΡ Π·Π°Π΄Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ SDK, Π²Π°ΠΌ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠ·Π²Π°ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ΅ΡΠΎΠ΄ drawViewHierarchyInRect: β ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° Π±ΡΠ΄Π΅Ρ ΠΎΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅.
ΠΡΠ°ΠΊ, ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΈΠ·ΡΡΠ΅Π½Π½ΡΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅ ΠΊΠΎΠ΄Π° ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π² Π½Π°ΡΠ΅ΠΌ Π²ΠΈΠ΄Π΅ ΡΡΠ΄ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² (ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ°ΡΠΊΠ°Π΄ΡΠΎΠ²ΠΊΠΈ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π² Π³Π»Π°Π²Π΅ 6). ΠΠ΅ Π²Π°ΠΆΠ½ΠΎ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²Ρ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ Π² ΡΠ°ΡΠΊΠ°Π΄ΡΠΎΠ²ΠΊΠ΅. ΠΡ Ρ ΠΎΡΠΈΠΌ ΡΠ½ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π½Π°ΡΠ΅Π³ΠΎ Π²ΠΈΠ΄Π°, ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΊΠ°ΠΊ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Documents (ΠΠΎΠΊΡΠΌΠ΅Π½ΡΡ) Π½Π° Π΄ΠΈΡΠΊΠ΅:
β (void) viewDidAppear:(BOOL)animated{
[super viewDidAppear: animated];
/* ΠΠ΅Π»Π°Π΅ΠΌ ΡΠΊΡΠΈΠ½ΡΠΎΡ */
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, YES, 0.0f);
if ([self.view drawViewHierarchyInRect: self.view.bounds]){
NSLog(@"Successfully draw the screenshot.");
} else {
NSLog(@"Failed to draw the screenshot.");
}
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
/* Π‘ΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ Π΅Π³ΠΎ Π½Π° Π΄ΠΈΡΠΊΠ΅ */
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSURL *documentsFolder = [fileManager URLForDirectory: NSDocumentDirectory
inDomain: NSUserDomainMask
appropriateForURL: nil
create: YES
error: nil];
NSURL *screenshotUrl = [documentsFolder
URLByAppendingPathComponent:@"screenshot.png"];
NSData *screenshotData = UIImagePNGRepresentation(screenshot);
if ([screenshotData writeToURL: screenshotUrl atomically: YES]){
NSLog(@"Successfully saved screenshot to %@", screenshotUrl);
} else {
NSLog(@"Failed to save screenshot.");
}
}
Π Π½Π°ΡΠ°Π»Π΅ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π΅Π³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ UIGraphicsGetImageFromCurrentImageContext. ΠΠΌΠ΅Ρ ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΠΌΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ NSFileManager, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΠΏΡΡΡ ΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Ρ Documents (ΠΠΎΠΊΡΠΌΠ΅Π½ΡΡ) Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° Π΄ΠΈΡΠΊΠ΅ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 12.1). ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΊΡΠΈΠ½ΡΠΎΡΠ° Π² Π²ΠΈΠ΄Π΅ Π΄Π°Π½Π½ΡΡ (Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ UIImagePNGRepresentation) ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΈΡΠΊΠ΅. ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ PNG ΠΈΠ»ΠΈ JPEG, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ UIImageJPEGRepresentation. Π’Π°ΠΊ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π΄Π°Π½Π½ΡΠ΅, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΡΡΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅ (PNG/JPEG). ΠΠΌΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΈΡ Π½Π° Π΄ΠΈΡΠΊΠ΅ ΠΈΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Ρ Π½ΠΈΠΌΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅
Π Π°Π·Π΄Π΅Π» 11.11, Π³Π»Π°Π²Π° 6.
ΠΠ»Π°Π²Π° 18. Π€ΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Core Motion
18.0. ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Π£ΡΡΡΠΎΠΉΡΡΠ²Π° Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ iOS, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ iPhone ΠΈ iPad, ΠΎΠ±ΡΡΠ½ΠΎ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½Ρ Π°ΠΊΡΠ΅Π»Π΅ΡΠΎΠΌΠ΅ΡΡΠΎΠΌ. ΠΠ° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π½ΠΎΠ²ΡΡ iPhone ΠΈ iPad, Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π³ΠΈΡΠΎΡΠΊΠΎΠΏ. ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΡΡΠ°ΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Π²Π°ΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ Π΄Π»Ρ iOS Π°ΠΊΡΠ΅Π»Π΅ΡΠΎΠΌΠ΅ΡΡ ΠΈΠ»ΠΈ Π³ΠΈΡΠΎΡΠΊΠΎΠΏ, Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ (Π½Π°Π»ΠΈΡΠΈΠ΅) ΡΡΠΈΡ ΡΠ΅Π½ΡΠΎΡΠΎΠ² Π½Π° ΡΠΎΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π΅, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°. Π ΡΠ°Π·Π΄Π΅Π»Π°Ρ 18.1 ΠΈ 18.2 ΠΎΠΏΠΈΡΠ°Π½Ρ ΠΏΡΠΈΠ΅ΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ Π°ΠΊΡΠ΅Π»Π΅ΡΠΎΠΌΠ΅ΡΡΠ° ΠΈΠ»ΠΈ Π³ΠΈΡΠΎΡΠΊΠΎΠΏΠ°. Π£ΡΡΡΠΎΠΉΡΡΠ²Π° iOS, ΠΎΡΠ½Π°ΡΠ΅Π½Π½ΡΠ΅ Π³ΠΈΡΠΎΡΠΊΠΎΠΏΠΎΠΌ, ΠΌΠΎΠ³ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π²Π΄ΠΎΠ»Ρ ΡΠ΅ΡΡΠΈ ΠΎΡΠ΅ΠΉ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠ΅Π½ΠΈΡΡ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π³ΠΈΡΠΎΡΠΊΠΎΠΏ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΡΠ΅Π»Π΅ΡΠΎΠΌΠ΅ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π²ΠΎΠΊΡΡΠ³ Π΅Π³ΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΡΠΈ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΊΡΠ΅ΠΏΠΊΠΎ Π΄Π΅ΡΠΆΠΈΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π² ΡΡΠΊΠ°Ρ , ΡΠΈΠ΄ΠΈΡΠ΅ Π² ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΌ ΠΊΡΠ΅ΡΠ»Π΅ ΠΈ ΠΊΡΡΡΠΈΡΠ΅ΡΡ Π½Π° Π½Π΅ΠΌ ΠΏΠΎ ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠΈΠ² ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠΈ. ΠΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ»Π° Π² Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠ½Π°ΡΠ΅ ΠΈΠ»ΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠ»Π°Π½Π΅ΡΡ ΠΠ΅ΠΌΠ»Ρ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π²ΠΎΠΊΡΡΠ³ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΡΠΈ, Π½ΠΎ ΠΎΠ½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π²ΠΎΠΊΡΡΠ³ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΎΡΠΈ Y, ΠΏΡΠΎΡ ΠΎΠ΄ΡΡΠ΅ΠΉ ΠΏΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΠΈ ΡΠ΅ΡΠ΅Π· ΡΠ΅Π½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΡΠΎ Π΅ΡΡΡ Π°ΠΊΡΠ΅Π»Π΅ΡΠΎΠΌΠ΅ΡΡ Π½Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ.