본문 바로가기
개발/ios

이미지를 회전시키고 재사용하는 꿀팁

by 매몰 2017. 2. 22.

 

 

프로그램 안에서 같은 이미지를 

 

여러곳에 사용할때! 

그것도 회전시켜 사용할때!

 

원본 이미지의 회전된 이미지를 테이블안에 넣어 사용하면 간편하고 빠르다.

물론 메모리를 좀 차지하고, 

요즘 디바이스도 워낙 좋아져 속도도 별반 차이 없겠지만

 

그래도 엄청 많은 곳에 엄청 빈번하게 회전 이미지를 사용할때는 유용하다ㅋ

 

 

 

class RotateImageTable {

    

    let mSrcImage: UIImage

    let mUnit: CGFloat

    

    var mImages: [Int: UIImage]

    

    init(srcName: String, unit: CGFloat) {

        mSrcImage = UIImage(named: srcName)!    //원본 이미지

        mImages = [Int: UIImage]()  //이미지 테이블

        mUnit = unit    //회전시킬 라디안 단위

    }

    

    private func rotate(radian: CGFloat) -> UIImage {

        //이미지 크기

        let size = mSrcImage.size

        let midX = size.width / 2

        let midY = size.height / 2

        

        //회전 작업 시작

        UIGraphicsBeginImageContext(size)

        

        //회전축을 변경 회전시킴

        let context = UIGraphicsGetCurrentContext()

        CGContextTranslateCTM(context, midX, midY)

        CGContextRotateCTM(context, radian)

        CGContextTranslateCTM(context, -midX, -midY)

        

        //이미지에 적용

        CGContextDrawImage(context, CGRectMake(0, 0, size.width, size.height), mSrcImage.CGImage)

        let image = UIGraphicsGetImageFromCurrentImageContext()

        

        //회전 작업

        UIGraphicsEndImageContext()

 

        return image

    }

    

    func image(radian: CGFloat) -> UIImage {

        //라디안 각도를 단위에 맞게 변경

        let key = Int(round(radian / mUnit))

        if key == 0 {

            //각도가 0이라면 원본 이미지 사용

            return mSrcImage

        }

        

        let image = mImages[key]

        if image == nil {

            //테이블에 해당 각도가 없다면 회전 이미지 생성

            let rotateImage = rotate(radian)

            mImages[key] = rotateImage

            return rotateImage

        }

       

        //테이블에 저장된 회전 이미지 사용

        return image!

    }

 

}

 

 

 

 

요렇게 사용한다

 

 

//0.02 라디안씩 회전하는 이미지 테이블 생성

let imageTable = RotateImageTable(srcName: "arrow.png", unit: 0.02)

        

//이미지 사용

imageTable.image(1.4).drawInRect(CGRectMake(50, 50, 150, 150))

imageTable.image(-0.67).drawInRect(CGRectMake(30, 200, 400, 400))

        

addSubview(UIImageView(image: imageTable.image(2.1)))

 

addSubview(UIImageView(image: imageTable.image(-3)))

 

 

 

 

 

 

 

 

도움이 되셨다면~ 정성으로 빚은 저희 앱!  많은 이용 바래요:)

 

https://meorimal.com/index.html?tab=spaceship

 

우주선 - 방치형 인공지능 투자 체험기

미리 맛보는 인공지능 투자!

(주)머리말 meorimal.com

 

https://meorimal.com/subway.html

 

지하철어디있니

더이상 고민하지 마세요. 뛸지 말지 딱 보면 알죠.

(주)머리말 meorimal.com

 

사업자 정보 표시
주식회사 머리말 | 고영진 | 서울특별시 송파구 중대로 135 서관 10층 (가락동, 아이티벤처타워) | 사업자 등록번호 : 524-88-00727 | TEL : 010-9990-3674 | Mail : gyjmeba@hanmail.net | 통신판매신고번호 : 2017-서울강남-03941호 | 사이버몰의 이용약관 바로가기