iOS에서 이미지를 화면에 표시하는 방법 중 2가지에 대해 정리해 봅니다. 첫번째는 UIView를 상속 받아 drawRect 함수를 재정의해 이미지를 직접 그리는 방식, 두번째는 이미지를 표시하는 UIImageView 컨트롤을 이용하는 방식입니다.
- (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); UIImage *img = [UIImage imageNamed:@"goon.png"]; CGSize imgSize = [img size]; static CGFloat angle = 0; angle += 5; CGFloat imgWidth = imgSize.width/1.5; CGFloat imgHeight = imgSize.height/1.5; CGFloat x = 80; CGFloat y = 120; CGRect rc = CGRectMake(x, y, imgWidth, imgHeight); CGContextTranslateCTM(context, imgWidth/2+x, imgHeight/2+y); CGContextRotateCTM(context, angle * M_PI/180); CGContextTranslateCTM(context, -imgWidth/2-x, -imgHeight/2-y); [img drawInRect:rc]; }
이미지 회전에 대해서 인지해야할 코드만을 설명드리면 8번의 angle 값이 회전값입니다. 그리고 12번과 13번 코드는 이미지를 표시할 화면상의 좌표입니다. 17번 ~ 19번 코드가 실제 이미지를 회전시키기 위한 코드로써 이미지를 중심으로 회전하기 위해 이동 변환과 회전 변환 다시 역이동 변환을 수행하고 있습니다. 이렇게 하면 다음처럼 화면에 이미지가 표시됩니다.
-(IBAction)rotateAction:(id)sender { [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:3]; CGAffineTransform rotateTransform = CGAffineTransformMakeRotation(angle * M_PI / 180); angle = (angle == 180 ? 360 : 180); imageView.transform = rotateTransform; [UIView commitAnimations]; }
보시면 앞서 살펴본 첫번째 방법처럼 단순히 회전된 상태의 이미지를 화면에 찍는 것이 아닌 애니메이션 효과를 주어서 이미지를 회전시키고 있습니다. 이게 바로 UIImageView와 같은 컨트롤을 통해 이미지를 표현하는 가장 큰 장점입니다. 코드도 훨씬 간결하구요 !! 🙂 실행 결과는 첫번째에서 소개한 실행 화면과 동일하므로 생략하겠습니다. 차이점은 애니메이션을 통해 이미지가 회전된다는 것입니다.