【问题标题】:UIImageview rotation is not working when using CGAffineTransformMakeRotation使用 CGAffineTransformMakeRotation 时 UIImageview 旋转不起作用
【发布时间】:2016-10-22 16:20:16
【问题描述】:

我正在与CGAffineTransformMakeRotation 一起旋转UIImageView。旋转工作正常。当我尝试将该图像获取到另一个 UIImageView 时,旋转不起作用。

编码 1:

@IBAction func rotateAcn(sender: UIButton) {

rotatingImageVw.transform = CGAffineTransformMakeRotation(0.22)

}

输出 1

编码 2:

@IBAction func getRotatedImage(sender: UIButton) {

newImageView.image = rotatingImageVw.image

}

输出 2

我不知道为什么会这样?我需要 Output 2 就像 Output 1 一样。请指导我如何解决这个问题?

【问题讨论】:

  • 你能贴一些代码吗....
  • 一个按钮操作,代码 1。另一个按钮操作代码 2。
  • 你熟悉corImage滤镜吗?
  • 没有。你能指导我吗?非常艰难
  • 我有一个想法来解决你的问题。但是,我之前没有尝试过这种方法。所以需要一段时间才能找到答案。我建议你在这个问题上给予赏金.so 更多人会参与回答您的问题,每个人都会受益。确保您需要使用正确的代码和内容更新您的帖子..cheers

标签: swift uiview uiimageview cgaffinetransform


【解决方案1】:

Swift 5 的解决方案:

rotatingImageVw.transform = rotatingImageVw.transform.rotated(by: CGFloat(Double.pi / 4))

【讨论】:

    【解决方案2】:

    您正在旋转图像视图,而不是图像本身。 您还需要转换到新的图像视图。

    newImageView.transform = rotatingImageVw.transform
    

    如果您想旋转图像本身,而不是视图,您可以使用CIImage.applying(_:) 并直接在图像上应用变换。

    【讨论】:

      【解决方案3】:

      试试这个代码:在 Swift 3 中测试

      注意:您没有发布正确的代码。所以,我为你做了一个。

      第一个 VC:

      import UIKit
      
      extension Double {
      func toRadians() -> CGFloat {
          return CGFloat(self * .pi / 180.0) }  }
      
      extension UIImage {
      func rotated(by degrees: Double) -> UIImage? {
          guard let cgImage = self.cgImage else { return nil }
      
          let transform = CGAffineTransform(rotationAngle: degrees.toRadians())
          var rect = CGRect(origin: .zero, size: self.size).applying(transform)
          rect.origin = .zero
      
          let renderer = UIGraphicsImageRenderer(size: rect.size)
          return renderer.image { renderContext in
              renderContext.cgContext.translateBy(x: rect.midX, y: rect.midY)
              renderContext.cgContext.rotate(by: degrees.toRadians())
              renderContext.cgContext.scaleBy(x: 1.0, y: -1.0)
      
              let drawRect = CGRect(origin: CGPoint(x: -self.size.width/2, y: -self.size.height/2), size: self.size)
              renderContext.cgContext.draw(cgImage, in: drawRect)
          }
         }
         }
      
      class ViewController: UIViewController  {
      
      @IBOutlet weak var imageView: UIImageView!
      
      
      override func viewDidLoad() { }
      
      override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
      
          if segue.identifier == "passImageData" {
              let dvc = segue.destination as! viewtwo
      
             let rotatedImage = imageView.image?.rotated(by: 45) // You workout the angle ypu want
              dvc.newImage = rotatedImage
      
          } 
      
      }
      

      第二个 VC:

         import Foundation
         import UIKit
      
         class viewtwo: UIViewController {
      
         @IBOutlet weak var passedimage: UIImageView!
      
         var newImage: UIImage!
      
         override func viewDidLoad() {
         passedimage.image = newImage  
         }
         }
      

      【讨论】:

      • 如果我使用这种方法旋转,图像的某些部分会消失。如何获得完整的图像旋转?比如,“CGAffineTransformMakeRotation”??
      • 我知道你会问这个..尝试将输出过滤器传递给 CICrop 过滤器来解决问题。从你的问题中,你没有提到任何关于图像缩放或裁剪大小的事情。我的回答是您在帖子中到底问了什么……如果您希望我继续更新您的请求。首先你必须放弃投票,我们从那里拿走它......
      • 我已经更新了我的代码。这是两个按钮acn。一件事,旋转和另一个是得到旋转的图像。
      • 您的更新对我来说仍然毫无意义..让我清楚。如果您想通过一个很好的操作旋转并将图像发送到您的 2vc..播放我的代码答案已经存在.when您更新了您的帖子,请提及您更新了这条信息。所以我的回答不会对其他人看起来很疯狂......你明白了
      • 在单个 VC 中,第一个 Img Vw 帧 [20, 30, 240, 128] 和第二个 ImgVw 帧 [20, 180, 240, 128]。使用 CGAffine 旋转 First Img Vw 并将旋转后的图像转换为 Second Img Vw。那是我的任务。
      猜你喜欢
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 2010-10-25
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多