magazine off

UIImageViewではなくUIImageを回転させたい

投稿日 : 2017年7月9日(日曜日)

 

UIImageを回転させるためには、どうすればいいのだろう。残念ながらUIImagetransformanimationも持ってないので、UIImageViewを回転させるしかありませんが、生きていればUIImageを回転させるしかないんだって時もあります…orz

そんな時に救ってくれる神の関数がこちら!



    func imageRotatedByDegrees(oldImage: UIImage, deg degrees: CGFloat) -> UIImage {
        //Calculate the size of the rotated view's containing box for our drawing space
        let rotatedViewBox: UIView = UIView(frame: CGRect(x: 0, y: 0, width: oldImage.size.width, height: oldImage.size.height))
        let t: CGAffineTransform = CGAffineTransform(rotationAngle: degrees * CGFloat.pi / 180)
        rotatedViewBox.transform = t
        let rotatedSize: CGSize = rotatedViewBox.frame.size
        //Create the bitmap context
        UIGraphicsBeginImageContext(rotatedSize)
        let bitmap: CGContext = UIGraphicsGetCurrentContext()!
        //Move the origin to the middle of the image so we will rotate and scale around the center.
        bitmap.translateBy(x: rotatedSize.width / 2, y: rotatedSize.height / 2)
        //Rotate the image context
        bitmap.rotate(by: (degrees * CGFloat.pi / 180))
        //Now, draw the rotated/scaled image into the context
        bitmap.scaleBy(x: 1.0, y: -1.0)
        bitmap.draw(oldImage.cgImage!, in: CGRect(x: -oldImage.size.width / 2, y: -oldImage.size.height / 2, width: oldImage.size.width, height: oldImage.size.height))
        let newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        return newImage
    }

使い方

 var pinImage = UIImageView()
        pinImage = UIImageView.init(frame: CGRect.init(x: 0, y:15, width: 200, height: 200))
        let topImage:UIImage = UIImage(named:"pin")!
        pinImage.image = imageRotatedByDegrees(oldImage: topImage, deg: 90.0)
        self.view.addSubview(pinImage)


ソース

github

参考

Rotate UIImage in swift

Categories

Recent Posts

JavaScript – How to pass multiple values with ajax

  js var data = { …

投稿日 : 2018年6月21日(木曜日)

JavaScriptにおけるES6イテレータのシンプルなガイド(例付き

  今回の記事では、イテレータを分析していきます。   イテレータ…

投稿日 : 2021年4月30日(金曜日)

/usr/bin/ と /usr/local/bin の違い

  [urlpreviewbox url="https://teratail…

投稿日 : 2016年12月25日(日曜日)

Ubuntu18でサーバーの中の容量を把握する方法

  EC2でアプリを動かしていて容量を確認する方法 /dev/xvd…

投稿日 : 2019年10月28日(月曜日)