프로그램 안에서 같은 이미지를
여러곳에 사용할때!
그것도 회전시켜 사용할때!
원본 이미지의 회전된 이미지를 테이블안에 넣어 사용하면 간편하고 빠르다.
물론 메모리를 좀 차지하고,
요즘 디바이스도 워낙 좋아져 속도도 별반 차이 없겠지만
그래도 엄청 많은 곳에 엄청 빈번하게 회전 이미지를 사용할때는 유용하다ㅋ
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
https://meorimal.com/subway.html
'개발 > ios' 카테고리의 다른 글
UIView에 동적으로 버튼을 넣을때 크기를 같게 맞출려면? (0) | 2017.04.25 |
---|---|
기준점을 중앙으로 Scale UIView 애니메이션 하기 (0) | 2017.03.21 |
쿼츠2D로 자유롭게 폰트 크기를 바꿔보자 (0) | 2016.12.19 |
역시 스레드는 필수! 아이폰과 안드로이드의 기본 스레드 사용법 비교 (0) | 2014.12.06 |
[아이폰] 간단하고 편리한 난수 발생 함수 만들기 (0) | 2014.06.22 |