/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π²ΠΈΠ΄Ρ */
NSUInteger const NumberOfViews = 2;
self.squareViews = [[NSMutableArray alloc] initWithCapacity: NumberOfViews];
NSArray *colors = @[[UIColor redColor], [UIColor greenColor]];
CGPoint currentCenterPoint = self.view.center;
CGSize eachViewSize = CGSizeMake(50.0f, 50.0f);
for (NSUInteger counter = 0; counter < NumberOfViews; counter++){
UIView *newView =
[[UIView alloc] initWithFrame:
CGRectMake(0.0f, 0.0f, eachViewSize.width, eachViewSize.height)];
newView.backgroundColor = colors[counter];
newView.center = currentCenterPoint;
currentCenterPoint.y += eachViewSize.height + 10.0f;
[self.view addSubview: newView];
[self.squareViews addObject: newView];
}
self.animator = [[UIDynamicAnimator alloc]
initWithReferenceView: self.view];
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΡΠ³ΠΎΡΠ΅Π½ΠΈΠ΅ */
UIGravityBehavior *gravity = [[UIGravityBehavior alloc]
initWithItems: self.squareViews];
[self.animator addBehavior: gravity];
/* Π Π΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΉ */
UICollisionBehavior *collision = [[UICollisionBehavior alloc]
initWithItems: self.squareViews];
collision.translatesReferenceBoundsIntoBoundary = YES;
[self.animator addBehavior: collision];
}
ΠΠΎΠ»ΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΠΊΠ°ΠΊ Π½Π° ΡΠΈΡ. 2.1.
Π ΠΈΡ. 2.1. ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΡΠ³ΠΎΡΠ΅Π½ΠΈΡ ΠΈ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΎΡΠ»ΠΈΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ translatesReferenceBoundsIntoBoundary ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ YES. ΠΠΎ ΡΡΠΎ, Π΅ΡΠ»ΠΈ ΠΌΡ Π·Π°Ρ ΠΎΡΠΈΠΌ ΠΎΡΠ΅ΡΡΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π³ΡΠ°Π½ΠΈΡΡ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΉ? ΠΠ΄Π΅ΡΡ ΠΈ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° addBoundaryWithIdentifier: fromPoint: toPoint:, ΠΎΡΠ½ΠΎΡΡΡΠΈΠΉΡΡ ΠΊ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ. ΠΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΡΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ:
β’ addBoundaryWithIdentifier β ΡΡΡΠΎΠΊΠΎΠ²ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π΄Π»Ρ Π²Π°ΡΠ΅ΠΉ Π³ΡΠ°Π½ΠΈΡΡ. ΠΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡ Π³ΡΠ°Π½ΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ. ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄Ρ boundaryWithIdentifier: ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π² ΠΎΡΠ²Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ Π³ΡΠ°Π½ΠΈΡΡ. ΠΠ±ΡΠ΅ΠΊΡ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΈΠΏΡ UIBezierPath ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΡΠ΅, ΡΠΈΠ»ΡΠ½ΠΎ ΠΈΡΠΊΡΠΈΠ²Π»Π΅Π½Π½ΡΠ΅ Π³ΡΠ°Π½ΠΈΡΡ. ΠΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΡΠΎΡΡΡΠ΅ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠ»ΠΈ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ Π³ΡΠ°Π½ΠΈΡΡ, ΡΡΠΎ ΠΌΡ ΠΈ ΡΠ΄Π΅Π»Π°Π΅ΠΌ;
β’ fromPoint β Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΡΠΎΡΠΊΠ° Π³ΡΠ°Π½ΠΈΡΡ, ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΈΠΏΡ CGPoint;
β’ toPoint β ΠΊΠΎΠ½Π΅ΡΠ½Π°Ρ ΡΠΎΡΠΊΠ° Π³ΡΠ°Π½ΠΈΡΡ, ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΈΠΏΡ CGPoint.
ΠΡΠ°ΠΊ, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ Π³ΡΠ°Π½ΠΈΡΡ Π² Π½ΠΈΠΆΠ½Π΅ΠΉ ΡΠ°ΡΡΠΈ ΠΎΠΏΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΠΈΠ΄Π° Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠΌ), Π½ΠΎ Π½Π΅ Ρ ΠΎΡΠΈΡΠ΅, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° ΡΠΎΠ²ΠΏΠ°Π΄Π°Π»Π° Ρ Π½ΠΈΠΆΠ½ΠΈΠΌ ΠΊΡΠ°Π΅ΠΌ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½Π° Π³ΡΠ°Π½ΠΈΡΠ°, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½Π°Ρ Π½Π° 100 ΡΠΎΡΠ΅ΠΊ Π²ΡΡΠ΅ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΊΡΠ°Ρ. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ translatesReferenceBoundsIntoBoundary Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π·Π°Π΄Π°ΡΡ ΠΈΠ½ΡΡ Π³ΡΠ°Π½ΠΈΡΡ, Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΡΡ Ρ ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΎΠΏΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°. ΠΡΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ addBoundaryWithIdentifier: fromPoint: toPoint:, Π²ΠΎΡ ΡΠ°ΠΊ:
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΉ */
UICollisionBehavior *collision = [[UICollisionBehavior alloc]
initWithItems: self.squareViews];
[collision
addBoundaryWithIdentifier:@"bottomBoundary"
fromPoint: CGPointMake(0.0f, self.view.bounds.size.height β 100.0f)
toPoint: CGPointMake(self.view.bounds.size.width,
self.view.bounds.size.height β 100.0f)];
[self.animator addBehavior: collision];
Π’Π΅ΠΏΠ΅ΡΡ, Π΅ΡΠ»ΠΈ ΠΌΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΠΌ ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ ΡΡΠ³ΠΎΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠ°ΠΊ Π΄Π΅Π»Π°Π»ΠΈ ΡΠ°Π½ΡΡΠ΅, ΡΠΎ ΠΊΠ²Π°Π΄ΡΠ°ΡΡ Π±ΡΠ΄ΡΡ ΠΏΠ°Π΄Π°ΡΡ Π² ΠΎΠΏΠΎΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΡΠ²Π΅ΡΡ Ρ Π²Π½ΠΈΠ·, Π½ΠΎ Π½Π΅ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡ Π΅Π³ΠΎ Π΄Π½Π°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π½Π°ΠΌΠΈ Π½ΠΈΠΆΠ½ΡΡ Π³ΡΠ°Π½ΠΈΡΠ° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΡΠ΅. Π ΡΠ°ΠΌΠΊΠ°Ρ ΡΡΠΎΠ³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π° Ρ ΡΠ°ΠΊΠΆΠ΅ Ρ ΠΎΡΡ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, ΠΎΠ±Π»Π°Π΄Π°ΡΡΠΈΠΌΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ. ΠΠ»Π°ΡΡ UICollisionBehavior ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ collisionDelegate, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΡΡΡΡΠΏΠ°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄Π΅Π»Π΅Π³Π°ΡΠ° ΠΏΡΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠΈ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΉ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΎΠ±Π»Π°Π΄Π°ΡΡΠΈΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ. ΠΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ-Π΄Π΅Π»Π΅Π³Π°Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ UICollisionBehaviorDelegate. ΠΠ°Π½Π½ΡΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ. ΠΠΎΡ Π΄Π²Π° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΡΡ ΠΈΠ· ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²:
β’ collisionBehavior: beganContactForItem: withBoundaryIdentifier: atPoint: β Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π² Π΄Π΅Π»Π΅Π³Π°ΡΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΎΠ±Π»Π°Π΄Π°ΡΡΠΈΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ, ΡΠ΄Π°ΡΡΠ΅ΡΡΡ ΠΎΠ± ΠΎΠ΄Π½Ρ ΠΈΠ· Π³ΡΠ°Π½ΠΈΡ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΡ ΠΊ ΡΡΠΎΠΌΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ;
β’ collisionBehavior: endedContactForItem: withBoundaryIdentifier: atPoint: β Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΡΡΠΎΠ»ΠΊΠ½ΡΠ²ΡΠΈΠΉΡΡ Ρ Π³ΡΠ°Π½ΠΈΡΠ΅ΠΉ, ΠΎΡΡΠΊΠΎΡΠΈΠ» ΠΎΡ Π½Π΅Π΅ ΠΈ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠΎΠ½ΡΠ°ΠΊΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Ρ Π³ΡΠ°Π½ΠΈΡΠ΅ΠΉ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΠ»ΡΡ.
Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²Π°ΠΌ Π΄Π΅Π»Π΅Π³Π°Ρ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΡΠ°ΡΡΠΈΡΠΈΠΌ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΠΊΠΈ Π΄ΠΎΡΡΠΈΠ³Π°ΡΡ Π½ΠΈΠΆΠ½Π΅ΠΉ Π³ΡΠ°Π½ΠΈΡΡ ΠΎΠΏΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ ΠΈΡ ΠΊΡΠ°ΡΠ½ΡΠΌΠΈ, ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΠΌ Π½Π° 200 %, Π° ΠΏΠΎΡΠΎΠΌ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΠ°ΡΡΡΠΏΠ°ΡΡΡΡ, ΠΊΠ°ΠΊ ΠΏΡΠΈ Π²Π·ΡΡΠ²Π΅, ΠΈ ΠΈΡΡΠ΅Π·Π°ΡΡ ΠΈΠ· Π²ΠΈΠ΄Ρ:
NSString *const kBottomBoundary = @"bottomBoundary";
@interface ViewController () <UICollisionBehaviorDelegate>
@property (nonatomic, strong) NSMutableArray *squareViews;
@property (nonatomic, strong) UIDynamicAnimator *animator;
@end
@implementation ViewController
β (void)collisionBehavior:(UICollisionBehavior*)paramBehavior
beganContactForItem:(id <UIDynamicItem>)paramItem
withBoundaryIdentifier:(id <NSCopying>)paramIdentifier
atPoint:(CGPoint)paramPoint{
NSString *identifier = (NSString *)paramIdentifier;
if ([identifier isEqualToString: kBottomBoundary]){
[UIView animateWithDuration:1.0f animations: ^{
UIView *view = (UIView *)paramItem;
view.backgroundColor = [UIColor redColor];
view.alpha = 0.0f;
view.transform = CGAffineTransformMakeScale(2.0f, 2.0f);
} completion: ^(BOOL finished) {
UIView *view = (UIView *)paramItem;
[paramBehavior removeItem: paramItem];
[view removeFromSuperview];
}];
}
}
β (void)viewDidAppearBOOL)animated{
[super viewDidAppear: animated];
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π²ΠΈΠ΄Ρ */
NSUInteger const NumberOfViews = 2;
self.squareViews = [[NSMutableArray alloc] initWithCapacity: NumberOfViews];
NSArray *colors = @[[UIColor redColor], [UIColor greenColor]];
CGPoint currentCenterPoint = CGPointMake(self.view.center.x, 0.0f);
CGSize eachViewSize = CGSizeMake(50.0f, 50.0f);
for (NSUInteger counter = 0; counter < NumberOfViews; counter++){
UIView *newView =
[[UIView alloc] initWithFrame:
CGRectMake(0.0f, 0.0f, eachViewSize.width, eachViewSize.height)];
newView.backgroundColor = colors[counter];
newView.center = currentCenterPoint;
currentCenterPoint.y += eachViewSize.height + 10.0f;
[self.view addSubview: newView];
[self.squareViews addObject: newView];
}
self.animator = [[UIDynamicAnimator alloc]
initWithReferenceView: self.view];
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΡΠ³ΠΎΡΠ΅Π½ΠΈΠ΅ */
UIGravityBehavior *gravity = [[UIGravityBehavior alloc]
initWithItems: self.squareViews];
[self.animator addBehavior: gravity];
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΉ */
UICollisionBehavior *collision = [[UICollisionBehavior alloc]
initWithItems: self.squareViews];
[collision
addBoundaryWithIdentifier: kBottomBoundary
fromPoint: CGPointMake(0.0f, self.view.bounds.size.height β 100.0f)
toPoint: CGPointMake(self.view.bounds.size.width,
self.view.bounds.size.height β 100.0f)];
collision.collisionDelegate = self;
[self.animator addBehavior: collision];
}
ΠΠ±ΡΡΡΠ½Ρ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΠΊΠΎΠ΄Π΅. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π΄Π²Π° Π²ΠΈΠ΄Π° ΠΈ ΠΊΠ»Π°Π΄Π΅ΠΌ ΠΈΡ ΠΎΠ΄ΠΈΠ½ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ. ΠΡΠΈ Π²ΠΈΠ΄Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ Π΄Π²Π° ΠΎΠ±ΡΡΠ½ΡΡ ΡΠ°Π·Π½ΠΎΡΠ²Π΅ΡΠ½ΡΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ°: Π²ΡΠΎΡΠΎΠΉ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠΌ. ΠΠ±Π° ΠΎΠ½ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΠΊ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ Π²ΠΈΠ΄Π°. ΠΠ°ΠΊ ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ , ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΊ Π°Π½ΠΈΠΌΠ°ΡΠΎΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠ³ΠΎΡΠ΅Π½ΠΈΡ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ Π½Π°ΡΠ½Π΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ, Π²ΠΈΠ΄Ρ ΡΡΠ°Π½ΡΡ ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΡΠΏΠΎΠ»Π·Π°ΡΡ ΠΏΠΎ ΠΎΠΏΠΎΡΠ½ΠΎΠΌΡ Π²ΠΈΠ΄Ρ ΡΠ²Π΅ΡΡ Ρ Π²Π½ΠΈΠ·. ΠΡ Π½Π΅ Π·Π°Π΄Π°Π΅ΠΌ Π³ΡΠ°Π½ΠΈΡΡ ΠΎΠΏΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π³ΡΠ°Π½ΠΈΡ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ, Π° ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠΌ Π³ΡΠ°Π½ΠΈΡΡ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ, ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Ρ Π΅Π΅ Π² 100 ΡΠΎΡΠΊΠ°Ρ Π½Π°Π΄ Π½ΠΈΠΆΠ½Π΅ΠΉ Π³ΡΠ°Π½ΠΈΡΠ΅ΠΉ ΡΠΊΡΠ°Π½Π°. Π£ Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠ°Ρ Π»ΠΈΠ½ΠΈΡ, ΠΏΡΠΎΡ ΠΎΠ΄ΡΡΠ°Ρ ΠΏΠΎ ΡΠΊΡΠ°Π½Ρ ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ. ΠΠ½Π° Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΠΈΠ΄Π°ΠΌ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΏΠ°Π΄Π°ΡΡ Π²Π½ΠΈΠ· ΠΈ Π²ΡΡ ΠΎΠ΄ΠΈΡΡ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΎΠΏΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΌΡ Π·Π°Π΄Π°Π΅ΠΌ Π²ΠΈΠ΄ Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄Π΅Π»Π΅Π³Π°ΡΠ° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠ½ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΡΠΎΠΎΠ±ΡΠ°ΡΡΠΈΠ΅, ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ Π»ΠΈ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΠΈ Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ, ΡΠΎ ΠΊΠΎΠ³Π΄Π°. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ ΡΠ·Π½Π°Π΅ΡΠ΅ ΠΎ ΡΠ°ΠΊΡΠ΅ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ, ΡΠΎ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π·Π°Ρ ΠΎΡΠΈΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, Π±ΡΠ»ΠΎ Π»ΠΈ ΡΡΠΎ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ Ρ Π³ΡΠ°Π½ΠΈΡΠ΅ΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΉ Π½Π°ΠΌΠΈ) ΠΈΠ»ΠΈ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠ΅Π½Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΎΠ·Π΄Π°Π»ΠΈ Π² ΠΎΠΏΠΎΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ΅Π½, Π° ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠ΅ Π²ΠΈΠ΄Ρ-ΠΊΠ²Π°Π΄ΡΠ°ΡΡ ΠΌΠΎΠ³ΡΡ ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ Ρ ΡΡΠΈΠΌΠΈ ΡΡΠ΅Π½Π°ΠΌΠΈ, ΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ½ΠΎΠΉ ΡΡΡΠ΅ΠΊΡ (ΡΠΊΠ°ΠΆΠ΅ΠΌ, Π²Π·ΡΡΠ²), Π·Π°Π²ΠΈΡΡΡΠΈΠΉ ΠΎΡ ΡΠΎΠ³ΠΎ, Ρ ΡΠ΅ΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅. Π ΡΠΎΠΌ, Ρ ΠΊΠ°ΠΊΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅, Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ·Π½Π°ΡΡ ΠΈΠ· Π΄Π΅Π»Π΅Π³Π°ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π² ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ΅ Π²ΠΈΠ΄Π° ΠΈ Π΄Π°ΡΡΠ΅Π³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΎΠΉ Π³ΡΠ°Π½ΠΈΡΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ. ΠΠ½Π°Ρ, ΠΊΠ°ΠΊΠΎΠΉ ΡΡΠΎ Π±ΡΠ» ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ Π΄Π°Π»ΡΡΠ΅.