如何保持原始格式的uiimage

时间:2017-10-02 19:26:14

标签: ios swift image uiscrollview

你好我已经创建了一个Class,这个类允许用户自拍,之后用户可以选择他想要的过滤器,但问题是,我能够拍摄照片之后,原始图像出现在屏幕的顶部,但是具有相同图像的按钮位于不同的位置,我的意思是按钮中的照片被翻转,我想将图像保持在原始位置。这是我的代码,我将添加一个屏幕图像,您将看到发生了什么。

感谢。 Image example

import UIKit
import SVProgressHUD
var filteredImage: UIImage!
class SelectFilterViewController: UIViewController {

    @IBOutlet weak var originalImage: UIImageView!
    @IBOutlet weak var imageToFilter: UIImageView!

    @IBOutlet weak var mainView: UIView!

    @IBOutlet weak var scrollView: UIScrollView!

    //var imageToShow = photo
    var CIFilterNames = [
        "CIPhotoEffectChrome",
        "CIPhotoEffectFade",
        "CIPhotoEffectInstant",
        "CIPhotoEffectNoir",
        "CIPhotoEffectProcess",
        "CIPhotoEffectTonal",
        "CIPhotoEffectTransfer",
        "CISepiaTone"
    ]
    override func viewDidLoad() {
        super.viewDidLoad()
        SVProgressHUD.dismiss()
        originalImage.image = photo
        var xCoord: CGFloat = 5
        let yCoord: CGFloat = 5
        let buttonWidth:CGFloat = 80
        let buttonHeight: CGFloat = 80
        let gapBetweenButtons: CGFloat = 5
        var itemCount = 0

        for i in 0..<CIFilterNames.count {
            itemCount = i

            // Button properties
            let filterButton = UIButton(type: .custom)
            filterButton.frame = CGRect(x: xCoord, y: yCoord, width: buttonWidth, height: buttonHeight)
            filterButton.tag = itemCount
            // filterButton.addTarget(self, action: #selector(ViewController.filterButtonTapped(_:)), for: .touchUpInside)
            filterButton.addTarget(self, action:#selector(filterButtonTapped), for: .touchUpInside)
            filterButton.layer.cornerRadius = 6
            filterButton.clipsToBounds = true
            let ciContext = CIContext(options: nil)
            let coreImage = CIImage(image: originalImage.image!)
            let filter = CIFilter(name: "\(CIFilterNames[i])" )
            filter!.setDefaults()
            filter!.setValue(coreImage, forKey: kCIInputImageKey)
            let filteredImageData = filter!.value(forKey: kCIOutputImageKey) as! CIImage
            let filteredImageRef = ciContext.createCGImage(filteredImageData, from: filteredImageData.extent)

            let imageForButton = UIImage(cgImage: filteredImageRef!)
            filterButton.setBackgroundImage(imageForButton, for: .normal)
            xCoord +=  buttonWidth + gapBetweenButtons
            scrollView.addSubview(filterButton)
        }

        scrollView.contentSize = CGSize(width: buttonWidth * CGFloat(itemCount+2), height: yCoord)

    }

    func filterButtonTapped(sender: UIButton) {
        let button = sender as UIButton

        imageToFilter.image = button.backgroundImage(for: UIControlState.normal)
    }

    func createTheAlertForEmptyImage() {
        let alert = UIAlertController(title: "xxxxx", message: "xxxxx", preferredStyle: UIAlertControllerStyle.alert)
        alert.addAction(UIAlertAction(title: "xxxxx", style: UIAlertActionStyle.default, handler: nil))
        self.present(alert, animated: true, completion: nil)
    }

    @IBAction func clickSaveButton(_ sender: Any) {


        if self.imageToFilter.image == nil {
            createTheAlertForEmptyImage()
        } else {
            filteredImage = self.imageToFilter.image!
            UIImageWriteToSavedPhotosAlbum(imageToFilter.image!, nil, nil, nil)

        }





        let alert = UIAlertController(title: "xxxx", message: "xxxxx", preferredStyle: UIAlertControllerStyle.alert)
        let action = UIAlertAction(title: "xxxxx", style: .default) { (action) -> Void in
            let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
            let vc: UIViewController = storyboard.instantiateViewController(withIdentifier: "CaptureViewController") as! CaptureViewController
            self.present(vc, animated: true, completion: nil)
        }
        alert.addAction(action)
        self.present(alert, animated: true, completion: nil)

    }

    let finalImage = filteredImage
    override var prefersStatusBarHidden: Bool {
        return true
    }

   }

0 个答案:

没有答案