2014년 11월 9일 일요일

아이폰 - iOS 7.0에 추가된 UIKit의 Dynamics에 대한 데모 코드를 작성해 보자!

iOS 7.0에 추가된 UIKit의 Dynamics에 대한 데모 코드를 작성해 보자! 조회 : 150
나의 폴더 > 아이폰 | 2013-09-24 (Tue) 09:13http://blog.dreamwiz.com/papasmf1/13992924
UIKit Dynamics 데모

중력이나 충돌에 대한 처리를 담당하는 새로운 클래스들이 추가되었다.

1. File->New->Project
를 선택하고 싱글뷰 애플리케이션 템플릿을 선택한다프로젝트이름은 DemoDynamics로 한다.
2. ViewController.m파일에 다음의 코드를 추가한다.
뷰에 정사각형을 하나 올려놓고 하단으로 자연스럽게 내려가도록 한다.

#import
"Dynamics2ViewController.h"


@interfaceDynamics2ViewController () <UICollisionBehaviorDelegate>
{
  UIDynamicAnimator *_animator;
  UIGravityBehavior *_gravity;
  UICollisionBehavior *_collision;
  BOOL _firstContact;
}
@end

@implementation Dynamics2ViewController

- (void)viewDidLoad
{
    [superviewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    UIView *square = [[UIViewallocinitWithFrame:
       CGRectMake(100100100100)];
    square.backgroundColor = [UIColorgrayColor];
    [self.viewaddSubview:square];

충돌한 경우 처리할 장벽에 해당되는 객체를 뷰객체로 생성합니다.

    UIView *barrier = [[UIViewallocinitWithFrame:
       CGRectMake(030013020)];
    barrier.backgroundColor = [UIColorredColor];
    [self.viewaddSubview:barrier];

    _animator = [[UIDynamicAnimatorallocinitWithReferenceView:self.view];
    _gravity = [[UIGravityBehaviorallocinitWithItems:@[square]];
    [_animatoraddBehavior:_gravity];

여기까지의 코드를 통해 자연스럽게 떨어지는 물체에 중력도를 더할 수 있다.
UIDynamicAnimator: 이 클래스는  UIKit 물리 엔진이라고 할 수 있다이 클래스는 전반적인 작업 목록을 제공하는 중력과 같이 엔젠에 다양한 행위들을 추적할 수 있도록 한다.
UIGravityBehavior: 하나 또는 그 이상의 아이템들에 중력의 행위를 모델링한다행위의 인스턴스를 생성했을 때아이템들과 연결되도록 한다이 방법은 행위에 의해 영향을 받은 아이템들을 선택할 수 있고 이러한 경우 아이템들은 중력의 영향을 받을 수 있다.

    _collision = [[UICollisionBehaviorallocinitWithItems:@[square]];
    [_collisionaddBoundaryWithIdentifier:@"barrier"fromPoint:barrier.frame.origintoPoint:CGPointMake  
      (barrier.
frame.origin.x + barrier.frame.size.width, barrier.frame.origin.y)];
    _collision.translatesReferenceBoundsIntoBoundary = YES;
    _collision.collisionDelegate = self;

윈래의 코드는 바닥(경계선없이 지속적으로 떨어지기 때문에 위의 코드를 통해 바운더리를 만들어 주면 바닥에서 사각형이 멈추는 것을 볼 수 있다.
좌표계에 해당하는 바운더리를 만들어주는 경우에는 translatesReferenceBoundsIntoBoundary속성을 YES로 지정하면 된다.

    UIDynamicItemBehavior *itemBehaviour = [[UIDynamicItemBehaviorallocinitWithItems:@[square]];
    itemBehaviour.elasticity = 0.5;
    [_animatoraddBehavior:itemBehaviour];

    [_animatoraddBehavior:itemBehaviour];

    [_animatoraddBehavior:_collision];
}

-(void)collisionBehavior:(UICollisionBehavior *)behavior beganContactForItem:(id<UIDynamicItem>)item withBoundaryIdentifier:(id<NSCopying>)identifier atPoint:(CGPoint)p
{
    UIView *view = (UIView *)item;
    view.backgroundColor = [UIColoryellowColor];
    [UIViewanimateWithDuration:0.3animations:^{
    view.backgroundColor = [UIColorgrayColor];
    }];

    if(!_firstContact)
    {
        _firstContact = YES;
        UIView *square = [[UIViewallocinitWithFrame:CGRectMake(300100100)];
        square.backgroundColor = [UIColorgrayColor];
        [self.viewaddSubview:square];

        [_collisionaddItem:square];
        [_gravityaddItem:square];

        UIPushBehavior *push = [[UIPushBehaviorallocinitWithItems:@[view]
          mode
:UIPushBehaviorModeInstantaneous];
        [pushsetAngle:-M_PI/2magnitude:8.0f];
        [_animatoraddBehavior:push];

        UIAttachmentBehavior *attach = [[UIAttachmentBehaviorallocinitWithItem:viewattachedToItem:square];
        [_animatoraddBehavior:attach];
    }
}

- (void)didReceiveMemoryWarning
{
    [superdidReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

댓글 없음:

댓글 쓰기

참고: 블로그의 회원만 댓글을 작성할 수 있습니다.

'일론 머스크' '젠슨 황' AI 리더들, 그들의 성공 비결은 바로 이것 - 누가 부자가 되는가 영상입니다. ㅎㅎ

  책을 통해서만 접했던 내용들을 영상으로 보니 더 실감이 납니다. KBS에서 방송된 내용인데 주말에 보시면 좋은 영상입니다. 엔비디아의 주가가 이해가 됩니다. ㅋㅋ 생각보다 미국시장이 강한 것이 AI는 거의 미국과 중국이 주도하는 시장이 되고 있습...