区块链技术博客
www.b2bchain.cn

iOS – 外观模式求职学习资料

本文介绍了iOS – 外观模式求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

意图:

外观模式是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口。

主要解决:

假如你开发某种功能,会利用系统或者第三方库中的很多对象。你需要负责很多对象的初始化工作、管理其依赖、按照正确的顺序执行和管理对象的生命周期。

解决文案:

外观类为某个系统库或者第三方库提供一个简单的接口。与直接调用系统库或者第三方库相比,外观提供的功能通常情况下是比较有限的, 但它却包含了客户端真正关心的功能。

如果你的程序需要与包含几十种功能的复杂库整合, 但只需使用其中非常少的功能, 那么使用外观模式会非常方便。

例如,在iOS开发中,我们自定义一个相机的功能,有打开相机和拍照的功能,会用到AVFoundation库,但它只需要使用一个
包含openCamera和takePhoto的方法的类即可。但我们知道自定义一个相机功能是比较复杂的,所以在应用程序和与AVFoundation之间再加一层,在这层进行复杂对象的初始化并按照顺序执行等操作,这就是外观。

代码

1、创建一个外观类

  • 在外观类的初始化方法中,可以看到我们按顺序地初始化了AVCaptureDeviceAVCaptureDeviceInputAVCapturePhotoOutputAVCaptureSessionAVCaptureVideoPreviewLayerAVLayerVideoGravity对象。
  • 在打开相机的方法中,判断了AVCaptureSessionAVCaptureVideoPreviewLayer是否初始化成功,如果失败则抛给Application,如果成功则打开打开相s机,把相机的实时画面渲染到inView中。

“`Swift
import UIKit
import AVFoundation

class CameraCapture: NSObject {
// 拍照完成回调
var takePhotoCompletion: ((UIImage?) -> Void)?
// 当前使用的视频设备
private var input: AVCaptureDeviceInput?
// 预览层
private var previewLayer: AVCaptureVideoPreviewLayer?
// 会话
private var session: AVCaptureSession?
private var captureOutput: AVCapturePhotoOutput?
// 摄像头
private var device: AVCaptureDevice?
// AVCaptureVideoPreviewLayer需要在哪个View上渲染
private var preview: UIView?

override init() {     // 创建会话层     device = AVCaptureDevice.default(for: .video)      if let d = device,        let input = try? AVCaptureDeviceInput(device: d) {         // Input          // Output         let captureOutput = AVCapturePhotoOutput()          let session = AVCaptureSession()         session.sessionPreset = AVCaptureSession.Preset.photo         if session.canAddInput(input) {             session.addInput(input)         }          if session.canAddOutput(captureOutput) {             session.addOutput(captureOutput)         }         let previewLayer = AVCaptureVideoPreviewLayer(session: session)         previewLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill          self.input = input         self.captureOutput = captureOutput         self.session = session         self.previewLayer = previewLayer     } }  /// 打开相机 /// - Parameter inView: 相册需要渲染在哪个View上 /// - Parameter completion: true 成功 false 失败 func openCamera(render inView: UIView, completion: (Bool) -> Void) {     guard let s = session,           let layer = previewLayer else {         completion(false)         return     }     preview = inView     s.startRunning()     layer.frame = inView.bounds     inView.layer.insertSublayer(layer, at: 0)

意图:

外观模式是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口。

主要解决:

假如你开发某种功能,会利用系统或者第三方库中的很多对象。你需要负责很多对象的初始化工作、管理其依赖、按照正确的顺序执行和管理对象的生命周期。

解决文案:

外观类为某个系统库或者第三方库提供一个简单的接口。与直接调用系统库或者第三方库相比,外观提供的功能通常情况下是比较有限的, 但它却包含了客户端真正关心的功能。

如果你的程序需要与包含几十种功能的复杂库整合, 但只需使用其中非常少的功能, 那么使用外观模式会非常方便。

例如,在iOS开发中,我们自定义一个相机的功能,有打开相机和拍照的功能,会用到AVFoundation库,但它只需要使用一个
包含openCamera和takePhoto的方法的类即可。但我们知道自定义一个相机功能是比较复杂的,所以在应用程序和与AVFoundation之间再加一层,在这层进行复杂对象的初始化并按照顺序执行等操作,这就是外观。

代码

1、创建一个外观类

  • 在外观类的初始化方法中,可以看到我们按顺序地初始化了AVCaptureDeviceAVCaptureDeviceInputAVCapturePhotoOutputAVCaptureSessionAVCaptureVideoPreviewLayerAVLayerVideoGravity对象。
  • 在打开相机的方法中,判断了AVCaptureSessionAVCaptureVideoPreviewLayer是否初始化成功,如果失败则抛给Application,如果成功则打开打开相s机,把相机的实时画面渲染到inView中。

“`Swift
import UIKit
import AVFoundation

class CameraCapture: NSObject {
// 拍照完成回调
var takePhotoCompletion: ((UIImage?) -> Void)?
// 当前使用的视频设备
private var input: AVCaptureDeviceInput?
// 预览层
private var previewLayer: AVCaptureVideoPreviewLayer?
// 会话
private var session: AVCaptureSession?
private var captureOutput: AVCapturePhotoOutput?
// 摄像头
private var device: AVCaptureDevice?
// AVCaptureVideoPreviewLayer需要在哪个View上渲染
private var preview: UIView?

override init() {     // 创建会话层     device = AVCaptureDevice.default(for: .video)      if let d = device,        let input = try? AVCaptureDeviceInput(device: d) {         // Input          // Output         let captureOutput = AVCapturePhotoOutput()          let session = AVCaptureSession()         session.sessionPreset = AVCaptureSession.Preset.photo         if session.canAddInput(input) {             session.addInput(input)         }          if session.canAddOutput(captureOutput) {             session.addOutput(captureOutput)         }         let previewLayer = AVCaptureVideoPreviewLayer(session: session)         previewLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill          self.input = input         self.captureOutput = captureOutput         self.session = session         self.previewLayer = previewLayer     } }  /// 打开相机 /// - Parameter inView: 相册需要渲染在哪个View上 /// - Parameter completion: true 成功 false 失败 func openCamera(render inView: UIView, completion: (Bool) -> Void) {     guard let s = session,           let layer = previewLayer else {         completion(false)         return     }     preview = inView     s.startRunning()     layer.frame = inView.bounds     inView.layer.insertSublayer(layer, at: 0)

意图:

外观模式是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口。

主要解决:

假如你开发某种功能,会利用系统或者第三方库中的很多对象。你需要负责很多对象的初始化工作、管理其依赖、按照正确的顺序执行和管理对象的生命周期。

解决文案:

外观类为某个系统库或者第三方库提供一个简单的接口。与直接调用系统库或者第三方库相比,外观提供的功能通常情况下是比较有限的, 但它却包含了客户端真正关心的功能。

如果你的程序需要与包含几十种功能的复杂库整合, 但只需使用其中非常少的功能, 那么使用外观模式会非常方便。

例如,在iOS开发中,我们自定义一个相机的功能,有打开相机和拍照的功能,会用到AVFoundation库,但它只需要使用一个
包含openCamera和takePhoto的方法的类即可。但我们知道自定义一个相机功能是比较复杂的,所以在应用程序和与AVFoundation之间再加一层,在这层进行复杂对象的初始化并按照顺序执行等操作,这就是外观。

代码

1、创建一个外观类

  • 在外观类的初始化方法中,可以看到我们按顺序地初始化了AVCaptureDeviceAVCaptureDeviceInputAVCapturePhotoOutputAVCaptureSessionAVCaptureVideoPreviewLayerAVLayerVideoGravity对象。
  • 在打开相机的方法中,判断了AVCaptureSessionAVCaptureVideoPreviewLayer是否初始化成功,如果失败则抛给Application,如果成功则打开打开相s机,把相机的实时画面渲染到inView中。

“`Swift
import UIKit
import AVFoundation

class CameraCapture: NSObject {
// 拍照完成回调
var takePhotoCompletion: ((UIImage?) -> Void)?
// 当前使用的视频设备
private var input: AVCaptureDeviceInput?
// 预览层
private var previewLayer: AVCaptureVideoPreviewLayer?
// 会话
private var session: AVCaptureSession?
private var captureOutput: AVCapturePhotoOutput?
// 摄像头
private var device: AVCaptureDevice?
// AVCaptureVideoPreviewLayer需要在哪个View上渲染
private var preview: UIView?

override init() {     // 创建会话层     device = AVCaptureDevice.default(for: .video)      if let d = device,        let input = try? AVCaptureDeviceInput(device: d) {         // Input          // Output         let captureOutput = AVCapturePhotoOutput()          let session = AVCaptureSession()         session.sessionPreset = AVCaptureSession.Preset.photo         if session.canAddInput(input) {             session.addInput(input)         }          if session.canAddOutput(captureOutput) {             session.addOutput(captureOutput)         }         let previewLayer = AVCaptureVideoPreviewLayer(session: session)         previewLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill          self.input = input         self.captureOutput = captureOutput         self.session = session         self.previewLayer = previewLayer     } }  /// 打开相机 /// - Parameter inView: 相册需要渲染在哪个View上 /// - Parameter completion: true 成功 false 失败 func openCamera(render inView: UIView, completion: (Bool) -> Void) {     guard let s = session,           let layer = previewLayer else {         completion(false)         return     }     preview = inView     s.startRunning()     layer.frame = inView.bounds     inView.layer.insertSublayer(layer, at: 0)

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » iOS – 外观模式求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们