iOS相机定制:如何实现网格线?

时间:2013-03-21 14:19:23

标签: iphone ios camera uiimagepickercontroller

我可以使用闪光灯功能,访问照片库,并使用后/前相机。

我想实现在用户拍照时显示的网格线。

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

创建UIImageView以用于cameraOverlayView

假设您有一个名为UIImagePickerController的{​​{1}},并且您还有一个名为yourImagePickerController的图像文件作为'网格线'。制作网格线图像文件时,请务必使用透明背景 - 而不是不透明的白色。

overlay.png

答案 1 :(得分:1)

就文档而言,它并未说明Apple提供的网格线是否实际上是一种共享方法,但由于没有提到,我会说不是,但您可以实现自己的with the cameraOverlayView。< / p>

答案 2 :(得分:0)

使用 UIBezierPath 非常简单。这是您可以实现的方法。

  1. 将此代码保存在名为 GridView.swift 的文件中。

     import Foundation
     import UIKit
    
     class GridView: UIView {
    
     override func draw(_ rect: CGRect) {
    
         let firstColumnPath = UIBezierPath()
         firstColumnPath.move(to: CGPoint(x: bounds.width / 3, y: 0))
         firstColumnPath.addLine(to: CGPoint(x: bounds.width / 3, y: bounds.height))
         let firstColumnLayer = gridLayer()
         firstColumnLayer.path = firstColumnPath.cgPath
         layer.addSublayer(firstColumnLayer)
    
         let secondColumnPath = UIBezierPath()
         secondColumnPath.move(to: CGPoint(x: (2 * bounds.width) / 3, y: 0))
         secondColumnPath.addLine(to: CGPoint(x: (2 * bounds.width) / 3, y: bounds.height))
         let secondColumnLayer = gridLayer()
         secondColumnLayer.path = secondColumnPath.cgPath
         layer.addSublayer(secondColumnLayer)
    
         let firstRowPath = UIBezierPath()
         firstRowPath.move(to: CGPoint(x: 0, y: bounds.height / 3))
         firstRowPath.addLine(to: CGPoint(x: bounds.width, y: bounds.height / 3))
         let firstRowLayer = gridLayer()
         firstRowLayer.path = firstRowPath.cgPath
         layer.addSublayer(firstRowLayer)
    
         let secondRowPath = UIBezierPath()
         secondRowPath.move(to: CGPoint(x: 0, y: ( 2 * bounds.height) / 3))
         secondRowPath.addLine(to: CGPoint(x: bounds.width, y: ( 2 * bounds.height) / 3))
         let secondRowLayer = gridLayer()
         secondRowLayer.path = secondRowPath.cgPath
         layer.addSublayer(secondRowLayer)
     }
     private func gridLayer() -> CAShapeLayer {
         let shapeLayer = CAShapeLayer()
         shapeLayer.strokeColor = UIColor(white: 1.0, alpha: 0.3).cgColor
         shapeLayer.frame = bounds
         shapeLayer.fillColor = nil
         return shapeLayer
     }
    }
    
  1. 用法:

    func addGridView(cameraView: UIView) {
     let horizontalMargin = cameraView.bounds.size.width / 4
     let verticalMargin = cameraView.bounds.size.height / 4
    
     let gridView = GridView()
     gridView.translatesAutoresizingMaskIntoConstraints = false
     cameraView.addSubview(gridView)
     gridView.backgroundColor = UIColor.clear
     gridView.leftAnchor.constraint(equalTo: cameraView.leftAnchor, constant: horizontalMargin).isActive = true
     gridView.rightAnchor.constraint(equalTo: cameraView.rightAnchor, constant: -1 * horizontalMargin).isActive = true
     gridView.topAnchor.constraint(equalTo: cameraView.topAnchor, constant: verticalMargin).isActive = true
     gridView.bottomAnchor.constraint(equalTo: cameraView.bottomAnchor, constant: -1 * verticalMargin).isActive = true
    }