티스토리 뷰

Mobile/iOS

[iOS]UIKit Dynamics

out of coding 2016. 4. 10. 01:44

안드로이드에서는 추가적으로 포함을 시켜야하는 부분들이지만, 아이폰에서는 기본적으로 제공하는 기능이 있습니다.

애니메이션을 제공하는데, 뷰에 대해서 강체 물리(rigid-object physics)를 적용한 애니메이션을 구현할 수 있도록 하는 기능이 있습니다.

그거싱 바로 UIKit Dynamics입니다.


예를 들면, 물체가 중력의 영향으로 떨어지면서 바닥에 부딪혀서, 튕겨져 나가는 효과등을 줄 수 있으며... 게임만들때 많이 쓰죠... ^^

이러한 기능들을 아주 쉽게 개발할 수 있도록 하여주는 부분이 있습니다. 이것이 바로 UIDynamicItem입니다.


UIDynamic의 구성


- reference view : 애니메이션을 사용할 View

- dynamic animator : 애니메이션을 구현

- dynamic behavior : 행동양식

- dynamic item


이중에서 가장 중요하게 생각하면 되는것이 dynamic animator입니다. 클래스는 UIDynamicAnimator입니다. 이것은 참조뷰를 기준으로 생성하게 됩니다.


Animator가 어떠한 방법으로 애니메이션을 구현할 것인가는 행동양식(behavior)가 추가되면서 결정이 되며, 예를 들어 중력을 사용할 경우에는 UIGravityBehavior를 추가하면 되고, 물체들의 충돌을 확인하고 싶다면, UICollisionBehavior를 이용하도록 합니다.


대략적인 설명은 이렇고, 추가 구현하여서 사용하는 방법은 다음과 같습니다.


@interface ViewController : UIViewController


@property (weak, nonatomic) IBOutlet UIView *simpleView;

@property (strong, nonatomic) UIDynamicAnimator *dynamicAnimator;

@property (strong, nonatomic) UIGravityBehavior *gravityBehavior;

@property (strong, nonatomic) UICollisionBehavior *collisionBehavior;


@end


------------------------------------------------------------------------------------------------------------------------


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    

    self.dynamicAnimator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];

    self.gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[self.simpleView]];

    self.collisionBehavior = [[UICollisionBehavior alloc] initWithItems:@[self.simpleView]];

    [self.collisionBehavior addBoundaryWithIdentifier:@"bottom"

                                            fromPoint:CGPointMake(0, self.view.frame.size.height)

                                              toPoint:CGPointMake(self.view.frame.size.width, self.view.frame.size.height)];

    

    [self.dynamicAnimator addBehavior:self.gravityBehavior];

    [self.dynamicAnimator addBehavior:self.collisionBehavior];

}

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함