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

댓글 없음:

댓글 쓰기

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

5월 14일 새벽에 chatGPT 4o가 발표되었습니다. 옵티마이즈, 옴니라는 의미인데 실시간 통역, 다자간 회의, 멀티모달 기능의 강화등이 보이네요.

  초격차로 OpenAI진영이 다시 앞서가는 모양을 보여주고 있습니다. 저도 새벽에 일어나자 마자 올라온 영상들과 글을 정리하고 있습니다. ㅎㅎ 영화 HER의 사진이 새벽에 많이 올라왔었는데 저도 안본 영화입니다. 주말에 한번 봐야 할 것 같습니다....