2016-10-22 4 views
0

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

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

@IBAction func rotateAcn(sender: UIButton) { 

rotatingImageVw.transform = CGAffineTransformMakeRotation(0.22) 

} 

Выход 1

enter image description here

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

@IBAction func getRotatedImage(sender: UIButton) { 

newImageView.image = rotatingImageVw.image 

} 

Выход 2

enter image description here

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

+0

Можете ли вы опубликовать код ... – Joe

+0

One button action, CODE 1. Еще одна кнопка action CODE 2. –

+0

Вы знакомы с фильтрами corImage? – Joe

ответ

0

Попробуйте этот код: Испытано в 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 
    } 
    } 
+0

Если я вращаюсь с помощью этого метода, некоторая часть изображения исчезает. Как я могу получить полное вращение изображения? Например, "CGAffineTransformMakeRotation" ?? –

+0

Я знал, что вы спросите об этом. Попробуйте передать выходной фильтр фильтру CICrop, который исправит проблему. Из вашего вопроса вы ничего не упомянули о масштабировании изображения или размере обрезки .. Мой ответ - то, что именно вы задали в своем посте ... если вы хотите, чтобы я приступил к обновлению вашего запроса. Во-первых, вы должны отказаться от голосования, и мы берем его оттуда ... – Joe

+0

Я обновил свой код. Это две кнопки acn. Одна вещь, чтобы повернуть и antoher - получить это повернутое изображение. –

0

Вы вращаете вид изображения, а не само изображение. Вам также необходимо получить преобразование в новое изображение.

newImageView.transform = rotatingImageVw.transform 

Если вы хотите, чтобы повернуть само изображение, а не вид, вы можете использовать CIImage.applying(_:) и применить преобразование изображения непосредственно.

 Смежные вопросы

  • Нет связанных вопросов^_^