본문 바로가기
프로그래밍/iOS

이미지의 이동, 회전, 스케일 변경

by 백룡화검 2011. 12. 27.
이미지의 이동, 회전, 스케일 변경을 위해서는 보통 Quartz 2D 나 Core Animation 을 이용한다.
간단한 경우에는 Quartz 2D, 그렇지 않은 경우는 Core Animation 을 이용해서 
CAKeyframeAnimation 등으로 보다 자세하게 설정하자.

유념해야 할 것은 원하는 효과를 얻기 위해서 center 값을 적절하게 조절해야 한다는 것,
그리고 회전과 스케일 변경을 동시에 적용하고 싶은 경우에는 concat 을 이용해서 두개의 행렬을 곱해서 처리하면 된다는 것이다.

자세한 내용은 개발자 문서를 참고하자.


1. Quartz 2D 을 이용한 회전, 스케일 변경

UIImageView *starImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"star.png"]];

[starImageView setFrame:CGRectMake(210, 129, 50, 50)];

// 이미지의 중심을 기준으로 모든 변경이 일어나야 하기 때문에 center 값을 변경한다.

[starImageView setCenter:CGPointMake(210+25, 129+25)];

[self.window addSubview:starImageView];


// degrees to radians

double radians = 30 * (2.0 * M_PI / 360.0);


// 회전

CGAffineTransform rotationTransform = CGAffineTransformRotate(starImageView.transform, radians);

// 스케일 변경

CGAffineTransform scaleTransform = CGAffineTransformScale(starImageView.transform, 1.2, 1.2);


// 회전을 적용한다.

starImageView.transform = rotationTransform;


// 회전과 스케일 변경을 함께 적용하기 위해서 CGAffineTransformConcat 사용한다.

// starImageView.transform = CGAffineTransformConcat(rotationTransform, scaleTransform);


// 이전으로 돌아간다.

// starImageView.transform = CGAffineTransformIdentity;


[starImageView release];


2. Core Animation 을 이용한 회전, 스케일 변경, 투명도 변경

#import <QuartzCore/QuartzCore.h>

UIImageView *starImageView = [[UIImageView allocinitWithImage:[UIImage imageNamed:@"star.png"]];
[starImageView setFrame:CGRectMake(210, 129, 50, 50)];

[starImageView setCenter:CGPointMake(210+25, 129+25)];

[self.window addSubview:starImageView];


double radians = 30 * (2.0 * M_PI / 360.0);

CATransform3D rotationTransform = CATransform3DMakeRotation(radians, 0, 0, 1.0);

CATransform3D scaleTransform = CATransform3DMakeScale(1.2, 1.2, 1.0);

CATransform3D transform = CATransform3DConcat(rotationTransform, scaleTransform);

CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath:@"transform"];

transformAnimation.toValue = [NSValue valueWithCATransform3D:transform];


CABasicAnimation *opacityAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];

opacityAnimation.fromValue = [NSNumber numberWithFloat:0.2];

opacityAnimation.toValue = [NSNumber numberWithFloat:1.0];


CAAnimationGroup *groupAnimation = [CAAnimationGroup animation];

groupAnimation.animations = [NSArray arrayWithObjects:transformAnimation, opacityAnimation, nil];

groupAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];

groupAnimation.duration = 1.5;

groupAnimation.repeatCount = HUGE_VALF// 계속 반복한다.

groupAnimation.autoreverses = YES;


[starImageView.layer addAnimation:groupAnimation forKey:nil];


[starImageView release];



http://onstory.egloos.com/1873765
http://goo.gl/af5CD

출처 : http://fra3il.tistory.com/118