#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. Это моя задача.