Вращение UIImageView не работает при использовании CGAffineTransformMakeRotation

#swift #uiview #uiimageview #cgaffinetransform

#swift #uiview #uiimageview #cgaffinetransform

Вопрос:

Я выполняю поворот UIImageView с CGAffineTransformMakeRotation помощью. Вращение работает нормально. Когда я попытался перенести это изображение на другое UIImageView , поворот не работает.

Кодирование 1:

 @IBAction func rotateAcn(sender: UIButton) {

rotatingImageVw.transform = CGAffineTransformMakeRotation(0.22)

}
  

Вывод 1

введите описание изображения здесь

Кодирование 2:

 @IBAction func getRotatedImage(sender: UIButton) {

newImageView.image = rotatingImageVw.image

}
  

Вывод 2

введите описание изображения здесь

Я не знаю, почему это происходит? Мне нужен вывод 2, как в выводе 1. Пожалуйста, подскажите мне, как это решить?

Комментарии:

1. Можете ли вы опубликовать какой-нибудь код….

2. Действие одной кнопки, КОД 1. Другой код действия кнопки 2.

3. Знакомы ли вы с фильтрами corImage?

4. Нет. Можете ли вы помочь мне в этом?? Очень сложно

5. У меня есть идея исправить вашу проблему. но я не пробовал этот подход before.so потребуется некоторое время, чтобы найти ответ. я рекомендую вам назначить вознаграждение за этот вопрос. таким образом, больше людей будут вовлечены, чтобы ответить на ваш вопрос, и все получат выгоду. Убедитесь, что вам нужно обновить свой пост соответствующим кодом и контентом .. приветствия

Ответ №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  
   }
   }
  

Комментарии:

1. При вращении с использованием этого метода некоторая часть изображения исчезает. Как я могу добиться полного поворота изображения? Например, «CGAffineTransformMakeRotation»??

2. Я знал, что вы спросите об этом .. попробуйте передать выходной фильтр в фильтр CICrop, который устранит проблему. Из вашего вопроса вы ничего не упомянули о масштабировании или обрезке изображения size..my ответ — это то, что именно вы спросили в своем сообщении … если вы хотите, чтобы я продолжил обновлять ваш запрос. Первым делом вы должны отказаться от голосования, и мы возьмем это оттуда…

3. Я обновил свой код. Это acn с двумя кнопками. Для поворота и еще чего-то, чтобы получить это повернутое изображение.

4. По-прежнему ваше обновление не имеет для меня смысла .. позвольте мне прояснить. если вы хотите повернуть и отправить изображение на свой 2vc одним действием, это нормально.. поиграйте с моим кодом, ответ на который уже есть. когда вы будете обновлять свой пост, пожалуйста, упомяните, что вы обновили этот фрагмент info.so мой ответ не будет выглядеть безумным для других… вы поняли

5. В одном VC первый кадр Img Vw [20, 30, 240, 128] и второй кадр ImgVw [20, 180, 240, 128]. Поворачиваем первый Img Vw с помощью CGAffine и получаем это повернутое изображение во второй Img Vw. Это моя задача.