간단한 경우에는 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 alloc] initWithImage:[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
'프로그래밍 > iOS' 카테고리의 다른 글
iOS의 UDID 제거 이후 나오는 대안들 (0) | 2012.01.03 |
---|---|
iOS5의 UDID 정책 변경에 따른 문제해결방안 (0) | 2012.01.03 |
파일 압축, 압축 해제 (0) | 2011.12.27 |
공통으로 쓰이는 코드, Library로 만들기. (0) | 2011.12.27 |
앱 아이콘의 상단부가 shining (빛 나는) 되는 효과 없애기!! – Remove Shine / Gloss Effect on iPhone Icon (0) | 2011.12.21 |